From 58d4c0911c8309d4540482705d4915b5e854cb1e Mon Sep 17 00:00:00 2001 From: Marcin Osowski Date: Wed, 8 Jun 2011 14:47:53 +0200 Subject: [PATCH] First version of an FPGA binary oscilloscope --- .gitignore | 5 + Makefile | 13 + README | 6 + bit/oscilloscope.bit | Bin 0 -> 72782 bytes ipcore_dir/blk_mem_gen_ds512.pdf | Bin 0 -> 41717 bytes ipcore_dir/blk_mem_gen_readme.txt | 209 + ipcore_dir/char_rom_memory.asy | 17 + ipcore_dir/char_rom_memory.gise | 32 + ipcore_dir/char_rom_memory.mif | 16384 +++++++++++++++++ ipcore_dir/char_rom_memory.ncf | 0 ipcore_dir/char_rom_memory.ngc | 3 + ipcore_dir/char_rom_memory.vhd | 134 + ipcore_dir/char_rom_memory.vho | 64 + ipcore_dir/char_rom_memory.xco | 101 + ipcore_dir/char_rom_memory.xise | 72 + ipcore_dir/char_rom_memory_flist.txt | 14 + ipcore_dir/char_rom_memory_xmdf.tcl | 80 + ipcore_dir/clock_108mhz.vhd | 90 + ipcore_dir/clock_108mhz.xaw | 3 + ipcore_dir/clock_108mhz_arwz.ucf | 17 + ipcore_dir/clock_108mhz_flist.txt | 2 + ipcore_dir/coregen.cgc | 325 + ipcore_dir/coregen.cgp | 9 + ipcore_dir/edit_char_rom_memory.tcl | 37 + ipcore_dir/trace_memory.asy | 37 + ipcore_dir/trace_memory.gise | 32 + ipcore_dir/trace_memory.ncf | 0 ipcore_dir/trace_memory.ngc | 3 + ipcore_dir/trace_memory.vhd | 149 + ipcore_dir/trace_memory.vho | 74 + ipcore_dir/trace_memory.xco | 101 + ipcore_dir/trace_memory.xise | 72 + ipcore_dir/trace_memory_flist.txt | 13 + ipcore_dir/trace_memory_xmdf.tcl | 76 + oscilloscope.xise | 511 + project/oscilloscope.svg | 1766 ++ project/oscilloscope.vpp | Bin 0 -> 309240 bytes project/reading_resolutions.ods | Bin 0 -> 13088 bytes project/reading_resolutions.pdf | Bin 0 -> 15660 bytes project/screen-utilization-plan.png | Bin 0 -> 13466 bytes project/screen-utilization-plan.xcf | Bin 0 -> 197098 bytes src/basys2.ucf | 58 + src/bits_aggregator.vhd | 110 + src/char_rom_mux.vhd | 55 + src/clock_divider.vhd | 38 + src/debouncer.vhd | 38 + src/display.vhd | 224 + src/main.vhd | 281 + src/n_cycles_delayer.vhd | 47 + src/one_cycle_delayer.vhd | 36 + src/pixgen_mux.vhd | 42 + src/reader.vhd | 150 + src/rom_data/8x16_font_ASCII_DOS_437.coe | 16386 ++++++++++++++++++ src/rom_data/8x16_font_ASCII_DOS_437.gif | Bin 0 -> 1426 bytes src/rom_data/img2coe.py | 20 + src/screen_position_gen.vhd | 125 + src/settings.vhd | 82 + src/settings_pixgen.vhd | 240 + src/single_debouncer.vhd | 45 + src/tests/test_bits_aggregator.vhd | 171 + src/tests/test_char_rom_mux.vhd | 160 + src/tests/test_clock_divider.vhd | 97 + src/tests/test_compiler_error.vhd | 28 + src/tests/test_debouncer.vhd | 132 + src/tests/test_n_cycles_delayer.vhd | 114 + src/tests/test_oscilloscope_display.vhd | 141 + src/tests/test_reader.vhd | 178 + src/tests/test_screen_position_gen.vhd | 152 + src/tests/test_single_debouncer.vhd | 126 + src/tests/test_trace_memory.vhd | 130 + src/tests/test_trace_pixgen.vhd | 185 + src/tests/test_trigger.vhd | 184 + src/tests/test_types.vhd | 31 + src/tests/test_vga_controller_1280_1024.vhd | 101 + src/time_base_pixgen.vhd | 75 + src/trace_pixgen.vhd | 162 + src/trigger.vhd | 106 + src/types.vhd | 70 + src/vga_controller_1280_1024.vhd | 162 + 79 files changed, 40933 insertions(+) create mode 100644 .gitignore create mode 100644 Makefile create mode 100644 README create mode 100644 bit/oscilloscope.bit create mode 100644 ipcore_dir/blk_mem_gen_ds512.pdf create mode 100644 ipcore_dir/blk_mem_gen_readme.txt create mode 100644 ipcore_dir/char_rom_memory.asy create mode 100644 ipcore_dir/char_rom_memory.gise create mode 100644 ipcore_dir/char_rom_memory.mif create mode 100644 ipcore_dir/char_rom_memory.ncf create mode 100644 ipcore_dir/char_rom_memory.ngc create mode 100644 ipcore_dir/char_rom_memory.vhd create mode 100644 ipcore_dir/char_rom_memory.vho create mode 100644 ipcore_dir/char_rom_memory.xco create mode 100644 ipcore_dir/char_rom_memory.xise create mode 100644 ipcore_dir/char_rom_memory_flist.txt create mode 100644 ipcore_dir/char_rom_memory_xmdf.tcl create mode 100644 ipcore_dir/clock_108mhz.vhd create mode 100644 ipcore_dir/clock_108mhz.xaw create mode 100644 ipcore_dir/clock_108mhz_arwz.ucf create mode 100644 ipcore_dir/clock_108mhz_flist.txt create mode 100644 ipcore_dir/coregen.cgc create mode 100644 ipcore_dir/coregen.cgp create mode 100644 ipcore_dir/edit_char_rom_memory.tcl create mode 100644 ipcore_dir/trace_memory.asy create mode 100644 ipcore_dir/trace_memory.gise create mode 100644 ipcore_dir/trace_memory.ncf create mode 100644 ipcore_dir/trace_memory.ngc create mode 100644 ipcore_dir/trace_memory.vhd create mode 100644 ipcore_dir/trace_memory.vho create mode 100644 ipcore_dir/trace_memory.xco create mode 100644 ipcore_dir/trace_memory.xise create mode 100644 ipcore_dir/trace_memory_flist.txt create mode 100644 ipcore_dir/trace_memory_xmdf.tcl create mode 100644 oscilloscope.xise create mode 100644 project/oscilloscope.svg create mode 100644 project/oscilloscope.vpp create mode 100644 project/reading_resolutions.ods create mode 100644 project/reading_resolutions.pdf create mode 100644 project/screen-utilization-plan.png create mode 100644 project/screen-utilization-plan.xcf create mode 100644 src/basys2.ucf create mode 100644 src/bits_aggregator.vhd create mode 100644 src/char_rom_mux.vhd create mode 100644 src/clock_divider.vhd create mode 100644 src/debouncer.vhd create mode 100644 src/display.vhd create mode 100644 src/main.vhd create mode 100644 src/n_cycles_delayer.vhd create mode 100644 src/one_cycle_delayer.vhd create mode 100644 src/pixgen_mux.vhd create mode 100644 src/reader.vhd create mode 100644 src/rom_data/8x16_font_ASCII_DOS_437.coe create mode 100644 src/rom_data/8x16_font_ASCII_DOS_437.gif create mode 100755 src/rom_data/img2coe.py create mode 100644 src/screen_position_gen.vhd create mode 100644 src/settings.vhd create mode 100644 src/settings_pixgen.vhd create mode 100644 src/single_debouncer.vhd create mode 100644 src/tests/test_bits_aggregator.vhd create mode 100644 src/tests/test_char_rom_mux.vhd create mode 100644 src/tests/test_clock_divider.vhd create mode 100644 src/tests/test_compiler_error.vhd create mode 100644 src/tests/test_debouncer.vhd create mode 100644 src/tests/test_n_cycles_delayer.vhd create mode 100644 src/tests/test_oscilloscope_display.vhd create mode 100644 src/tests/test_reader.vhd create mode 100644 src/tests/test_screen_position_gen.vhd create mode 100644 src/tests/test_single_debouncer.vhd create mode 100644 src/tests/test_trace_memory.vhd create mode 100644 src/tests/test_trace_pixgen.vhd create mode 100644 src/tests/test_trigger.vhd create mode 100644 src/tests/test_types.vhd create mode 100644 src/tests/test_vga_controller_1280_1024.vhd create mode 100644 src/time_base_pixgen.vhd create mode 100644 src/trace_pixgen.vhd create mode 100644 src/trigger.vhd create mode 100644 src/types.vhd create mode 100644 src/vga_controller_1280_1024.vhd diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..177910f --- /dev/null +++ b/.gitignore @@ -0,0 +1,5 @@ +*~ +.*.swp +work/ +_xmsgs/ +iseconfig/ diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..b518662 --- /dev/null +++ b/Makefile @@ -0,0 +1,13 @@ +# Device 0: XC3S100E - FPGA (Device ID: f5045093) +# Device 1: XCF02S - PROM (Device ID: 11c10093) +DEVICE_NUM=0 + +bit/oscilloscope.bit: + cp work/oscilloscope.bit bit/ + +up: bit/oscilloscope.bit + djtgcfg prog \ + -d Basys2 \ + -i $(DEVICE_NUM) \ + --file bit/oscilloscope.bit + diff --git a/README b/README new file mode 100644 index 0000000..93e6ae6 --- /dev/null +++ b/README @@ -0,0 +1,6 @@ +An FPGA-based binary oscilloscope for 1280x1024 @ 60hz VGA monitor. + +Target device: Basys2, Spartan3E 100K + +In order to upload programming file to Basys2 device: + o make up diff --git a/bit/oscilloscope.bit b/bit/oscilloscope.bit new file mode 100644 index 0000000000000000000000000000000000000000..e20c2ed31eee68fb00b1c536413a1e0ff756e498 GIT binary patch literal 72782 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 literal 0 HcmV?d00001 diff --git a/ipcore_dir/blk_mem_gen_ds512.pdf b/ipcore_dir/blk_mem_gen_ds512.pdf new file mode 100644 index 0000000000000000000000000000000000000000..1b96c7183cfa5839ed2443240b60eedc36f394b3 GIT binary patch literal 41717 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 + + + + + + + + + + + + + + + + + + + 11.1 + + + + + + + + + + + + diff --git a/ipcore_dir/char_rom_memory.mif b/ipcore_dir/char_rom_memory.mif new file mode 100644 index 0000000..5af798f --- /dev/null +++ b/ipcore_dir/char_rom_memory.mif @@ -0,0 +1,16384 @@ +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +1 +1 +1 +1 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +1 +1 +1 +1 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +1 +1 +1 +1 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +1 +1 +1 +1 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +1 +1 +1 +1 +0 +0 +1 +1 +1 +1 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +1 +1 +1 +1 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +1 +1 +1 +1 +1 +1 +0 +0 +0 +1 +1 +1 +1 +0 +0 +0 +1 +1 +1 +1 +0 +0 +0 +0 +1 +1 +1 +1 +1 +1 +0 +1 +1 +1 +1 +1 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +0 +0 +0 +0 +0 +0 +1 +1 +1 +1 +1 +1 +1 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +1 +1 +1 +1 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +1 +1 +1 +1 +1 +1 +0 +0 +0 +0 +1 +1 +1 +0 +0 +1 +1 +0 +0 +1 +1 +0 +0 +0 +1 +1 +0 +0 +1 +1 +0 +1 +1 +0 +0 +0 +1 +1 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +0 +1 +0 +0 +1 +0 +1 +1 +1 +0 +1 +1 +0 +1 +1 +0 +1 +1 +0 +1 +1 +0 +0 +0 +0 +0 +1 +0 +0 +0 +0 +0 +0 +1 +1 +1 +1 +0 +0 +0 +0 +1 +1 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +1 +1 +1 +1 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +1 +1 +1 +1 +1 +1 +0 +0 +0 +1 +1 +0 +1 +0 +0 +1 +1 +0 +0 +1 +1 +0 +0 +0 +1 +1 +1 +1 +1 +1 +0 +1 +1 +1 +1 +1 +1 +1 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +0 +0 +0 +0 +0 +0 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +0 +0 +0 +1 +1 +1 +0 +0 +0 +0 +0 +1 +1 +1 +1 +0 +0 +0 +1 +1 +1 +1 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +1 +1 +1 +1 +1 +1 +0 +0 +1 +1 +1 +1 +0 +0 +1 +1 +0 +0 +0 +0 +1 +1 +0 +0 +1 +1 +0 +0 +1 +0 +0 +1 +1 +0 +0 +1 +1 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +1 +1 +1 +1 +0 +1 +1 +0 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +1 +0 +0 +0 +0 +0 +0 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +0 +0 +1 +1 +1 +1 +1 +0 +0 +1 +1 +1 +0 +0 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +0 +0 +0 +1 +1 +0 +0 +0 +1 +1 +1 +0 +0 +1 +1 +1 +0 +1 +1 +0 +0 +1 +1 +0 +1 +0 +0 +1 +1 +0 +0 +1 +0 +1 +1 +1 +1 +0 +0 +0 +0 +1 +1 +0 +0 +1 +1 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +1 +1 +0 +0 +1 +1 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +0 +1 +1 +1 +1 +0 +1 +1 +1 +0 +0 +0 +0 +1 +1 +1 +1 +1 +1 +1 +1 +1 +0 +1 +1 +1 +1 +1 +1 +1 +0 +1 +1 +1 +0 +0 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +0 +0 +1 +1 +1 +1 +0 +0 +1 +1 +0 +0 +0 +0 +1 +1 +0 +1 +0 +0 +0 +0 +1 +0 +1 +0 +1 +1 +1 +1 +0 +1 +1 +1 +0 +0 +1 +1 +0 +0 +0 +0 +1 +1 +1 +1 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +1 +1 +1 +1 +1 +0 +0 +1 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +1 +0 +0 +1 +1 +0 +0 +1 +1 +1 +1 +0 +0 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +0 +0 +1 +1 +1 +1 +1 +0 +0 +1 +1 +1 +0 +0 +1 +1 +1 +0 +1 +1 +1 +1 +1 +1 +0 +0 +0 +1 +1 +1 +1 +0 +0 +1 +1 +0 +0 +0 +0 +1 +1 +0 +1 +0 +0 +0 +0 +1 +0 +1 +0 +1 +1 +1 +1 +0 +1 +1 +1 +0 +0 +1 +1 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +1 +1 +0 +0 +1 +1 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +0 +0 +0 +0 +0 +0 +1 +1 +1 +1 +1 +1 +1 +1 +1 +0 +1 +1 +1 +1 +1 +0 +0 +0 +0 +1 +1 +1 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +1 +1 +1 +0 +0 +1 +1 +1 +0 +1 +1 +0 +0 +1 +1 +0 +1 +0 +0 +1 +1 +0 +0 +1 +1 +1 +0 +0 +1 +1 +0 +0 +0 +1 +1 +1 +1 +1 +1 +0 +0 +1 +1 +1 +0 +0 +0 +0 +0 +1 +1 +0 +0 +1 +1 +1 +1 +1 +0 +1 +1 +0 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +1 +0 +0 +0 +0 +0 +0 +1 +1 +1 +1 +1 +1 +1 +1 +1 +0 +0 +1 +1 +1 +0 +0 +0 +0 +0 +0 +1 +0 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +1 +1 +1 +1 +1 +1 +0 +0 +1 +1 +1 +1 +0 +0 +1 +1 +0 +0 +0 +0 +1 +1 +1 +1 +0 +0 +1 +1 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +1 +1 +1 +1 +0 +0 +0 +0 +1 +1 +1 +0 +0 +1 +1 +1 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +1 +1 +1 +1 +0 +0 +1 +1 +1 +1 +1 +1 +0 +0 +0 +0 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +1 +1 +0 +0 +0 +0 +1 +1 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +1 +1 +1 +1 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +1 +1 +1 +1 +1 +1 +0 +1 +1 +1 +1 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +1 +1 +1 +0 +0 +0 +0 +0 +1 +1 +1 +0 +0 +1 +1 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +1 +1 +1 +1 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +1 +1 +1 +1 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +1 +1 +1 +1 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +1 +1 +1 +1 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +1 +1 +1 +1 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +1 +1 +1 +1 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +1 +1 +1 +1 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +1 +1 +1 +1 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +1 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +1 +1 +0 +0 +1 +1 +0 +0 +1 +1 +1 +1 +1 +1 +1 +1 +1 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +1 +0 +0 +0 +1 +1 +1 +1 +0 +0 +0 +1 +1 +0 +0 +1 +1 +0 +1 +1 +0 +1 +1 +0 +1 +1 +0 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +1 +1 +0 +0 +0 +0 +1 +1 +1 +1 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +1 +1 +0 +0 +0 +0 +0 +0 +0 +1 +1 +1 +1 +0 +0 +1 +1 +1 +1 +1 +1 +0 +0 +1 +1 +0 +0 +1 +1 +0 +1 +1 +0 +1 +1 +0 +1 +1 +0 +0 +1 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +1 +1 +1 +1 +0 +0 +1 +1 +1 +1 +1 +1 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +0 +0 +0 +0 +1 +1 +1 +1 +1 +1 +1 +0 +1 +1 +1 +1 +1 +0 +0 +0 +0 +0 +1 +1 +1 +1 +1 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +1 +1 +0 +0 +1 +1 +0 +1 +1 +0 +1 +1 +0 +1 +1 +0 +1 +1 +0 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +0 +1 +0 +0 +0 +0 +0 +1 +1 +1 +0 +0 +0 +1 +1 +1 +1 +1 +1 +1 +0 +1 +1 +1 +1 +1 +1 +1 +0 +1 +1 +1 +1 +1 +1 +1 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +1 +1 +0 +0 +1 +1 +0 +0 +1 +1 +1 +1 +0 +1 +1 +1 +1 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +0 +1 +1 +0 +1 +1 +0 +0 +0 +0 +1 +1 +1 +0 +0 +0 +0 +1 +1 +1 +1 +1 +0 +0 +1 +1 +1 +1 +1 +0 +0 +0 +0 +0 +1 +1 +1 +1 +1 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +1 +1 +0 +0 +1 +1 +0 +0 +0 +0 +1 +1 +0 +1 +1 +1 +1 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +1 +1 +1 +1 +1 +1 +1 +0 +1 +1 +1 +1 +1 +1 +1 +0 +1 +1 +0 +0 +0 +0 +0 +0 +1 +1 +1 +1 +1 +1 +1 +0 +0 +1 +1 +1 +1 +1 +0 +0 +0 +1 +1 +1 +1 +1 +0 +0 +1 +1 +1 +1 +0 +0 +0 +0 +0 +0 +0 +1 +1 +1 +1 +0 +0 +1 +1 +1 +1 +1 +1 +0 +0 +1 +1 +0 +0 +1 +1 +0 +0 +0 +0 +1 +1 +0 +1 +1 +0 +1 +1 +0 +1 +1 +0 +0 +1 +1 +1 +1 +1 +1 +1 +0 +0 +1 +1 +1 +1 +1 +1 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +0 +1 +1 +0 +1 +1 +0 +0 +0 +1 +1 +1 +1 +1 +0 +0 +0 +0 +1 +1 +1 +0 +0 +0 +1 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +1 +0 +0 +0 +1 +1 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +0 +1 +1 +0 +0 +1 +1 +1 +0 +0 +0 +1 +1 +1 +1 +1 +1 +1 +0 +0 +0 +1 +1 +1 +1 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +1 +1 +1 +1 +1 +1 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +1 +1 +1 +1 +1 +1 +1 +0 +0 +0 +1 +0 +1 +0 +0 +0 +1 +1 +1 +1 +1 +1 +1 +0 +0 +0 +1 +1 +1 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +1 +1 +0 +0 +1 +1 +0 +0 +0 +0 +1 +1 +0 +1 +1 +0 +0 +0 +0 +1 +1 +0 +0 +1 +1 +1 +1 +1 +1 +1 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +1 +1 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +1 +1 +1 +1 +1 +0 +0 +0 +0 +1 +0 +0 +0 +0 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +1 +1 +0 +0 +0 +0 +1 +1 +0 +1 +1 +1 +1 +0 +0 +0 +1 +1 +0 +1 +1 +1 +1 +1 +1 +1 +0 +0 +1 +1 +1 +1 +1 +1 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +1 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +1 +1 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +1 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +1 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +1 +1 +0 +0 +0 +1 +1 +0 +0 +1 +1 +0 +0 +1 +1 +0 +1 +1 +0 +0 +1 +1 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +0 +1 +1 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +1 +1 +0 +0 +0 +0 +1 +0 +0 +1 +0 +0 +0 +1 +1 +0 +1 +1 +0 +0 +1 +1 +0 +0 +0 +0 +1 +0 +1 +1 +0 +0 +0 +0 +1 +0 +0 +1 +1 +0 +1 +1 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +1 +1 +1 +1 +1 +0 +1 +1 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +1 +1 +0 +0 +0 +1 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +1 +1 +0 +0 +1 +1 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +0 +1 +1 +0 +0 +0 +1 +1 +1 +1 +1 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +1 +1 +1 +0 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +1 +1 +1 +1 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +0 +1 +1 +0 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +1 +1 +0 +0 +0 +1 +1 +0 +1 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +1 +1 +1 +1 +1 +1 +1 +1 +0 +1 +1 +1 +1 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +1 +1 +1 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +0 +1 +1 +0 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +1 +1 +0 +0 +0 +0 +1 +1 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +1 +1 +1 +1 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +1 +1 +1 +1 +1 +0 +1 +0 +0 +0 +0 +1 +1 +0 +0 +1 +1 +0 +0 +0 +0 +0 +1 +1 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +1 +1 +0 +0 +1 +1 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +0 +1 +1 +0 +0 +1 +1 +0 +0 +0 +1 +1 +0 +1 +1 +0 +0 +0 +1 +1 +0 +1 +1 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +0 +1 +1 +0 +0 +0 +1 +1 +1 +1 +1 +0 +0 +1 +0 +0 +0 +0 +1 +1 +0 +0 +1 +1 +1 +0 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +1 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +1 +1 +1 +1 +1 +0 +0 +0 +1 +1 +1 +1 +1 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +1 +1 +1 +1 +1 +1 +1 +0 +0 +0 +1 +1 +1 +0 +0 +0 +1 +1 +1 +1 +1 +1 +1 +0 +0 +1 +1 +1 +1 +1 +0 +0 +0 +1 +1 +1 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +1 +1 +1 +0 +0 +0 +1 +1 +0 +1 +1 +0 +0 +0 +0 +1 +1 +1 +0 +0 +0 +1 +1 +0 +0 +0 +1 +1 +0 +1 +1 +0 +0 +0 +1 +1 +0 +0 +0 +0 +1 +1 +1 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +1 +1 +0 +1 +1 +0 +0 +0 +1 +1 +0 +1 +1 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +1 +1 +0 +1 +1 +0 +0 +0 +1 +1 +0 +0 +1 +1 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +1 +1 +1 +1 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +0 +1 +1 +0 +0 +0 +1 +1 +0 +1 +1 +0 +0 +0 +1 +1 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +1 +1 +0 +0 +0 +1 +1 +0 +1 +1 +0 +0 +0 +1 +1 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +1 +1 +0 +1 +1 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +0 +1 +1 +0 +0 +0 +1 +1 +0 +1 +1 +0 +0 +0 +1 +1 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +1 +1 +1 +1 +1 +1 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +1 +1 +0 +1 +0 +1 +1 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +1 +1 +1 +1 +0 +0 +1 +1 +0 +0 +1 +1 +0 +0 +1 +1 +1 +1 +1 +1 +0 +0 +1 +1 +1 +1 +1 +1 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +1 +1 +1 +1 +1 +0 +0 +0 +1 +1 +1 +1 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +1 +1 +0 +1 +0 +1 +1 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +0 +1 +1 +1 +1 +1 +1 +1 +0 +0 +0 +0 +0 +0 +1 +1 +0 +1 +1 +0 +0 +0 +1 +1 +0 +0 +0 +0 +1 +1 +0 +0 +0 +1 +1 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +1 +1 +0 +0 +0 +1 +1 +0 +0 +0 +1 +1 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +0 +1 +1 +0 +1 +1 +0 +0 +0 +1 +1 +0 +0 +0 +1 +1 +0 +0 +0 +0 +1 +1 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +1 +1 +1 +1 +1 +1 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +1 +1 +0 +0 +0 +1 +1 +0 +0 +0 +0 +1 +1 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +0 +1 +1 +0 +1 +1 +0 +0 +0 +1 +1 +0 +0 +0 +1 +1 +0 +0 +0 +0 +1 +1 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +0 +1 +1 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +1 +1 +0 +0 +0 +1 +1 +0 +1 +1 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +1 +1 +0 +0 +1 +1 +0 +0 +0 +1 +1 +0 +1 +1 +0 +0 +0 +1 +1 +0 +0 +0 +1 +1 +0 +0 +0 +0 +1 +1 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +1 +1 +1 +0 +0 +0 +0 +1 +1 +1 +1 +1 +1 +0 +1 +1 +1 +1 +1 +1 +1 +0 +0 +1 +1 +1 +1 +1 +0 +0 +0 +0 +0 +1 +1 +1 +1 +0 +0 +1 +1 +1 +1 +1 +0 +0 +0 +1 +1 +1 +1 +1 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +1 +1 +1 +1 +1 +0 +0 +0 +1 +1 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +0 +0 +0 +0 +1 +1 +1 +1 +1 +1 +0 +0 +0 +0 +1 +1 +1 +1 +0 +0 +1 +1 +1 +1 +1 +0 +0 +0 +1 +1 +1 +1 +1 +1 +1 +0 +1 +1 +1 +1 +1 +1 +1 +0 +0 +0 +1 +1 +1 +1 +0 +0 +1 +1 +0 +0 +0 +1 +1 +0 +0 +0 +1 +1 +1 +1 +0 +0 +0 +0 +0 +1 +1 +1 +1 +0 +1 +1 +1 +0 +0 +1 +1 +0 +1 +1 +1 +1 +0 +0 +0 +0 +1 +1 +0 +0 +0 +1 +1 +0 +1 +1 +0 +0 +0 +1 +1 +0 +0 +1 +1 +1 +1 +1 +0 +0 +0 +1 +1 +1 +1 +1 +0 +0 +0 +0 +1 +1 +1 +0 +0 +0 +0 +1 +1 +0 +0 +1 +1 +0 +0 +1 +1 +0 +0 +1 +1 +0 +0 +1 +1 +0 +1 +1 +0 +0 +0 +1 +1 +0 +0 +1 +1 +0 +0 +1 +1 +0 +0 +1 +1 +0 +0 +1 +1 +0 +0 +1 +1 +0 +1 +1 +0 +0 +0 +1 +1 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +1 +1 +0 +0 +1 +1 +0 +0 +1 +1 +0 +0 +0 +0 +0 +1 +1 +1 +0 +1 +1 +1 +0 +1 +1 +1 +0 +0 +1 +1 +0 +1 +1 +0 +0 +0 +1 +1 +0 +1 +1 +0 +0 +0 +1 +1 +0 +0 +1 +1 +0 +1 +1 +0 +0 +0 +1 +1 +0 +0 +1 +1 +0 +1 +1 +0 +0 +0 +0 +1 +0 +0 +1 +1 +0 +0 +1 +1 +0 +0 +1 +1 +0 +0 +0 +1 +0 +0 +1 +1 +0 +0 +0 +1 +0 +1 +1 +0 +0 +0 +0 +1 +0 +1 +1 +0 +0 +0 +1 +1 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +1 +1 +0 +0 +1 +1 +0 +0 +1 +1 +0 +0 +0 +0 +0 +1 +1 +1 +1 +1 +1 +1 +0 +1 +1 +1 +1 +0 +1 +1 +0 +1 +1 +0 +0 +0 +1 +1 +0 +1 +1 +0 +0 +0 +1 +1 +0 +1 +1 +0 +0 +0 +1 +1 +0 +0 +1 +1 +0 +0 +1 +1 +0 +1 +1 +0 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +1 +1 +0 +0 +1 +1 +0 +1 +0 +0 +0 +0 +1 +1 +0 +1 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +1 +1 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +1 +1 +0 +1 +1 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +1 +1 +1 +1 +1 +1 +1 +0 +1 +1 +1 +1 +1 +1 +1 +0 +1 +1 +0 +0 +0 +1 +1 +0 +1 +1 +0 +1 +1 +1 +1 +0 +1 +1 +0 +0 +0 +1 +1 +0 +0 +1 +1 +1 +1 +1 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +1 +1 +0 +0 +1 +1 +1 +1 +0 +0 +0 +0 +1 +1 +1 +1 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +1 +1 +1 +1 +1 +1 +1 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +1 +1 +1 +1 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +1 +1 +0 +1 +0 +1 +1 +0 +1 +1 +0 +1 +1 +1 +1 +0 +1 +1 +0 +0 +0 +1 +1 +0 +1 +1 +0 +1 +1 +1 +1 +0 +1 +1 +1 +1 +1 +1 +1 +0 +0 +1 +1 +0 +0 +1 +1 +0 +1 +1 +0 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +1 +1 +0 +0 +1 +1 +0 +1 +0 +0 +0 +0 +1 +1 +0 +1 +0 +0 +0 +1 +1 +0 +1 +1 +1 +1 +0 +1 +1 +0 +0 +0 +1 +1 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +1 +1 +1 +1 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +1 +1 +0 +1 +1 +0 +0 +1 +1 +1 +0 +1 +1 +0 +0 +0 +1 +1 +0 +1 +1 +0 +1 +1 +1 +1 +0 +1 +1 +0 +0 +0 +1 +1 +0 +0 +1 +1 +0 +0 +1 +1 +0 +1 +1 +0 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +1 +1 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +1 +1 +0 +1 +1 +0 +0 +0 +1 +1 +0 +0 +0 +0 +1 +1 +0 +0 +0 +1 +1 +0 +0 +1 +1 +0 +0 +0 +1 +1 +0 +1 +1 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +1 +1 +0 +1 +1 +0 +0 +0 +1 +1 +0 +1 +1 +0 +0 +0 +1 +1 +0 +1 +1 +0 +1 +1 +1 +0 +0 +1 +1 +0 +0 +0 +1 +1 +0 +0 +1 +1 +0 +0 +1 +1 +0 +1 +1 +0 +0 +0 +0 +1 +0 +0 +1 +1 +0 +0 +1 +1 +0 +0 +1 +1 +0 +0 +0 +1 +0 +0 +1 +1 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +1 +1 +0 +1 +1 +0 +0 +0 +1 +1 +0 +0 +0 +0 +1 +1 +0 +0 +0 +1 +1 +0 +0 +1 +1 +0 +0 +0 +1 +1 +0 +0 +1 +1 +0 +0 +1 +1 +0 +0 +0 +1 +0 +1 +1 +0 +0 +0 +1 +1 +0 +1 +1 +0 +0 +0 +1 +1 +0 +1 +1 +0 +0 +0 +1 +1 +0 +1 +1 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +1 +1 +0 +0 +1 +1 +0 +0 +1 +1 +0 +0 +1 +1 +0 +0 +1 +1 +0 +0 +1 +1 +0 +1 +1 +0 +0 +0 +1 +1 +0 +0 +1 +1 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +1 +1 +0 +1 +1 +0 +0 +0 +1 +1 +0 +0 +0 +0 +1 +1 +0 +0 +0 +1 +1 +0 +0 +1 +1 +0 +0 +0 +1 +1 +0 +0 +1 +1 +0 +0 +1 +1 +0 +0 +1 +1 +0 +1 +1 +0 +0 +0 +1 +1 +0 +1 +1 +0 +0 +0 +1 +1 +0 +1 +1 +0 +0 +0 +1 +1 +0 +0 +1 +1 +1 +1 +1 +0 +0 +1 +1 +0 +0 +0 +1 +1 +0 +1 +1 +1 +1 +1 +1 +0 +0 +0 +0 +1 +1 +1 +1 +0 +0 +1 +1 +1 +1 +1 +0 +0 +0 +1 +1 +1 +1 +1 +1 +1 +0 +1 +1 +1 +1 +0 +0 +0 +0 +0 +0 +1 +1 +1 +0 +1 +0 +1 +1 +0 +0 +0 +1 +1 +0 +0 +0 +1 +1 +1 +1 +0 +0 +0 +1 +1 +1 +1 +0 +0 +0 +1 +1 +1 +0 +0 +1 +1 +0 +1 +1 +1 +1 +1 +1 +1 +0 +1 +1 +0 +0 +0 +1 +1 +0 +1 +1 +0 +0 +0 +1 +1 +0 +0 +1 +1 +1 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +1 +1 +1 +1 +0 +0 +0 +1 +1 +1 +1 +1 +0 +0 +1 +1 +1 +1 +1 +1 +0 +0 +0 +1 +1 +1 +1 +1 +0 +0 +0 +1 +1 +1 +1 +1 +1 +0 +1 +1 +0 +0 +0 +1 +1 +0 +1 +1 +0 +0 +0 +1 +1 +0 +1 +1 +0 +0 +0 +1 +1 +0 +1 +1 +0 +0 +0 +1 +1 +0 +0 +1 +1 +0 +0 +1 +1 +0 +1 +1 +1 +1 +1 +1 +1 +0 +0 +0 +1 +1 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +1 +1 +0 +0 +0 +1 +1 +0 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +1 +1 +0 +1 +1 +0 +0 +0 +1 +1 +0 +0 +1 +1 +0 +0 +1 +1 +0 +1 +1 +0 +0 +0 +1 +1 +0 +0 +1 +1 +1 +1 +1 +1 +0 +1 +1 +0 +0 +0 +1 +1 +0 +1 +1 +0 +0 +0 +1 +1 +0 +1 +1 +0 +0 +0 +1 +1 +0 +1 +1 +0 +0 +0 +1 +1 +0 +0 +1 +1 +0 +0 +1 +1 +0 +1 +1 +0 +0 +0 +1 +1 +0 +0 +0 +1 +1 +0 +0 +0 +0 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +1 +1 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +1 +1 +0 +1 +1 +0 +0 +0 +1 +1 +0 +0 +1 +1 +0 +0 +1 +1 +0 +1 +1 +0 +0 +0 +1 +1 +0 +0 +1 +0 +1 +1 +0 +1 +0 +1 +1 +0 +0 +0 +1 +1 +0 +1 +1 +0 +0 +0 +1 +1 +0 +1 +1 +0 +0 +0 +1 +1 +0 +0 +1 +1 +0 +1 +1 +0 +0 +0 +1 +1 +0 +0 +1 +1 +0 +1 +0 +0 +0 +0 +1 +1 +0 +0 +0 +1 +1 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +1 +1 +0 +1 +1 +0 +0 +0 +1 +1 +0 +0 +1 +1 +0 +0 +1 +1 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +1 +1 +0 +0 +0 +1 +1 +0 +1 +1 +0 +0 +0 +1 +1 +0 +1 +1 +0 +0 +0 +1 +1 +0 +0 +1 +1 +1 +1 +1 +0 +0 +0 +1 +1 +0 +0 +1 +1 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +1 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +1 +1 +1 +0 +0 +1 +1 +0 +0 +0 +1 +1 +0 +0 +1 +1 +1 +1 +1 +0 +0 +0 +0 +1 +1 +1 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +1 +1 +0 +0 +0 +1 +1 +0 +1 +1 +0 +0 +0 +1 +1 +0 +1 +1 +0 +1 +0 +1 +1 +0 +0 +0 +1 +1 +1 +0 +0 +0 +0 +0 +1 +1 +1 +1 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +1 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +1 +1 +0 +0 +1 +1 +0 +1 +1 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +1 +1 +0 +0 +0 +1 +1 +0 +1 +1 +0 +0 +0 +1 +1 +0 +1 +1 +0 +1 +0 +1 +1 +0 +0 +0 +1 +1 +1 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +1 +1 +1 +0 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +1 +1 +0 +0 +1 +1 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +1 +1 +0 +0 +0 +1 +1 +0 +0 +0 +1 +1 +0 +1 +1 +0 +0 +0 +1 +1 +0 +1 +1 +0 +1 +0 +1 +1 +0 +0 +1 +1 +1 +1 +1 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +0 +1 +1 +1 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +1 +1 +0 +1 +0 +1 +1 +0 +0 +1 +1 +0 +0 +1 +1 +0 +1 +1 +0 +0 +0 +1 +1 +0 +0 +0 +0 +1 +1 +0 +0 +0 +1 +1 +0 +0 +0 +1 +1 +0 +0 +1 +1 +0 +1 +1 +0 +0 +1 +1 +1 +1 +1 +1 +1 +0 +0 +1 +1 +0 +1 +1 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +1 +1 +0 +0 +0 +0 +1 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +1 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +1 +1 +0 +1 +1 +1 +1 +0 +0 +1 +1 +0 +0 +1 +1 +0 +1 +1 +0 +0 +0 +1 +1 +0 +0 +0 +0 +1 +1 +0 +0 +0 +1 +1 +0 +0 +0 +1 +1 +0 +0 +0 +1 +1 +1 +0 +0 +0 +1 +1 +1 +0 +1 +1 +1 +0 +1 +1 +0 +0 +0 +1 +1 +0 +0 +0 +0 +1 +1 +0 +0 +0 +1 +1 +0 +0 +0 +1 +1 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +1 +1 +0 +0 +0 +0 +0 +1 +1 +1 +1 +1 +0 +0 +1 +1 +1 +0 +0 +1 +1 +0 +0 +1 +1 +1 +1 +1 +0 +0 +0 +0 +1 +1 +1 +1 +0 +0 +0 +1 +1 +1 +1 +1 +0 +0 +0 +0 +0 +1 +0 +0 +0 +0 +0 +1 +1 +0 +1 +1 +0 +0 +1 +1 +0 +0 +0 +1 +1 +0 +0 +0 +1 +1 +1 +1 +0 +0 +1 +1 +1 +1 +1 +1 +1 +0 +0 +0 +1 +1 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +1 +0 +0 +0 +1 +1 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +1 +1 +1 +1 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +0 +1 +1 +1 +0 +0 +0 +0 +0 +0 +0 +1 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +0 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +1 +1 +0 +0 +0 +0 +1 +1 +1 +1 +0 +0 +0 +0 +1 +1 +1 +1 +1 +0 +0 +0 +0 +1 +1 +1 +1 +0 +0 +0 +1 +1 +1 +1 +1 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +1 +1 +1 +0 +1 +1 +0 +0 +1 +1 +0 +1 +1 +0 +0 +0 +0 +1 +1 +1 +0 +0 +0 +0 +0 +0 +0 +1 +1 +1 +0 +0 +1 +1 +0 +0 +1 +1 +0 +0 +0 +0 +1 +1 +0 +0 +0 +1 +1 +1 +0 +1 +1 +0 +0 +1 +1 +0 +1 +1 +1 +0 +0 +0 +1 +1 +1 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +1 +1 +0 +1 +1 +0 +0 +1 +1 +0 +0 +0 +1 +1 +0 +0 +1 +1 +0 +1 +1 +0 +0 +1 +1 +0 +0 +0 +1 +1 +0 +1 +1 +1 +1 +0 +0 +0 +0 +1 +1 +0 +0 +1 +1 +0 +0 +0 +1 +1 +1 +0 +1 +1 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +1 +1 +0 +1 +1 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +1 +1 +1 +1 +1 +1 +1 +0 +0 +1 +1 +0 +0 +1 +1 +0 +1 +1 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +1 +1 +1 +0 +0 +0 +1 +1 +0 +0 +1 +1 +0 +1 +1 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +1 +1 +0 +0 +1 +1 +1 +1 +1 +1 +1 +0 +0 +1 +1 +0 +0 +0 +0 +0 +1 +1 +0 +0 +1 +1 +0 +0 +0 +1 +1 +0 +0 +1 +1 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +1 +1 +1 +1 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +1 +1 +0 +1 +0 +1 +1 +0 +0 +1 +1 +0 +0 +1 +1 +0 +1 +1 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +1 +1 +0 +0 +0 +1 +1 +0 +0 +1 +1 +0 +1 +1 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +1 +1 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +1 +1 +0 +0 +1 +1 +0 +0 +0 +1 +1 +0 +0 +1 +1 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +1 +1 +1 +1 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +1 +1 +0 +1 +0 +1 +1 +0 +0 +1 +1 +0 +0 +1 +1 +0 +1 +1 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +1 +1 +0 +0 +0 +1 +1 +0 +0 +1 +1 +0 +1 +1 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +1 +1 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +1 +1 +0 +0 +1 +1 +0 +0 +0 +1 +1 +0 +0 +1 +1 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +1 +1 +0 +1 +1 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +1 +1 +0 +1 +0 +1 +1 +0 +0 +1 +1 +0 +0 +1 +1 +0 +1 +1 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +1 +1 +0 +0 +0 +1 +1 +0 +0 +1 +1 +0 +1 +1 +0 +0 +0 +1 +1 +0 +1 +1 +0 +0 +1 +1 +0 +0 +1 +1 +0 +0 +0 +1 +1 +0 +0 +1 +1 +0 +0 +0 +0 +0 +1 +1 +0 +0 +1 +1 +0 +0 +0 +1 +1 +0 +0 +1 +1 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +1 +1 +0 +0 +1 +1 +0 +0 +0 +0 +1 +1 +0 +0 +0 +1 +1 +0 +1 +0 +1 +1 +0 +0 +1 +1 +0 +0 +1 +1 +0 +1 +1 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +1 +0 +1 +1 +0 +0 +1 +1 +1 +1 +1 +0 +0 +0 +1 +1 +1 +1 +1 +0 +0 +0 +1 +1 +1 +0 +1 +1 +0 +0 +1 +1 +1 +1 +1 +0 +0 +1 +1 +1 +1 +0 +0 +0 +0 +0 +1 +1 +1 +1 +1 +0 +0 +1 +1 +1 +0 +0 +1 +1 +0 +0 +0 +1 +1 +1 +1 +0 +0 +0 +0 +0 +0 +0 +1 +1 +0 +1 +1 +1 +0 +0 +1 +1 +0 +0 +0 +1 +1 +1 +1 +0 +0 +1 +1 +0 +0 +0 +1 +1 +0 +0 +1 +1 +0 +0 +1 +1 +0 +0 +1 +1 +1 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +1 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +1 +1 +1 +0 +0 +0 +0 +0 +1 +1 +1 +0 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +1 +1 +0 +1 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +0 +0 +0 +0 +1 +1 +0 +1 +1 +1 +0 +0 +0 +1 +1 +1 +0 +1 +1 +0 +1 +1 +0 +1 +1 +1 +0 +0 +0 +1 +1 +1 +1 +1 +0 +0 +1 +1 +1 +1 +1 +1 +0 +0 +1 +1 +0 +0 +1 +1 +0 +0 +0 +1 +1 +0 +0 +1 +1 +0 +1 +1 +0 +0 +0 +1 +1 +0 +1 +1 +0 +0 +0 +1 +1 +0 +1 +1 +0 +0 +0 +1 +1 +0 +1 +1 +1 +1 +1 +1 +1 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +1 +0 +0 +0 +0 +1 +1 +0 +0 +1 +1 +0 +1 +1 +0 +0 +1 +1 +0 +0 +0 +1 +1 +1 +0 +1 +1 +0 +1 +1 +0 +0 +0 +1 +1 +0 +0 +0 +1 +1 +0 +0 +0 +0 +1 +1 +0 +0 +1 +1 +0 +0 +0 +1 +1 +0 +0 +1 +1 +0 +1 +1 +0 +0 +0 +1 +1 +0 +0 +1 +1 +0 +1 +1 +0 +0 +1 +1 +0 +0 +0 +1 +1 +0 +1 +1 +0 +0 +1 +1 +0 +0 +0 +1 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +0 +1 +1 +0 +0 +0 +1 +1 +0 +0 +1 +1 +0 +1 +1 +0 +0 +1 +1 +0 +0 +0 +1 +1 +0 +0 +1 +1 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +1 +1 +0 +0 +1 +1 +0 +0 +0 +1 +1 +0 +0 +1 +1 +0 +1 +1 +0 +1 +0 +1 +1 +0 +0 +0 +1 +1 +1 +0 +0 +0 +1 +1 +0 +0 +0 +1 +1 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +1 +1 +0 +0 +1 +1 +0 +0 +1 +1 +0 +1 +1 +0 +0 +1 +1 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +0 +1 +1 +1 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +1 +1 +0 +0 +1 +1 +0 +0 +0 +1 +1 +0 +0 +1 +1 +0 +1 +1 +0 +1 +0 +1 +1 +0 +0 +0 +1 +1 +1 +0 +0 +0 +1 +1 +0 +0 +0 +1 +1 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +1 +1 +0 +0 +1 +1 +0 +0 +1 +1 +0 +1 +1 +0 +0 +1 +1 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +1 +1 +0 +0 +1 +1 +0 +0 +0 +1 +1 +0 +0 +1 +1 +0 +1 +1 +0 +1 +0 +1 +1 +0 +0 +0 +1 +1 +1 +0 +0 +0 +1 +1 +0 +0 +0 +1 +1 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +1 +1 +0 +0 +1 +1 +0 +0 +1 +1 +0 +1 +1 +0 +0 +1 +1 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +1 +1 +0 +0 +0 +1 +1 +0 +1 +1 +0 +1 +1 +0 +0 +1 +1 +0 +0 +0 +0 +1 +1 +1 +1 +0 +0 +1 +1 +1 +1 +1 +1 +1 +0 +0 +1 +1 +0 +1 +1 +0 +0 +1 +1 +0 +0 +0 +1 +1 +0 +1 +1 +0 +0 +0 +1 +1 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +1 +1 +1 +1 +1 +0 +0 +1 +1 +1 +1 +1 +0 +0 +0 +1 +1 +1 +1 +1 +0 +0 +1 +1 +1 +1 +0 +0 +0 +0 +0 +1 +1 +1 +1 +1 +0 +0 +0 +0 +0 +1 +1 +1 +0 +0 +0 +1 +1 +1 +0 +1 +1 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +1 +1 +0 +1 +1 +0 +0 +1 +1 +0 +0 +0 +1 +1 +0 +0 +1 +1 +1 +1 +1 +1 +0 +1 +1 +1 +1 +1 +1 +1 +0 +0 +0 +0 +0 +1 +1 +1 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +1 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +1 +1 +0 +0 +0 +0 +0 +0 +0 +1 +1 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +1 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 diff --git a/ipcore_dir/char_rom_memory.ncf b/ipcore_dir/char_rom_memory.ncf new file mode 100644 index 0000000..e69de29 diff --git a/ipcore_dir/char_rom_memory.ngc b/ipcore_dir/char_rom_memory.ngc new file mode 100644 index 0000000..28d5e26 --- /dev/null +++ b/ipcore_dir/char_rom_memory.ngc @@ -0,0 +1,3 @@ +XILINX-XDB 0.1 STUB 0.1 ASCII +XILINX-XDM V1.6e +$g1x57=#Zl|bdaa:!3-607',81;8=5?0123456789:;<=>?0123456789:;<=>?0123456789:;<=>?0123456789:;<=>;0:23456789:;<=>?0123456789:;<=>?0123456789:;<=>?0123455B89:;<=>?0163?56789:;<=>?0123456789:;<=>?0123456789:;<=>?00D3456789:;<=>?06:3B16<89:;<=>?0123456789:;<=>?0123456789:;<=>?011@45679L:;<=>?01234567<91;<=>?0123456789:;<=>?0123456789I;<=>?0123456789:;<=>?0123456789I?<6>?0123456789:;<=>?01235=6789:;<=>?01234F6789:;<=>?01235=6789:;<=:?;123456789:;<=>?012346C789:;<9>?1123456789:;<=>?0123456789:;<=>?0528456789:;<=>?01234F6789;3<=890123456789:;<=>?0123456789;3<=>?012305=789:;<=>?0122<4>7K:<;<;=<6740G56789:;<=>?0123G667K8I;<>K?0742<56382:;<=>?0123457?91=N;K8?0123455D91;3;K=?D9455=078:>;7=>?012345678828O>M?014GF304K>:;;=>?01234567882:4<6?071EA3060?:;?9>40123456789:;?=>?0123456789:;?=>90123456789:;:=>?0123456789:;?=>94193456789:;<;8?0120756789:;<=>?0123456789:;<;8?0120456789:;<=>?01274>6789:;<=>?FG23BC6789:;<=>?0123456789:;<=>?FG23BC6789:;<=>?0123452739:;<=>?012EB56AN9:;<=>?0123456789:;?=>?012EB56AN9:;<=>?012345678=:0<=>?013;430791:=<==90113456189:;<=>?013@420791:<<=?L011;456089;38=5?0123A4>08>L4M9L8I>K8F122<4>60?9=?>88F2A073E1;9<8?;8;0:2345578>:H?=893D40260491:=:;8<672345578::H:<8937402604=H<8:;8<6763?5678:::O=M?C0:2G3D1;?9:4>><671325678::;I=M>82A2G3D1;?9:4?762452G6189:;?==70B255=5B>K<8:>?761452661<91;<=><0723G3560?9<;?19235=7?91<;:>>L624375078:;3:>?7315F4F6789<;:>>L624375078?;3:>:?;122G56789:;<=>?0123456789:;<=>?0123<56789:;<=>?0123456789:;<=>?0528455E91;3=5>?0123456789:H<=>?0123450B8L;3;=>?0123456789:3<=>?012305=78?98<=??C7152351;?9=?:K9374573078:<8O=>?1923456D;9:;:H8>3D15457?89:8=5>?1923457?91:;?>8<6215457?89>;7=8?0122<4>1>::;O=><314552@789:;<=M?012344>4K::;O=><31A54607882;<<:4158JJUSS2HNO^L2>3;2=51=6<3CE\XZ5AEFQF974294:86?;:HLSQQ78>L;<:KIF223G564J82=<>8?00:3466789:;<<68?00:3416<91:=<=8?0B235@5B8J9N?H973D5E3@7D91:H<==?193;75048J<8:>=?62405=51<91:4;>?014345618?9:4;=906D545E60?H:4>>?01A34560M:O8<>H60?H?<6?766245=7BNO:;JK>?3B1@456??L=N<=?7E62E5=54K:9HJK>?193;4=7DNO2:<=:?;0:@2FE1>>:MJ=>IF122<4>789:MJ5??012EACE4K>2MJ=>IF123456789:3>58692;1CXZ_UU8GKD:7294:=6?5OTVSQQ3:39KPRW]]0ocxzn<183:16<9J:;=5?7195E2604>:<=?>=I3D1A2@5E81:;=5?71923456789:;<=>L01234567<91:O:H>46D3G4>0M828O:H>CE:346E089=:O>K<611326660828?02207307;9;3:>8<0B23757?91<8:>8?02207F07>9;N:>:?;2G0F6160?<<<?6121256489:;:=>?05287@5B?O:8;K9I193;5=67>:N3:;?77B3E7@7D;?:8<;=?193;5=67>:NN:;?77G5E05=4M?9=?:H970G0G352K9L9<=:>8967457553829N:;8<3B44255D>>9N?98<;8<3240235489n0?~??0das564*==:0:=>?01235=01;9:H<=?L62203C67;J:;8=>?01234567;9:H<;=942607343;J:;8=593122<4>609<=?609I=?8<374023548J<8:H=<6763?357>9:=<=>?07157357>9984;=930A026C789:;<=>?02G0A2@6K>L8<>K:<8:>:967105=04>::=8;894245265E>:<8:>>937105=04>::=<;890245261E<91=?;89B0:2A3660?<8?=88F2137304M9:=?;88F0:023660?O8?=H93245760489:?<68<674A5=51>9;3:;=<07207664>?98<=8<674A5=7B>9;3:;=<07207664>?98<=:?;7153217>?<8<<6937452304>?<=:M932A4B2@6N:I8J=6?05282614>::==H=?19403G719?<=<>897G5A261E>K:==H=?195E467B9L<=<>=J625A05=1;>L?0123457??L=N<=?LDC453@1?8O20MIJ]A=2==>GCL[K7==06;@FGVD:69730MIJ]A=31:g=FLMXJ0<=50?;8EABUI5;8255NDEPB848?3HNO^L2=>99B@ATF4:437LJKR@>7:==FLMXJ0807;@FGVD:1611JHI\N<6<;?DBCZH63255NDEPB8<8?3HNO^O2?>89B@ATE48:556OKDS@?548>3HNO^O2>2?`8EABUJ5;86=06;@FGVG:6;720MIJ]B=3=<>GCL[H7>364AEFQF95902KOH_L34?:8EABUJ5?546OKDS@?2;>GKD11IY^QFNGM26>EOMJAT@DMJNRG\P\VB<2IGGL:4CMIA=>EHEDC_XHJ>4:ALV@Y@MGOYMYG@N^KMBJ1?>HO>=LFG233@5D9J=MJK6>013;B@@D>??3JK>?FG237F5D819=HOO:0163?ADB>9O=6974F34>6082:O>KIF93346ED>9I:4>=MD50@76E0ML=8I:HJ78;34==CAH6;6=09;EKB858?3MCI0=4?>79GMG:7611OCL2?:1<5?AIF49437IAM<183:3=CGK6;29>4E6A54F5D;:HO8?M<3BDEA21A?OI8NI>?3BA54F019L32:;K819DEA25B?OLM4<>?3:GME6=BFK>;7KH?0123456789:;<=>?012345678>:;<=>?0123456789:;<=>?012345678::;<<5H3:EM@2=NF@^T<=94IOKW[5703@DBXR>=7:KMMQY7;>1BBDZP0558MKOSW9?<7D@FT^253>OIA]U;;:5FNHV\4=11BBDZP1558MKOSW8?<7D@FT^353>OIA]U:;:5FNHV\5=1B69JJLRX9J=0ECG[_0F4?LHN\V;N;6GAIU]2B2=NF@^T>=94IOKW[7703@DBXR<=7:KMMQY5;>1BBDZP2558MKOSW;?<7D@FT^053>OIA]U9;:5FNHV\6=11BBDZP3558MKOSW:?<7D@FT^153>OIA]U8;:5FNHV\7=178;HLJPZ5F?2CEEYQKnffx]i}foo08J545\IL]@KIJN[@EESNFJCJ48WJSUKL=0__XNL^C4?VTQIEUI86]\R@68WVTE<2^R\H8j;T2,|vrXjeaTahcPgdlfvdrhz&memygyecod*kgsaoTnaePmdo\c`h(~hfbh#m|ts-qehjhgyQ;Q#|nm/p,w6Ynf`~%~lc dqpbi+bw9q;%~lcl;TQFVZPN[@HGI>5YCB;8RLCPW]S[I>5XE@18S@De3^XBXHQIISQWg>QUA]OTABJJ_@a8SWOSMVGDHHQM1e9[MIOIP$RON->!1!QWQG&7&8*J_NGF6:ZPPIOE?2RXXRIAD69[WQYQKJh0TRM@RD]JJCI13QniSDji;Yfk[Utne_oydaa119[`hYJiceyZh||inl24>^ceVGbbb|Yesqjkk53:<=flmxj0<>19:cg`wg;98427ljkr`>26;d720mij}a=5=<>gcl{k74364aefqe9?9:j1i`fQbel]dakYq>V;',Ugcioz#GJTB(Noeio{os"27+7a3jbj~R|`m^ofijt~:h1hdl|Prno\i`khzp&i`fQbel]dakYq>V;'BB@J,OMMA1d03jbj~R|`m^ofijt~$kf`S`kb_fgm[s0X9%qhSljkr`]tmaro58>'oRokds`\slbs`4;? nQnlfmqmqnj58&hSlvf_hf\slbs`4>'oRowi^qoescX|pzn1="l_`zj[qwm4;'oRlvtd]pmc:1%iTobcboo]`hn;7$jUoikozlu]geqg:8%iThd}nbmg\sdtiWkb}Snacl<2/gZbn{hhgiRynro]alsYuigmn1="l_dnbfjtf|`eeSig}=.jli`)ahnq#}|`g.dscd)h{jcg`b}loqg,muehzlUoe!{mq-\gb)($jUmm`gcy4)eX`hyTicl20-a\lduXag`noyk}r<2/gZnf{VgnaRaztqww[wc`{Vk6#c^kmp`taijoTxt~j=1.`[iiflVceeyQiimg>5)eXelgTxt~j=2.`[hsWyc{iagae^qwebct59&hS}|fm^vzt`;6$jUyiljPddrwlZg:9?938!mPrdcg[acw|aUi1<8<85.`[wcflV}bhyfPa<3/gZtbimU|eizg_c?2(fYu{}U{~da}iu{\e8EB$jUyyQrhmqmqXj4IN nQ}su]w}uc:[PDH nQ}supbiZg:8%iT~~z}al]a95*dWzcfSnaclhqjkkYd`li`1LBC,b]vw`Yeq}oT{ho20-a\qvcXjp~nSzkm=1.`[pubWmommxb{_ecwe86+kVxiRklc<2/gZstmVydjyklc<2/gZqbiV}bhyf21-a\s`dX`nd0?#c^uqmqcXllzdRo2171;0)eX{ciRjjpuj\f871;1>'oRy}iug\ijbbWh7\^DZJ_GKQWQ*dW~xbxhQboeg\f8QUA]OTJD\\T-a\swosmV}bhyfPa<3/gZqua}oT{dj{h^`>5)eXpmo}enkialko}8uwi{~jb>kr4:aoodg50?:8`jssi5:546`hccwjha{GHy1<6sZ<96il5bb8277bdk9095olj{of:>4=ilh0=7)j8:e08yV072mh1nn4>33f`g5<51khm7^l::g094?74:mih<7<6bba8W36=n;0;6<==dba3>7?en11oin4?:082V052mh1nn4>33f`g5<51khn7{Zl3;295?7=9;qX:?4kb;``>455lji;6?7mbd9'gf2\o47se03:0q)lj:238f`e=83;;6>4>2zJ`e>"d03oh7W;l:3y1=?7a2t.o:7km;%7g>`b<,?;1ih5feg83>>ia93:1(n>5f19mfc<732cn=7>5$b29a5=ijo0;76gkf;29 f6=m91enk4>;:kga?6=,j:1i=5abg81?>ocl3:1(n>5e19mfc<432cnm7>5$b29a5=ijo0?76gj9;29 f6=m91enk4:;:kfob?3:1(n>5e19mfc<032cn:7>5$b29a5=ijo0376gj5;29 f6=m91enk46;:kf0?6=,j:1i=5abg8b?>ob;3:1(n>5e19mfc7>5$b29a5=ijo0h76gkc;29 f6=m91enk4k;:`g0?6=93:1:188ygb2290:6=4?{%a;>fd<@m90Dno4ocf94?=zjj31<7<7:183!e?2j;0Di=4Hbc8^0e=>r;o6:bd8 f2=92.0(:65229'3<<682."0k3i0(:j53b9'3`<5m2.g=#08087)6=:39'<6<>3-2?6l5+84806>"?>38;7)68:0a8 =>=9k1/4448;%:b>7=#0k097)6l:278 =b=:j1/4h4=2:&;b?703-3;6??4$8396>">:380(4=52:&:0?5>3-3>6>l4$8497d=#1>08:6*68;0e?!?>2;1/5l4=;%;a>4><,0i1=l5+9e827>">m3;?7)7i:078 d6=9?1/m<480:&b6?4<,h91:6*n4;32?!g22;n0(l85369'e2<402.j47=?;%c:>`=#ih0>7)om:39'ef<612.jh762<,hl1?>5+b1826>"e93n0(o<54:&`6?3e3-h86<5+b582?!b72jl0(n;51:k6a?6=3`?m6=44i7g94?=n>o0;66gl6;29?le02900enj50;9jg`<722c?>7>5$b2904=ijo0;76g;0;29 f6=<81enk4>;:k0b?6=,j:18<5abg81?>o4m3:1(n>5409mfc<432c?n7>5$b2904=ijo0?76g;a;29 f6=<81enk4:;:k7=?6=,j:18<5abg85?>o303:1(n>5409mfc<032c?;7>5$b2904=ijo0376g;6;29 f6=<81enk46;:k71?6=,j:18<5abg8b?>o3<3:1(n>5409mfc5$b2904=ijo0h76go3n3:1(n>5519mfc<632c?i7>5$b2915=ijo0976g;d;29 f6==91enk4<;:k6e?6=,j:19=5abg87?>o213:1(n>5519mfc<232c>47>5$b2915=ijo0=76g:7;29 f6==91enk48;:k62?6=,j:19=5abg8;?>o2=3:1(n>5519mfc<>32c>87>5$b2915=ijo0j76g:3;29 f6==91enk4m;:k66?6=,j:19=5abg8`?>o3k3:1(n>5519mfc5$b2920=ijo0;76g98;29 f6=>>1enk4?;:m5e?6=,j:1:45abg83?>i1k3:1(n>56c9mfc<732wxn44?:05x9a2=?816o44:f:?`=?0a34i26n84=b;9g2=:k00hh63l9;af?8e>2<;01n754g9>g<<3m27h57:k;0g<5j319452c886<>;d13?<70m6:4489f?==<16o44:4:?`=?3434i268<4=b;90f=:k00=:63l9;4;?xuei3:1>v3k5;`g?8e>2?o0q~jl:181[bd34i26>j4}rfg>5<5sWno70m6:2g8yvbb2909wSjj;6`2=:0q~k>:181[c634i269<4}rg1>5<5sWo970m6:518yvc42909wSk<;122=?0q~k::181[c234i26984}rg5>5<5sWo=70m6:558yvc02909wSk8;1>2=30q~k6:181[c>34i269o4}rgb>5<5sWoj70m6:5`8yvca2909wSki;0c2?k0qp`;8;295~Ndi2we844?:0yKgd=zf=k1<7?tHbc8yk2e290:wEmn;|l7g?6=9rBhm6sa4e83>4}Okh1vb9k50;3xLfgm6=4>{Iab?xh283:1=vFla:m14<728qCol5rn4094?7|@jk0qc;<:182Mef3td>87>51zJ`e>{i=<0;65<6sAij7p`:8;295~Ndi2we944?:0yKgd=zutwKLNu9c;;g0f?b:hwKLOu?}ABSxFG \ No newline at end of file diff --git a/ipcore_dir/char_rom_memory.vhd b/ipcore_dir/char_rom_memory.vhd new file mode 100644 index 0000000..e27c253 --- /dev/null +++ b/ipcore_dir/char_rom_memory.vhd @@ -0,0 +1,134 @@ +-------------------------------------------------------------------------------- +-- This file is owned and controlled by Xilinx and must be used -- +-- solely for design, simulation, implementation and creation of -- +-- design files limited to Xilinx devices or technologies. Use -- +-- with non-Xilinx devices or technologies is expressly prohibited -- +-- and immediately terminates your license. -- +-- -- +-- XILINX IS PROVIDING THIS DESIGN, CODE, OR INFORMATION "AS IS" -- +-- SOLELY FOR USE IN DEVELOPING PROGRAMS AND SOLUTIONS FOR -- +-- XILINX DEVICES. BY PROVIDING THIS DESIGN, CODE, OR INFORMATION -- +-- AS ONE POSSIBLE IMPLEMENTATION OF THIS FEATURE, APPLICATION -- +-- OR STANDARD, XILINX IS MAKING NO REPRESENTATION THAT THIS -- +-- IMPLEMENTATION IS FREE FROM ANY CLAIMS OF INFRINGEMENT, -- +-- AND YOU ARE RESPONSIBLE FOR OBTAINING ANY RIGHTS YOU MAY REQUIRE -- +-- FOR YOUR IMPLEMENTATION. XILINX EXPRESSLY DISCLAIMS ANY -- +-- WARRANTY WHATSOEVER WITH RESPECT TO THE ADEQUACY OF THE -- +-- IMPLEMENTATION, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OR -- +-- REPRESENTATIONS THAT THIS IMPLEMENTATION IS FREE FROM CLAIMS OF -- +-- INFRINGEMENT, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS -- +-- FOR A PARTICULAR PURPOSE. -- +-- -- +-- Xilinx products are not intended for use in life support -- +-- appliances, devices, or systems. Use in such applications are -- +-- expressly prohibited. -- +-- -- +-- (c) Copyright 1995-2011 Xilinx, Inc. -- +-- All rights reserved. -- +-------------------------------------------------------------------------------- +-- You must compile the wrapper file char_rom_memory.vhd when simulating +-- the core, char_rom_memory. When compiling the wrapper file, be sure to +-- reference the XilinxCoreLib VHDL simulation library. For detailed +-- instructions, please refer to the "CORE Generator Help". + +-- The synthesis directives "translate_off/translate_on" specified +-- below are supported by Xilinx, Mentor Graphics and Synplicity +-- synthesis tools. Ensure they are correct for your synthesis tool(s). + +LIBRARY ieee; +USE ieee.std_logic_1164.ALL; +-- synthesis translate_off +LIBRARY XilinxCoreLib; +-- synthesis translate_on +ENTITY char_rom_memory IS + PORT ( + clka : IN STD_LOGIC; + addra : IN STD_LOGIC_VECTOR(13 DOWNTO 0); + douta : OUT STD_LOGIC_VECTOR(0 DOWNTO 0) + ); +END char_rom_memory; + +ARCHITECTURE char_rom_memory_a OF char_rom_memory IS +-- synthesis translate_off +COMPONENT wrapped_char_rom_memory + PORT ( + clka : IN STD_LOGIC; + addra : IN STD_LOGIC_VECTOR(13 DOWNTO 0); + douta : OUT STD_LOGIC_VECTOR(0 DOWNTO 0) + ); +END COMPONENT; + +-- Configuration specification + FOR ALL : wrapped_char_rom_memory USE ENTITY XilinxCoreLib.blk_mem_gen_v6_1(behavioral) + GENERIC MAP ( + c_addra_width => 14, + c_addrb_width => 14, + c_algorithm => 1, + c_axi_id_width => 4, + c_axi_slave_type => 0, + c_axi_type => 1, + c_byte_size => 9, + c_common_clk => 0, + c_default_data => "0", + c_disable_warn_bhv_coll => 0, + c_disable_warn_bhv_range => 0, + c_family => "spartan3", + c_has_axi_id => 0, + c_has_ena => 0, + c_has_enb => 0, + c_has_injecterr => 0, + c_has_mem_output_regs_a => 0, + c_has_mem_output_regs_b => 0, + c_has_mux_output_regs_a => 0, + c_has_mux_output_regs_b => 0, + c_has_regcea => 0, + c_has_regceb => 0, + c_has_rsta => 0, + c_has_rstb => 0, + c_has_softecc_input_regs_a => 0, + c_has_softecc_output_regs_b => 0, + c_init_file_name => "char_rom_memory.mif", + c_inita_val => "0", + c_initb_val => "0", + c_interface_type => 0, + c_load_init_file => 1, + c_mem_type => 3, + c_mux_pipeline_stages => 0, + c_prim_type => 1, + c_read_depth_a => 16384, + c_read_depth_b => 16384, + c_read_width_a => 1, + c_read_width_b => 1, + c_rst_priority_a => "CE", + c_rst_priority_b => "CE", + c_rst_type => "SYNC", + c_rstram_a => 0, + c_rstram_b => 0, + c_sim_collision_check => "ALL", + c_use_byte_wea => 0, + c_use_byte_web => 0, + c_use_default_data => 0, + c_use_ecc => 0, + c_use_softecc => 0, + c_wea_width => 1, + c_web_width => 1, + c_write_depth_a => 16384, + c_write_depth_b => 16384, + c_write_mode_a => "WRITE_FIRST", + c_write_mode_b => "WRITE_FIRST", + c_write_width_a => 1, + c_write_width_b => 1, + c_xdevicefamily => "spartan3e" + ); +-- synthesis translate_on +BEGIN +-- synthesis translate_off +U0 : wrapped_char_rom_memory + PORT MAP ( + clka => clka, + addra => addra, + douta => douta + ); +-- synthesis translate_on + +END char_rom_memory_a; diff --git a/ipcore_dir/char_rom_memory.vho b/ipcore_dir/char_rom_memory.vho new file mode 100644 index 0000000..782da7a --- /dev/null +++ b/ipcore_dir/char_rom_memory.vho @@ -0,0 +1,64 @@ +-------------------------------------------------------------------------------- +-- This file is owned and controlled by Xilinx and must be used -- +-- solely for design, simulation, implementation and creation of -- +-- design files limited to Xilinx devices or technologies. Use -- +-- with non-Xilinx devices or technologies is expressly prohibited -- +-- and immediately terminates your license. -- +-- -- +-- XILINX IS PROVIDING THIS DESIGN, CODE, OR INFORMATION "AS IS" -- +-- SOLELY FOR USE IN DEVELOPING PROGRAMS AND SOLUTIONS FOR -- +-- XILINX DEVICES. BY PROVIDING THIS DESIGN, CODE, OR INFORMATION -- +-- AS ONE POSSIBLE IMPLEMENTATION OF THIS FEATURE, APPLICATION -- +-- OR STANDARD, XILINX IS MAKING NO REPRESENTATION THAT THIS -- +-- IMPLEMENTATION IS FREE FROM ANY CLAIMS OF INFRINGEMENT, -- +-- AND YOU ARE RESPONSIBLE FOR OBTAINING ANY RIGHTS YOU MAY REQUIRE -- +-- FOR YOUR IMPLEMENTATION. XILINX EXPRESSLY DISCLAIMS ANY -- +-- WARRANTY WHATSOEVER WITH RESPECT TO THE ADEQUACY OF THE -- +-- IMPLEMENTATION, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OR -- +-- REPRESENTATIONS THAT THIS IMPLEMENTATION IS FREE FROM CLAIMS OF -- +-- INFRINGEMENT, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS -- +-- FOR A PARTICULAR PURPOSE. -- +-- -- +-- Xilinx products are not intended for use in life support -- +-- appliances, devices, or systems. Use in such applications are -- +-- expressly prohibited. -- +-- -- +-- (c) Copyright 1995-2011 Xilinx, Inc. -- +-- All rights reserved. -- +-------------------------------------------------------------------------------- + +-- The Xilinx LogiCORE IP Block Memory Generator replaces the Dual Port Block Memory and Single Port Block Memory LogiCOREs, but is not a direct drop-in replacement. It should be used in all new Xilinx designs. The core supports RAM and ROM functions over a wide range of widths and depths. Use this core to generate block memories with symmetric or asymmetric read and write port widths, as well as cores which can perform simultaneous write operations to separate locations, and simultaneous read operations from the same location. For more information on differences in interface and feature support between this core and the Dual Port Block Memory and Single Port Block Memory LogiCOREs, please consult the data sheet. + +-- Interfaces: +-- AXI4_SLAVE_S_AXI +-- AXILite_SLAVE_S_AXI + +-- The following code must appear in the VHDL architecture header: + +------------- Begin Cut here for COMPONENT Declaration ------ COMP_TAG +COMPONENT char_rom_memory + PORT ( + clka : IN STD_LOGIC; + addra : IN STD_LOGIC_VECTOR(13 DOWNTO 0); + douta : OUT STD_LOGIC_VECTOR(0 DOWNTO 0) + ); +END COMPONENT; +-- COMP_TAG_END ------ End COMPONENT Declaration ------------ + +-- The following code must appear in the VHDL architecture +-- body. Substitute your own instance name and net names. + +------------- Begin Cut here for INSTANTIATION Template ----- INST_TAG +your_instance_name : char_rom_memory + PORT MAP ( + clka => clka, + addra => addra, + douta => douta + ); +-- INST_TAG_END ------ End INSTANTIATION Template ------------ + +-- You must compile the wrapper file char_rom_memory.vhd when simulating +-- the core, char_rom_memory. When compiling the wrapper file, be sure to +-- reference the XilinxCoreLib VHDL simulation library. For detailed +-- instructions, please refer to the "CORE Generator Help". + diff --git a/ipcore_dir/char_rom_memory.xco b/ipcore_dir/char_rom_memory.xco new file mode 100644 index 0000000..6b147ee --- /dev/null +++ b/ipcore_dir/char_rom_memory.xco @@ -0,0 +1,101 @@ +############################################################## +# +# Xilinx Core Generator version 13.1 +# Date: Sat May 28 17:08:51 2011 +# +############################################################## +# +# This file contains the customisation parameters for a +# Xilinx CORE Generator IP GUI. It is strongly recommended +# that you do not manually alter this file as it may cause +# unexpected and unsupported behavior. +# +############################################################## +# +# BEGIN Project Options +SET addpads = false +SET asysymbol = true +SET busformat = BusFormatAngleBracketNotRipped +SET createndf = false +SET designentry = VHDL +SET device = xc3s100e +SET devicefamily = spartan3e +SET flowvendor = Other +SET formalverification = false +SET foundationsym = false +SET implementationfiletype = Ngc +SET package = cp132 +SET removerpms = false +SET simulationfiles = Behavioral +SET speedgrade = -5 +SET verilogsim = false +SET vhdlsim = true +# END Project Options +# BEGIN Select +SELECT Block_Memory_Generator xilinx.com:ip:blk_mem_gen:6.1 +# END Select +# BEGIN Parameters +CSET additional_inputs_for_power_estimation=false +CSET algorithm=Minimum_Area +CSET assume_synchronous_clk=false +CSET axi_id_width=4 +CSET axi_slave_type=Memory_Slave +CSET axi_type=AXI4_Full +CSET byte_size=9 +CSET coe_file=/home/xiadz/prog/fpga/oscilloscope/rom_data/8x16_font_ASCII_DOS_437.coe +CSET collision_warnings=ALL +CSET component_name=char_rom_memory +CSET disable_collision_warnings=false +CSET disable_out_of_range_warnings=false +CSET ecc=false +CSET ecctype=No_ECC +CSET enable_a=Always_Enabled +CSET enable_b=Always_Enabled +CSET error_injection_type=Single_Bit_Error_Injection +CSET fill_remaining_memory_locations=false +CSET interface_type=Native +CSET load_init_file=true +CSET memory_type=Single_Port_ROM +CSET operating_mode_a=WRITE_FIRST +CSET operating_mode_b=WRITE_FIRST +CSET output_reset_value_a=0 +CSET output_reset_value_b=0 +CSET pipeline_stages=0 +CSET port_a_clock=100 +CSET port_a_enable_rate=100 +CSET port_a_write_rate=0 +CSET port_b_clock=0 +CSET port_b_enable_rate=0 +CSET port_b_write_rate=0 +CSET primitive=8kx2 +CSET read_width_a=1 +CSET read_width_b=1 +CSET register_porta_input_of_softecc=false +CSET register_porta_output_of_memory_core=false +CSET register_porta_output_of_memory_primitives=false +CSET register_portb_output_of_memory_core=false +CSET register_portb_output_of_memory_primitives=false +CSET register_portb_output_of_softecc=false +CSET remaining_memory_locations=0 +CSET reset_memory_latch_a=false +CSET reset_memory_latch_b=false +CSET reset_priority_a=CE +CSET reset_priority_b=CE +CSET reset_type=SYNC +CSET softecc=false +CSET use_axi_id=false +CSET use_byte_write_enable=false +CSET use_error_injection_pins=false +CSET use_regcea_pin=false +CSET use_regceb_pin=false +CSET use_rsta_pin=false +CSET use_rstb_pin=false +CSET write_depth_a=16384 +CSET write_width_a=1 +CSET write_width_b=1 +# END Parameters +# BEGIN Extra information +MISC pkg_timestamp=2011-02-03T22:20:43.000Z +# END Extra information +GENERATE +# CRC: 6cb9954b diff --git a/ipcore_dir/char_rom_memory.xise b/ipcore_dir/char_rom_memory.xise new file mode 100644 index 0000000..eafc770 --- /dev/null +++ b/ipcore_dir/char_rom_memory.xise @@ -0,0 +1,72 @@ + + + +
+ + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
diff --git a/ipcore_dir/char_rom_memory_flist.txt b/ipcore_dir/char_rom_memory_flist.txt new file mode 100644 index 0000000..823a691 --- /dev/null +++ b/ipcore_dir/char_rom_memory_flist.txt @@ -0,0 +1,14 @@ +# Output products list for +_xmsgs/pn_parser.xmsgs +blk_mem_gen_ds512.pdf +blk_mem_gen_readme.txt +char_rom_memory.asy +char_rom_memory.gise +char_rom_memory.mif +char_rom_memory.ngc +char_rom_memory.vhd +char_rom_memory.vho +char_rom_memory.xco +char_rom_memory.xise +char_rom_memory_flist.txt +char_rom_memory_xmdf.tcl diff --git a/ipcore_dir/char_rom_memory_xmdf.tcl b/ipcore_dir/char_rom_memory_xmdf.tcl new file mode 100644 index 0000000..0dcb7c0 --- /dev/null +++ b/ipcore_dir/char_rom_memory_xmdf.tcl @@ -0,0 +1,80 @@ +# The package naming convention is _xmdf +package provide char_rom_memory_xmdf 1.0 + +# This includes some utilities that support common XMDF operations +package require utilities_xmdf + +# Define a namespace for this package. The name of the name space +# is _xmdf +namespace eval ::char_rom_memory_xmdf { +# Use this to define any statics +} + +# Function called by client to rebuild the params and port arrays +# Optional when the use context does not require the param or ports +# arrays to be available. +proc ::char_rom_memory_xmdf::xmdfInit { instance } { +# Variable containg name of library into which module is compiled +# Recommendation: +# Required +utilities_xmdf::xmdfSetData $instance Module Attributes Name char_rom_memory +} +# ::char_rom_memory_xmdf::xmdfInit + +# Function called by client to fill in all the xmdf* data variables +# based on the current settings of the parameters +proc ::char_rom_memory_xmdf::xmdfApplyParams { instance } { + +set fcount 0 +# Array containing libraries that are assumed to exist +# Examples include unisim and xilinxcorelib +# Optional +# In this example, we assume that the unisim library will +# be magically +# available to the simulation and synthesis tool +utilities_xmdf::xmdfSetData $instance FileSet $fcount type logical_library +utilities_xmdf::xmdfSetData $instance FileSet $fcount logical_library unisim +incr fcount + +utilities_xmdf::xmdfSetData $instance FileSet $fcount relative_path blk_mem_gen_ds512.pdf +utilities_xmdf::xmdfSetData $instance FileSet $fcount type AnyView +incr fcount + +utilities_xmdf::xmdfSetData $instance FileSet $fcount relative_path blk_mem_gen_readme.txt +utilities_xmdf::xmdfSetData $instance FileSet $fcount type text +incr fcount + +utilities_xmdf::xmdfSetData $instance FileSet $fcount relative_path char_rom_memory.asy +utilities_xmdf::xmdfSetData $instance FileSet $fcount type asy +incr fcount + +utilities_xmdf::xmdfSetData $instance FileSet $fcount relative_path char_rom_memory.mif +utilities_xmdf::xmdfSetData $instance FileSet $fcount type AnyView +incr fcount + +utilities_xmdf::xmdfSetData $instance FileSet $fcount relative_path char_rom_memory.ngc +utilities_xmdf::xmdfSetData $instance FileSet $fcount type ngc +incr fcount + +utilities_xmdf::xmdfSetData $instance FileSet $fcount relative_path char_rom_memory.vhd +utilities_xmdf::xmdfSetData $instance FileSet $fcount type vhdl +incr fcount + +utilities_xmdf::xmdfSetData $instance FileSet $fcount relative_path char_rom_memory.vho +utilities_xmdf::xmdfSetData $instance FileSet $fcount type vhdl_template +incr fcount + +utilities_xmdf::xmdfSetData $instance FileSet $fcount relative_path char_rom_memory.xco +utilities_xmdf::xmdfSetData $instance FileSet $fcount type coregen_ip +incr fcount + +utilities_xmdf::xmdfSetData $instance FileSet $fcount relative_path char_rom_memory_xmdf.tcl +utilities_xmdf::xmdfSetData $instance FileSet $fcount type AnyView +incr fcount + +utilities_xmdf::xmdfSetData $instance FileSet $fcount associated_module char_rom_memory +incr fcount + +} + +# ::gen_comp_name_xmdf::xmdfApplyParams diff --git a/ipcore_dir/clock_108mhz.vhd b/ipcore_dir/clock_108mhz.vhd new file mode 100644 index 0000000..60bcea7 --- /dev/null +++ b/ipcore_dir/clock_108mhz.vhd @@ -0,0 +1,90 @@ +-------------------------------------------------------------------------------- +-- Copyright (c) 1995-2011 Xilinx, Inc. All rights reserved. +-------------------------------------------------------------------------------- +-- ____ ____ +-- / /\/ / +-- /___/ \ / Vendor: Xilinx +-- \ \ \/ Version : 13.1 +-- \ \ Application : xaw2vhdl +-- / / Filename : clock_108mhz.vhd +-- /___/ /\ Timestamp : 04/20/2011 20:13:56 +-- \ \ / \ +-- \___\/\___\ +-- +--Command: xaw2vhdl-st /home/xiadz/prog/fpga/oscilloscope/ipcore_dir/./clock_108mhz.xaw /home/xiadz/prog/fpga/oscilloscope/ipcore_dir/./clock_108mhz +--Design Name: clock_108mhz +--Device: xc3s100e-5cp132 +-- +-- Module clock_108mhz +-- Generated by Xilinx Architecture Wizard +-- Written for synthesis tool: XST +-- Period Jitter (unit interval) for block DCM_SP_INST = 0.11 UI +-- Period Jitter (Peak-to-Peak) for block DCM_SP_INST = 1.01 ns + +library ieee; +use ieee.std_logic_1164.ALL; +use ieee.numeric_std.ALL; +library UNISIM; +use UNISIM.Vcomponents.ALL; + +entity clock_108mhz is + port ( CLKIN_IN : in std_logic; + RST_IN : in std_logic; + CLKFX_OUT : out std_logic; + CLKIN_IBUFG_OUT : out std_logic; + LOCKED_OUT : out std_logic); +end clock_108mhz; + +architecture BEHAVIORAL of clock_108mhz is + signal CLKFX_BUF : std_logic; + signal CLKIN_IBUFG : std_logic; + signal GND_BIT : std_logic; +begin + GND_BIT <= '0'; + CLKIN_IBUFG_OUT <= CLKIN_IBUFG; + CLKFX_BUFG_INST : BUFG + port map (I=>CLKFX_BUF, + O=>CLKFX_OUT); + + CLKIN_IBUFG_INST : IBUFG + port map (I=>CLKIN_IN, + O=>CLKIN_IBUFG); + + DCM_SP_INST : DCM_SP + generic map( CLK_FEEDBACK => "NONE", + CLKDV_DIVIDE => 2.0, + CLKFX_DIVIDE => 13, + CLKFX_MULTIPLY => 28, + CLKIN_DIVIDE_BY_2 => FALSE, + CLKIN_PERIOD => 20.000, + CLKOUT_PHASE_SHIFT => "NONE", + DESKEW_ADJUST => "SYSTEM_SYNCHRONOUS", + DFS_FREQUENCY_MODE => "LOW", + DLL_FREQUENCY_MODE => "LOW", + DUTY_CYCLE_CORRECTION => TRUE, + FACTORY_JF => x"C080", + PHASE_SHIFT => 0, + STARTUP_WAIT => FALSE) + port map (CLKFB=>GND_BIT, + CLKIN=>CLKIN_IBUFG, + DSSEN=>GND_BIT, + PSCLK=>GND_BIT, + PSEN=>GND_BIT, + PSINCDEC=>GND_BIT, + RST=>RST_IN, + CLKDV=>open, + CLKFX=>CLKFX_BUF, + CLKFX180=>open, + CLK0=>open, + CLK2X=>open, + CLK2X180=>open, + CLK90=>open, + CLK180=>open, + CLK270=>open, + LOCKED=>LOCKED_OUT, + PSDONE=>open, + STATUS=>open); + +end BEHAVIORAL; + + diff --git a/ipcore_dir/clock_108mhz.xaw b/ipcore_dir/clock_108mhz.xaw new file mode 100644 index 0000000..d015cb3 --- /dev/null +++ b/ipcore_dir/clock_108mhz.xaw @@ -0,0 +1,3 @@ +XILINX-XDB 0.1 STUB 0.1 ASCII +XILINX-XDM V1.6e +$97x05=(`fgn#ugnd{-svja(nymj#b}limnlwfiwm&c{ob|j_ekq++)ddfi`S<>7mix-|dq639>0<#?>1:37?4(78:1:<5<4126856(602;=+eM?813867=5?;194;5<1/0647=4:813;6O]CIUJ^418:CQS_YHFESTOAEFN^G[P@TIIE;>7L\XZ^MMH\YDDBCES[OCUD3a?DTPRVEE@TQKCL]PSLRD@@DLSNBD119BVR\XGGFRSIJ]_B224>GU_SUDBAWPDEP\G4763HX\VRAALX]G@WYDDB;=7L\XZ^MMH\YCL[UM@D^ILNR21>GU_SUDBAWPFC]F\QCUFHF:>6O]W[]LJI_XAGY_SC[Be:CQS_YHFEST\@MK149BVR\XGGFRS_K\EU]OKBOD911J^ZTPOONZ[SGKAMUOJ^QBOEGb?DUTGJU\EYF>5:CT^ZEKCK_M=RAPSHEMEHCa3H]QSNBDBTDW]UC69:1J[WQLLJ]LQQVR\V^R\Hm4AVX\BIIP\PZN46OXZ^RBVQb9;BNH62623JF@>U64CMI1\4>7=2IGG4>:;BNH@SeEKCOH>7NBDFY:8GIMAP82;56MCKGZ\FP@a3JF@JUQMUGE\MKUSk2IGGKVPDHTJ@@cBDEVY[SD@\Te9GAVMB_VKOFX][139GBVYAZL[^ICMV_LMGA441OS[OCUD:8A]RBZGKGm6HNCUMQ]ZLA=2LJ@^K6;G@\WJSUKL30JD@PUOKWW==AG\^T_Y\n;GMVPZSIA]Yj7KAZT^TBHPC53OR:7D;4ICWEC47HB\^EYG95AOOG2?J>VNF^COXE64PSKNP\VB991[^B^PPHLJWDESA_O>7]]LLJ48TVBHFL>0\^KA8:RPMKECMJ90^^Z9;SQW[LHe3ZCLIUZJROCO2>UNFNFNo6][ASVVTZQFA]<0_YO[UR31?V_T\LGT_T@LHSMMKPU43]E[86Z]UD:8QVCXJ\LL46[\E^EQMA3<^@O\=o5WAV]UAWUNGG;o7UGCIOZ.\AD'8';+_Y[M 1,2$DUDA@90T^Z9;Yfa[Lb682RoaRCnjnpUawungg;;7Ujb_LkmkwPbzzcdb85T0;2^1>]72>W?7l|xz29gghd<~lxxeb`/1/27?sncdo1so>}>01g.1fv6;;wKL}==;AB{4?@=<3;p_9?5818;6?74:mi>87im:9;03061<[=:14=472;306ae2138;8nk4d9294?7=9rY?=76?:909564ck<>1>l7n8:tW32<7280:6:u\408;4?>52899hn;;:3c:e==e?:0;6=4<:6y'b?>63-8:65=4$309<1=#::014<,8:1>n5+1085b>"6;38=7)?;:348 43=:>1/=;4=6:&23?063-;36;h4$0;97>"6i3?m7)?m:5a8 4e=:=1/?k4:f:&1`??<,:91i6*<4;c8 61=1g<,:o19k5+45846>"313<0(9;55c9'03<2j2.?479;;%6a>==#j6*;e;7`?!372"2>3>0e>850;&51?1b3-<<6::4;h0f>5<#><0>07d8l:18'20<0m2.=;79;;:k5e?6=,??1;h5+65840>=n>k0;6)8::6g8 32=?=10e;650;&51?1b3-5<#><0i5>3:1(;;57d98k7d=83.=979j;:m13?6=,??1;h54o3:94?"1=3=n76a=c;29 33=?l10c?750;&51?1b32e9m7>5$7793`=>0(2c<3f=:6=4+6484b>"1;3=?76a:9;29 33=?l1/::484:9l2<<72-<>6:k4;|`0=?6=:3:15$7793`=#>>0<865rb2094?4=83:p(;85249j16<72-<>6:k4$75931=>07p}<8;296~;3;39=70=6:728 4b=;h1v;j50;3x915=>j1/:h4:3:p74<72;q68>4=f:?06?343ty>m7>51z?77?3>3-4}r1a>5<6s49268=4$7g916=z{:?1<7?t=20925=#>l0=<6s|3`83>5}#>l0=<6srn3694?7|ug8>6=4>{|l12?6=9rwe>:4?:0y~j7>=83;pqc<6:182xh5i3:1=vsr}|BCG~552?;9iho?6|BCF~6zHIZpqMN \ No newline at end of file diff --git a/ipcore_dir/clock_108mhz_arwz.ucf b/ipcore_dir/clock_108mhz_arwz.ucf new file mode 100644 index 0000000..b1a302c --- /dev/null +++ b/ipcore_dir/clock_108mhz_arwz.ucf @@ -0,0 +1,17 @@ +# Generated by Xilinx Architecture Wizard +# --- UCF Template Only --- +# Cut and paste these attributes into the project's UCF file, if desired +INST DCM_SP_INST CLK_FEEDBACK = NONE; +INST DCM_SP_INST CLKDV_DIVIDE = 2.0; +INST DCM_SP_INST CLKFX_DIVIDE = 13; +INST DCM_SP_INST CLKFX_MULTIPLY = 28; +INST DCM_SP_INST CLKIN_DIVIDE_BY_2 = FALSE; +INST DCM_SP_INST CLKIN_PERIOD = 20.000; +INST DCM_SP_INST CLKOUT_PHASE_SHIFT = NONE; +INST DCM_SP_INST DESKEW_ADJUST = SYSTEM_SYNCHRONOUS; +INST DCM_SP_INST DFS_FREQUENCY_MODE = LOW; +INST DCM_SP_INST DLL_FREQUENCY_MODE = LOW; +INST DCM_SP_INST DUTY_CYCLE_CORRECTION = TRUE; +INST DCM_SP_INST FACTORY_JF = C080; +INST DCM_SP_INST PHASE_SHIFT = 0; +INST DCM_SP_INST STARTUP_WAIT = FALSE; diff --git a/ipcore_dir/clock_108mhz_flist.txt b/ipcore_dir/clock_108mhz_flist.txt new file mode 100644 index 0000000..25da5f9 --- /dev/null +++ b/ipcore_dir/clock_108mhz_flist.txt @@ -0,0 +1,2 @@ +# Output products list for +clock_108mhz_flist.txt diff --git a/ipcore_dir/coregen.cgc b/ipcore_dir/coregen.cgc new file mode 100644 index 0000000..5a63fea --- /dev/null +++ b/ipcore_dir/coregen.cgc @@ -0,0 +1,325 @@ + + + xilinx.com + project + coregen + 1.0 + + + char_rom_memory + + + char_rom_memory + Native + AXI4_Full + Memory_Slave + false + 4 + Single_Port_ROM + No_ECC + false + false + false + Single_Bit_Error_Injection + false + 9 + Minimum_Area + 8kx2 + false + 1 + 16384 + 1 + WRITE_FIRST + Always_Enabled + 1 + 1 + WRITE_FIRST + Always_Enabled + false + false + false + false + false + false + false + false + 0 + true + /home/xiadz/prog/fpga/oscilloscope/rom_data/8x16_font_ASCII_DOS_437.coe + false + 0 + false + false + CE + 0 + false + false + CE + 0 + SYNC + false + 100 + 0 + 0 + 0 + 100 + 0 + ALL + false + false + + + + + coregen + ./ + ./tmp/ + ./tmp/_cg + + + xc3s100e + spartan3e + cp132 + -5 + + + BusFormatAngleBracketNotRipped + VHDL + true + Other + false + false + false + Ngc + false + + + Behavioral + VHDL + false + + + 2011-02-03T22:20:43.000Z + + + + + + trace_memory + + + trace_memory + Native + AXI4_Full + Memory_Slave + false + 4 + Simple_Dual_Port_RAM + No_ECC + false + false + false + Single_Bit_Error_Injection + false + 9 + Minimum_Area + 8kx2 + true + 9 + 5974 + 9 + WRITE_FIRST + Always_Enabled + 9 + 9 + WRITE_FIRST + Always_Enabled + false + false + false + false + false + false + false + false + 0 + false + no_coe_file_loaded + true + 0 + false + false + CE + 0 + true + false + CE + 0 + SYNC + false + 100 + 50 + 100 + 0 + 100 + 100 + ALL + false + false + + + + + coregen + ./ + ./tmp/ + ./tmp/_cg + + + xc3s100e + spartan3e + cp132 + -5 + + + BusFormatAngleBracketNotRipped + VHDL + true + Other + false + false + false + Ngc + false + + + Behavioral + VHDL + false + + + 2011-02-03T22:20:43.000Z + + + + + + clock_100mhz + + + clock_100mhz + /home/xiadz/prog/fpga/oscilloscope/ipcore_dir/clock_100mhz.xaw + + + + + 0 + + + coregen + ./ + ./tmp/ + ./tmp/_cg + + + xc3s100e + spartan3e + cp132 + -5 + + + BusFormatAngleBracketNotRipped + VHDL + true + Other + false + false + false + Ngc + false + + + Behavioral + VHDL + false + + + + + + clock_108mhz + + + clock_108mhz + /home/xiadz/prog/fpga/oscilloscope/ipcore_dir/clock_108mhz.xaw + + + + + 0 + + + coregen + ./ + ./tmp/ + ./tmp/_cg + + + xc3s100e + spartan3e + cp132 + -5 + + + BusFormatAngleBracketNotRipped + VHDL + true + Other + false + false + false + Ngc + false + + + Behavioral + VHDL + false + + + + + + + + + coregen + ./ + ./tmp/ + ./tmp/_cg + + + xc3s100e + spartan3e + cp132 + -5 + + + BusFormatAngleBracketNotRipped + VHDL + true + Other + false + false + false + Ngc + false + + + Behavioral + VHDL + false + + + + diff --git a/ipcore_dir/coregen.cgp b/ipcore_dir/coregen.cgp new file mode 100644 index 0000000..2f62ff1 --- /dev/null +++ b/ipcore_dir/coregen.cgp @@ -0,0 +1,9 @@ +SET busformat = BusFormatAngleBracketNotRipped +SET designentry = VHDL +SET device = xc3s100e +SET devicefamily = spartan3e +SET flowvendor = Other +SET package = cp132 +SET speedgrade = -5 +SET verilogsim = false +SET vhdlsim = true diff --git a/ipcore_dir/edit_char_rom_memory.tcl b/ipcore_dir/edit_char_rom_memory.tcl new file mode 100644 index 0000000..f0c3d89 --- /dev/null +++ b/ipcore_dir/edit_char_rom_memory.tcl @@ -0,0 +1,37 @@ +## +## Core Generator Run Script, generator for Project Navigator edit command +## + +proc findRtfPath { relativePath } { + set xilenv "" + if { [info exists ::env(XILINX) ] } { + if { [info exists ::env(MYXILINX)] } { + set xilenv [join [list $::env(MYXILINX) $::env(XILINX)] $::xilinx::path_sep ] + } else { + set xilenv $::env(XILINX) + } + } + foreach path [ split $xilenv $::xilinx::path_sep ] { + set fullPath [ file join $path $relativePath ] + if { [ file exists $fullPath ] } { + return $fullPath + } + } + return "" +} + +source [ findRtfPath "data/projnav/scripts/dpm_cgUtils.tcl" ] + +set result [ run_cg_edit "char_rom_memory" xc3s100e-5cp132 VHDL_and_Verilog ] + +if { $result == 0 } { + puts "Core Generator edit command completed successfully." +} elseif { $result == 1 } { + puts "Core Generator edit command failed." +} elseif { $result == 3 || $result == 4 } { + # convert 'version check' result to real return range, bypassing any messages. + set result [ expr $result - 3 ] +} else { + puts "Core Generator edit cancelled." +} +exit $result diff --git a/ipcore_dir/trace_memory.asy b/ipcore_dir/trace_memory.asy new file mode 100644 index 0000000..633a714 --- /dev/null +++ b/ipcore_dir/trace_memory.asy @@ -0,0 +1,37 @@ +Version 4 +SymbolType BLOCK +TEXT 32 32 LEFT 4 trace_memory +RECTANGLE Normal 32 32 544 1376 +LINE Wide 0 80 32 80 +PIN 0 80 LEFT 36 +PINATTR PinName addra[12:0] +PINATTR Polarity IN +LINE Wide 0 112 32 112 +PIN 0 112 LEFT 36 +PINATTR PinName dina[8:0] +PINATTR Polarity IN +LINE Wide 0 208 32 208 +PIN 0 208 LEFT 36 +PINATTR PinName wea[0:0] +PINATTR Polarity IN +LINE Normal 0 272 32 272 +PIN 0 272 LEFT 36 +PINATTR PinName clka +PINATTR Polarity IN +LINE Wide 0 432 32 432 +PIN 0 432 LEFT 36 +PINATTR PinName addrb[12:0] +PINATTR Polarity IN +LINE Normal 0 592 32 592 +PIN 0 592 LEFT 36 +PINATTR PinName rstb +PINATTR Polarity IN +LINE Normal 0 624 32 624 +PIN 0 624 LEFT 36 +PINATTR PinName clkb +PINATTR Polarity IN +LINE Wide 576 368 544 368 +PIN 576 368 RIGHT 36 +PINATTR PinName doutb[8:0] +PINATTR Polarity OUT + diff --git a/ipcore_dir/trace_memory.gise b/ipcore_dir/trace_memory.gise new file mode 100644 index 0000000..591878a --- /dev/null +++ b/ipcore_dir/trace_memory.gise @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + 11.1 + + + + + + + + + + + + diff --git a/ipcore_dir/trace_memory.ncf b/ipcore_dir/trace_memory.ncf new file mode 100644 index 0000000..e69de29 diff --git a/ipcore_dir/trace_memory.ngc b/ipcore_dir/trace_memory.ngc new file mode 100644 index 0000000..587a1f7 --- /dev/null +++ b/ipcore_dir/trace_memory.ngc @@ -0,0 +1,3 @@ +XILINX-XDB 0.1 STUB 0.1 ASCII +XILINX-XDM V1.6e +$05044<,[o}e~g`n;"2*736(-;0<>5?0163?56789:;<=>?0123456789:;<=>?0123456789:;<=>?0123456789:;<=>?012344=69=1:=7GAPTV9EABUI5;;6=0>4:32>LHW]]0JHI\M<0294;733891EC^ZT;cg`wg;9;0;2<:4128JJUSS2hno~o2>2;2=54=62@D[YY4KIQC?4?69981:6D@_UU8GMUD;83:5==5>:HLSQQ2:39KPRW]]0OC]O30;2=57=62F__\XZ5DNRA85<76m18<>?ebr277+292>?7;<;059470768221EC^ZT;FJE91=87;;754FNQWW>AOE4>0;2038air|k636=07;@FGVD:76k1JHI\N<0294;?99B@ATF48437LJKR@>1:==FLMXJ0>07;@FGVD:3611JHI\N<4<;?DBCZH6=255NDEPB828?3HNO^L27>99B@ATF40437LJKRC>3:g=FLMXI0<>50?;8EABUJ5;;255NDEPA848?3HNO^O2=>99B@ATE4:437LJKRC>7:==FLMXI0807;@FGVG:1611JHI\M<6<;?DBCZK63255NDEPA8<843HFG46LZS^KMBJ70OB\J_FGMAWGSAFDTECH@7:AQADRBL81O:6JFA=2=2>BNI5;5:6JFA=0=2>BNI595:6JFA=6=2>BNI5?5:6JFA=4=<>BNI5=1<384DHC?3;0384DH@?7;02NBN1919:FJTD:7294<7IG_A=2==>BNXK6;6=08;EKSF969>2NDM1>16:FLE979>2NDM1<16:FLE959>2NDM1:16:FLE939>2NDM1818:FLE91=87<0HBO37?48@JD;87<0HBL31?48@JD;:7<0HBL33?48@JD;<7<0HBL35?48@JD;>720HBL37;2=2>BHJ5=556J@P@>3>5803ME[M1>19:FLTG:7294<7IA_B=2=7>CII:1NBO=4FEG2?B5=;H31?L453@937D@FTQ]34==NF@^[S=?7;HLJPUY7:11BBDZ__11;?LHN\YU;855FNHVS[53?3@DBX]Q?699JJLRWW9=27D@FTRVBP@18;HLJPZ66?2CEEYQ?269JJLRX8:=0ECG[_164?LHN\V:>;6GAIU]322=NF@^T<:94IOKW[5>03@DBXR>67:KMMQY7I>1BBDZP0C58MKOSW9I<7D@FT^2G3>OIA]U;I:5FNHV\4C18;HLJPZ76?2CEEYQ>269JJLRX9:=0ECG[_064?LHN\V;>;6GAIU]222=NF@^T=:94IOKW[4>03@DBXR?67:KMMQY6I>1BBDZP1C58MKOSW8I<7D@FT^3G3>OIA]U:I:5FNHV\5C18;HLJPZ46?2CEEYQ=269JJLRX::=0ECG[_364?LHN\V8>;6GAIU]122=NF@^T>:94IOKW[7>03@DBXR<67:KMMQY5I>1BBDZP2C58MKOSW;I<7D@FT^0G3>OIA]U9I:5FNHV\6C1>8;HLJPZ56?2CEEYQ<269JJLRX;:=0ECG[_264?LHN\V9>;6GAIU]022=NF@^T?:94IOKW[6>03@DBXR=67:KMMQY4I>1BBDZP3C58MKOSW:I<7D@FT^1G3>OIA]U8I:5FNHV\7C095CUU66?HS_Nk1^<"v|t^`ooZkbeVmnbh|ntnp,ckgsaoiaj aaukuaZdkcVgnaRijn.tbhlb)kz~y#ogadda\e+dnfmohSd`|t^c,AKIR\V;To`~Pep23450d3\:$t~zPbmi\i`kXoldn~lz`r.emeqoqmkgl"co{iwg\fimXelgTkh` v`nj`+et|{%iecjjc^c-flhcmjUbb~zPa.GMKPRX9Vif|Rk~012353d<]9%syQmlj]nahY`mgoymya}/flbplpbjdm%blzfvd]ahnYjmdUlic!yamkg*fusz&hbbikl_`,amkbbkVceyQn/DLLQQY5Wjg{Sh?0125g>S7'qySobd_lgn[bcim{kc!hn`vjr`djo'djxdxj_cnh[hcjWnoe#{ocie,`wqt(j`doinQn.ckm``eXagySl!JNNWW[7YdeyUn}=>?004a?P6(pz~TnaePmdo\c`hbzh~d~"iaaukuagk`&gke{kPbmi\i`kXold$zlbfd/appw)eagnnoRl!bhlgafYnfz~Tn"KAOTV\4ZejxVoz<=>?6b9V4*~t|VhggRcjm^efj`tf|fx$kco{iwgaib(ii}c}iRlck^ofiZabf&|j`dj!crvq+goilliTn#lfneg`[lht|Vh$ICAZT^2\ghvXmx:;<=?9b:W3+}usWkf`S`kb_fgmawgsg{%lblzfvd`nc+hf|`|nSobd_lgn[bci'kgei lsup,flhcmjUi"ogadda\mkusWk%NBB[[_0]`iuYby9:;<;m4U1-{wqYedbUfi`Qheogqeqiu'ndjxdxjble-jdrn~lUi`fQbel]dak)qieco"n}{r.`jjacdWk$iecjjc^kmwqYe'LDDYYQ>_bos[`w789:::o5Z0.zppZdkcVgnaRijndpbpjt(ogke{kmmf,meqoqmVhggRcjm^efj*pfd`n%o~z}/ckm``eXj'hbbikl_hlppZd(MGE^XR xrv\fimXelgTkh`jr`vlv*aii}c}ioch.ocwmscXjeaTahcPgdl,rdjnl'ixx!mioffgZd)j`doinQfnrv\f*CIG\^T>Rmbp^gr45679 xrv\fimXelgTkh`jr`vlv*aii}c}ioch.ocwmscXjeaTahcPgdl,rdjnl'ixx!gar]nq}Ye&K%FaxvPdnww[hs998=<6[?/yqw[gjlWdofSjkaescwkw)`fh~bzhlbg/lbplpbWkf`S`kb_fgm+sgkam$hy| h`q\ip~Xj'H$A`{w_emvpZkrp8:Tj8;k;T2,|vrXjeaTahcPgdlfvdrhz&memygyecod*kgsaoTnaePmdo\c`h(~hfbh#m|ts-kevYj}qUi"O!Bmtz\`jssWds=?;j;T2,|vrXjeaTahcPgdlfvdrhz&memygyecod*kgsaoTnaePmdo\c`h(~hfbh#m|ts-kevYj}qUi"O!Bmtz\`jssWds=??:e:W3+}usWkf`S`kb_fgmawgsg{%lblzfvd`nc+hf|`|nSobd_lgn[bci'kgei lsup,lduXe|rTn#L Mlw{[air|Vg~t<<=619V4*~t|VhggRcjm^efj`tf|fx$kco{iwgaib(ii}c}iRlck^ofiZabf&|j`dj!crvq+mgtWdsSo M/Lov|Zbh}}Ufyu?=_g76`>S7'qySobd_lgn[bcim{kc!hn`vjr`djo'djxdxj_cnh[hcjWnoe#{ocie,`wqt(`hyTaxvPb/@,IhsWme~xRczx066a>S7'qySobd_lgn[bcim{kc!hn`vjr`djo'djxdxj_cnh[hcjWnoe#{ocie,`wqt(`hyTaxvPb/@,IhsWme~xRczx0621`=R8&rxxRlck^ofiZabflxjxb| gocwmsceen$emygye^`ooZkbeVmnb"xnlhf-gvru'akxS`{w_c,A+HkrpVndyyQbuy37636<]9%syQmlj]nahY`mgoymya}/flbplpbjdm%blzfvd]ahnYjmdUlic!yamkg*fusz&bjRczx^`-F*Kj}qUocxzPmtz20Z`2=m1^<"v|t^`ooZkbeVmnbh|ntnp,ckgsaoiaj aaukuaZdkcVgnaRijn.tbhlb)kz~y#eo|_lw{[g(E'Dg~tRj`uu]nq}71=l1^<"v|t^`ooZkbeVmnbh|ntnp,ckgsaoiaj aaukuaZdkcVgnaRijn.tbhlb)kz~y#eo|_lw{[g(E'Dg~tRj`uu]nq}719;<;7X> xrv\fimXelgTkh`jr`vlv*aii}c}ioch.ocwmscXjeaTahcPgdl,rdjnl'ixx!gar]nq}Ye&K%FaxvPdnww[hs9?Um98j4U1-{wqYedbUfi`Qheogqeqiu'ndjxdxjble-jdrn~lUi`fQbel]dak)qieco"n}{r.jbwZkrpVh%N"Cbuy]gkprXe|r:48k4U1-{wqYedbUfi`Qheogqeqiu'ndjxdxjble-jdrn~lUi`fQbel]dak)qieco"n}{r.jbwZkrpVh%N"Cbuy]gkprXe|r:4<;j;T2,|vrXjeaTahcPgdlfvdrhz&memygyecod*kgsaoTnaePmdo\c`h(~hfbh#m|ts-kevYj}qUi"O!Bmtz\`jssWds=5<90:W3+}usWkf`S`kb_fgmawgsg{%lblzfvd`nc+hf|`|nSobd_lgn[bci'kgei lsup,lduXe|rTn#L Mlw{[air|Vg~t<6Pf47`?P6(pz~TnaePmdo\c`hbzh~d~"iaaukuagk`&gke{kPbmi\i`kXold$zlbfd/appw)oizUfyuQm.C-Nip~XlfS`{w24f8Q5){}Ui`fQbel]dakcui}ey#j`nthtffha)fh~bzhQmlj]nahY`mg%}magk.bqwv*nf{Vg~tRl!B.Onq}Ycg|~Taxv=14f8Q5){}Ui`fQbel]dakcui}ey#j`nthtffha)fh~bzhQmlj]nahY`mg%}magk.bqwv*nf{Vg~tRl!B.Onq}Ycg|~Taxv=24d8Q5){}Ui`fQbel]dakcui}ey#j`nthtffha)fh~bzhQmlj]nahY`mg%}magk.bqwv*nf{Vg~tRl!B.Onq}Ycg|~Taxv=_g76g>S7'qySobd_lgn[bcim{kc!hn`vjr`djo'djxdxj_cnh[hcjWnoe#{ocie,`wqt(`hyTaxvPb/@,IhsWme~xRczx57g?P6(pz~TnaePmdo\c`hbzh~d~"iaaukuagk`&gke{kPbmi\i`kXold$zlbfd/appw)oizUfyuQm.C-Nip~XlfS`{w407g?P6(pz~TnaePmdo\c`hbzh~d~"iaaukuagk`&gke{kPbmi\i`kXold$zlbfd/appw)oizUfyuQm.C-Nip~XlfS`{w437e?P6(pz~TnaePmdo\c`hbzh~d~"iaaukuagk`&gke{kPbmi\i`kXold$zlbfd/appw)oizUfyuQm.C-Nip~XlfS`{w4^d61f=R8&rxxRlck^ofiZabflxjxb| gocwmsceen$emygye^`ooZkbeVmnb"xnlhf-gvru'akxS`{w_c,A+HkrpVndyyQbuy46`>S7'qySobd_lgn[bcim{kc!hn`vjr`djo'djxdxj_cnh[hcjWnoe#{ocie,`wqt(`hyTaxvPb/@,IhsWme~xRczx736`>S7'qySobd_lgn[bcim{kc!hn`vjr`djo'djxdxj_cnh[hcjWnoe#{ocie,`wqt(`hyTaxvPb/@,IhsWme~xRczx706b>S7'qySobd_lgn[bcim{kc!hn`vjr`djo'djxdxj_cnh[hcjWnoe#{ocie,`wqt(`hyTaxvPb/@,IhsWme~xRczx7]e10e<]9%syQmlj]nahY`mgoymya}/flbplpbjdm%blzfvd]ahnYjmdUlic!yamkg*fusz&bjRczx^`-F*Kj}qUocxzPmtz;1a=R8&rxxRlck^ofiZabflxjxb| gocwmsceen$emygye^`ooZkbeVmnb"xnlhf-gvru'akxS`{w_c,A+HkrpVndyyQbuy:21a=R8&rxxRlck^ofiZabflxjxb| gocwmsceen$emygye^`ooZkbeVmnb"xnlhf-gvru'akxS`{w_c,A+HkrpVndyyQbuy:11c=R8&rxxRlck^ofiZabflxjxb| gocwmsceen$emygye^`ooZkbeVmnb"xnlhf-gvru'akxS`{w_c,A+HkrpVndyyQbuy:\b03>3\:$t~zPbmi\i`kXoldn~lz`r.emeqoqmkgl"co{iwg\fimXelgTkh` v`nj`+et|{%cm~Qbuy]a*G)tmeU{e}k30?7:?P6(pz~TnaePmdo\c`hbzh~d~"iaaukuagk`&gke{kPbmi\i`kXold$zlbfd/appw)oizUfyuQm.C-paiYwayo7=3;7;T2,|vrXjeaTahcPgdlfvdrhz&memygyecod*kgsaoTnaePmdo\c`h(~hfbh#m|ts-kevYj}qUi"O!|em]smucX8<20Y=!wsu]ahnYjmdUlick}aumq+bhf|`|nn`i!n`vjr`YedbUfi`Qheo-ueioc&jy~"fns^ov|Zd)J&yn`R~fpd]20c=R8&rxxRlck^ofiZabflxjxb| gocwmsceen$emygye^`ooZkbeVmnb"xnlhf-gvru'{kfSiaztc2?4;2a3\:$t~zPbmi\i`kXoldn~lz`r.emeqoqmkgl"co{iwg\fimXelgTkh` v`nj`+et|{%ym`Qkotva4979m7X> xrv\fimXelgTkh`jr`vlv*aii}c}ioch.ocwmscXjeaTahcPgdl,rdjnl'ixx!}al]gkpre85958k5Z0.zppZdkcVgnaRijndpbpjt(ogke{kmmf,meqoqmVhggRcjm^efj*pfd`n%o~z}/scn[air|k:783:i;T2,|vrXjeaTahcPgdlfvdrhz&memygyecod*kgsaoTnaePmdo\c`h(~hfbh#m|ts-qehYcg|~i<1;14g9V4*~t|VhggRcjm^efj`tf|fx$kco{iwgaib(ii}c}iRlck^ofiZabf&|j`dj!crvq+wgjWme~xo>36?6e?P6(pz~TnaePmdo\c`hbzh~d~"iaaukuagk`&gke{kPbmi\i`kXold$zlbfd/appw)uidUocxzm0=5=0c=R8&rxxRlck^ofiZabflxjxb| gocwmsceen$emygye^`ooZkbeVmnb"xnlhf-gvru'{kfSiaztc2?<;2a3\:$t~zPbmi\i`kXoldn~lz`r.emeqoqmkgl"co{iwg\fimXelgTkh` v`nj`+et|{%ym`Qkotva5969m7X> xrv\fimXelgTkh`jr`vlv*aii}c}ioch.ocwmscXjeaTahcPgdl,rdjnl'ixx!}al]gkpre95858k5Z0.zppZdkcVgnaRijndpbpjt(ogke{kmmf,meqoqmVhggRcjm^efj*pfd`n%o~z}/scn[air|k;7?3:i;T2,|vrXjeaTahcPgdlfvdrhz&memygyecod*kgsaoTnaePmdo\c`h(~hfbh#m|ts-qehYcg|~i=1:14g9V4*~t|VhggRcjm^efj`tf|fx$kco{iwgaib(ii}c}iRlck^ofiZabf&|j`dj!crvq+wgjWme~xo?35?6e?P6(pz~TnaePmdo\c`hbzh~d~"iaaukuagk`&gke{kPbmi\i`kXold$zlbfd/appw)uidUocxzm1=4=0c=R8&rxxRlck^ofiZabflxjxb| gocwmsceen$emygye^`ooZkbeVmnb"xnlhf-gvru'{kfSiaztc3?3;2a3\:$t~zPbmi\i`kXoldn~lz`r.emeqoqmkgl"co{iwg\fimXelgTkh` v`nj`+et|{%ym`Qkotva59>9n7X> xrv\fimXelgTkh`jr`vlv*aii}c}ioch.ocwmscXjeaTahcPgdl,rdjnl'ixx!}al]gkpre4;4?i6[?/yqw[gjlWdofSjkaescwkw)`fh~bzhlbg/lbplpbWkf`S`kb_fgm+sgkam$hy| r`o\`jssj5958h5Z0.zppZdkcVgnaRijndpbpjt(ogke{kmmf,meqoqmVhggRcjm^efj*pfd`n%o~z}/scn[air|k6?29k4U1-{wqYedbUfi`Qheogqeqiu'ndjxdxjble-jdrn~lUi`fQbel]dak)qieco"n}{r.pbiZbh}}h793:j;T2,|vrXjeaTahcPgdlfvdrhz&memygyecod*kgsaoTnaePmdo\c`h(~hfbh#m|ts-qehYcg|~i0;0;e:W3+}usWkf`S`kb_fgmawgsg{%lblzfvd`nc+hf|`|nSobd_lgn[bci'kgei lsup,vdkXlfn1914d9V4*~t|VhggRcjm^efj`tf|fx$kco{iwgaib(ii}c}iRlck^ofiZabf&|j`dj!crvq+wgjWme~xo27>7g8Q5){}Ui`fQbel]dakcui}ey#j`nthtffha)fh~bzhQmlj]nahY`mg%}magk.bqwv*tfeeed|V>R.scn*w)t;Vceey }al-gtwgj&mz2t4 }al4f?P6(pz~TnaePmdo\c`hbzh~d~"iaaukuagk`&gke{kPbmi\i`kXold$zlbfd/appw)uidfdc}U>]/pbi+t({:Ubbdz!r`o,`utfe'n{5u7!r`o5a>S7'qySobd_lgn[bcim{kc!hn`vjr`djo'djxdxj_cnh[hcjWnoe#{ocie,`wqt(zhggcb~T2\,qeh(u'z9Tecg{.scn+avuid$o|4v6.scng>STM[U]E^GMLD18RFE>3_CN[RZVPD18S@G43^OIn6Y]IUG\BLTT\j1\^DZJ_LMGAZGd3^XBXHQBOEG\F4b^c`VZye`Xjrrklj46gcl{k7;364aefqe9>902koho39?:8eabuj5:556okds`?558>3hno~o2>1?`8eabuj5;96=06;`fgvg:6:720mij}b=3=<>gcl{h7>364aefqf95902kohl34?:8eabuj5?546okds`?2;>3/37?fjli=1h`fl8;ekme969?2nbbl2>>69gmkg;:7=0hd`n<2<4?aoii5>5;6jfn`>6:2=cagk7:394dhlb828>3mcem1650?58`lhf41437iaztc>3:==cg|~i0<07;emvpg:5611ocxzm<2<;?air|k6?255kotva808?3me~xo29>99gkpre4>4j7iaztc>;>58?3me~xo27>99mcfdraen?7}{bb9wvdebWdofcw=7:vqefcXelgd~t"mlj]nahY`mgU}:R?#NNLF(KIIM=km7y|ncd]nahiuq%hggRcjm^efjZp1W8&poRokdsc\slbs`4;8 nQndepa[roc|a7:?!mPamelvlroe4;'oRowi^kg[roc|a7? nQnxh]phdpbW}s{i0>#c^c{mZr~xl7: nQmyug\wl|b50&hSnabmnl\gim:9%iThhhnumv\`drf59&hSig|acnf[rgufVhczRm`lm?3(fYcazki`hQxasl\fmpXzhdli0>#c^goegiui}cdbRjfr<-kkhc(p`kov"~}of-etbg(gzib`aa|cnrf+lvdg{oThd| tlr,[fa('%iTjlcflx?ptdtsig9'oRfns^c{mZoc59&hSeo|_dlb95*dWakxSh`m=1.`[mgtW`dainzjrs?3(fYoizUfi`Q`uurvpZtbozUj1="l_icp[hcjWf|xzPrdep[g;7$jUcm~Qbuy]lqqvr|Vxnk~Qn=1.`[mgtWdsSb{{ptv\v`atWk7; nQgar]qabebi4:'oRfns^pfcfce59&hSeo|_sqwe86+kVbjR||tc?2(fYoizUxckzjcb]jjussW{olRo20-a\lduX{flinmPotvsqqYumnyTn0>#c^kmmqYaaeoTblcj=om\gjcXn`fnSaanddf/gZoia}kTzlb20-a\mkosjV|j`0>#c^kmp`taijoTxt~j=1.`[iiflVceeyQiimg>4)eXelgTxt~j=0.`[hsWyc{iagae^qwebct59&hS}|fm^vzt`;6$jUyiljPddrwlZg:=0=? nQ}e`f\``vs`Vh6949;,b]qadbX`ndRo29-a\v`gcW~coxeQm=8.`[wusWyxbcg{y^c>G@*dW{yS}|foskw}Zd:KL&hS}{_u{sa8U^FJ&hS}{r`o\e86+kVxxxob_c?3(fYtadUhcabfshmm[fnbkb7J@A"l_tqf[gsmV}nm0>#c^wpaZd~|lU|io3?,b]vw`Ycmok~`yQkauc>5)eX}zoTinm20-a\qvcX{flinm20-a\s`gX`nd0?#c^uffZqnl}b6=!mPwskwaZbbx}bTm0;675.`[rtn|lUoi}zg_c?6=22+kV}yeykPmnff[d;PZ@^NSKG]SU.`[rtn|lUfcikPbFGp82.:?94>2g9~W61=9:21o;4>33f`e`<5l==87^lm:04`>5<6;;nhmh4=d5c6?V502833f`e`<5l=k27i?9e;295?7|[:31=>65c78277bdil09h99?;wV`b?6=93;1::u\38827=3;8>imne;0g026<,8826om4V016>7}rk90:7xm>:19~ f>=m2h::h4?:2296=<1?rB:>:5+d5822`=];80>w<95b;594>549'71<6>o1/?54>719j53b=831b=8850;9j501=831d=;l50;&`e?71i2dh57>4;n35=?6=,jk1=;o4nb;95>=h9?21<7*la;35e>hd13807b?97;29 fg=9?k0bn753:9l530=83.hm7?9a:l`=?2<3f;=97>5$bc953g=n9:n1<7*la;30g>hd13:07d?5$bc956em4nb;93>=n9=;1<7*la;30g>hd13207d?;0;29 fg=9:i0bn759:9j56`=83.hm7?5$bc956e=n9<>1<7*la;37e>hd13907d?:3;29 fg=9=k0bn754:9j504=83.hm7?;a:l`=?3<3`;>=7>5$bc951g=n9=i1<7*la;37e>hd13h07d?;7;29 fg=9=k0bn75c:9j537=83.hm7?90:l`=?6<3`;>j7>5$bc95364nb;91>=n9hd13<07d?:9;29 fg=9?:0bn757:9j50>=83.hm7?90:l`=?><3k;8=7>51;294~"c<3h0;66sm12094?7=83:p(i:513:8L4573A;9;6al7;29?xd6810;694?:1y'`1<112B:?=5G1358 2>=92c8>7>5;h10>5<>{e99=1<7:50;2x a2=>01C=>>4H004?!1?281b??4?::k07?6=3`9j6=44ob`94?=zjl:1<7=50;2x a2=jm1C=>>4H004?!1?2o1b:n4?::k5`?6=3fi>6=44}cff>5<4290;w)j;:cf8L4573A;9;6*88;d8m3e=831b:i4?::m`1?6=3thoo7>53;294~"c<3ho7E?<0:J262=#?10?7d8l:188m3b=831do84?::a`d<72:0;6=u+d58a`>N6;91C=?94$6:9b>o1k3:17d8k:188kf3=831vni650;194?6|,m>1ni5G1228L4403-=36k5f6b83>>o1l3:17bm::188ygb129086=4?{%f7>gb<@89;7E?=7:&4>id=3:17pl>2583>14=83:p(i:5cb9K566<@88<7W=>:`y6>3<6:3;8644n:069g?722m0v(<6=#?;087)9<:29'31<43-=>6>5+7780?!102:1/;44<;%5b>6=#?k087)9l:29'3a<43-=n6>5+7g80?!>72:1/4<4<;%:1>6=#0:087)6;:29'<0<43-2=6>5+8680?!>?2:1/444<;%:b>6=#0k087)6l:29'5+8g80?!?72:1/5<4<;%;1>6=#1:087)7;:29'=0<43-3=6>5+9680?!??2:1/544<;%;b>6=#1k087)7l:29'=a<43-3n6>5+9g80?!g72:1/m<4<;%c1>6=#i:087)o;:29'e0<43-k=6>5+a680?!g?2:1/m44<;%cb>6=#ik087)ol:29'ea<43-kn6>5+ag80?!d72:1/n<4<;%`1>6=#j:087)l;:29'f0<43-h=6>5+b680?!d?2:1/oh4<0:&a=?4<,kk1>6*>2e826f=#l8097d=::188m60=831b::4?::k5>4?:%ab>4?!ef2830bn752:9j64<72-ij6<74nb;97>=n:90;6)mn:0;8jf?=<21b=k4?:%ab>4?!ef2830bn756:9j5a<72-ij6<74nb;93>=n9j0;6)mn:0;8jf?=021b=o4?:%ab>4?!ef2830bn75a:9j63<72-ij6?;4nb;94>=n:o0;6)mn:378jf?=921b>h4?:%ab>7365f2e83>!ef2;?0bn753:9j6f<72-ij6?;4nb;90>=n:k0;6)mn:378jf?==21b>l4?:%ab>73!ef2;?0bn757:9j6=<72-ij6?;4nb;9<>=n:>0;6)mn:378jf?=121b>94?:%ab>73!ef2=80bn750:9j04<72-ij69<4nb;95>=n<90;6)mn:508jf?=:21b?k4?:%ab>14!ef2=80bn754:9j7a<72-ij69<4nb;91>=n;j0;6)mn:508jf?=>21b?o4?:%ab>14!ef2=h0bn750:9j0d<72-ij69l4nb;95>=n<00;6)mn:5`8jf?=:21b854?:%ab>1d!ef2=h0bn754:9j03<72-ij69l4nb;91>=n<<0;6)mn:5`8jf?=>21b894?:%ab>1d!ef2=n0bn750:9j15<72-ij69h4nb;94>=h=00;6)mn:4:8jf?=821d9:4?:%ab>0>!ef2<20bn752:9l10<72-ij6864nb;97>=h==0;6)mn:4:8jf?=<21d9>4?:%ab>0>!ef2<20bn756:9l14<72-ij6864nb;93>=h>=0;6)mn:718jf?=821d:?4?:%ab>37!ef2?;0bn751:9l1c<72-ij6;?4nb;96>=h=l0;6)mn:738jf?=;21d9i4?:%ab>37!ef2?;0bn755:9l1g<72-ij6;?4nb;92>=h=h0;6)mn:738jf?=?21d:;4?:%ab>335<3:3:1:5U308b0<12881=>46:`820?e=9<0o6p*>2d826f=#l9097)9?:29'34<43-=96>5+7280?!132:1/;84<;%55>6=#?>087)96:29'3d<43-=i6>5+7b80?!1c2:1/;h4<;%5e>6=#09087)6>:29'<7<43-286>5+8580?!>22:1/4;4<;%:4>6=#01087)66:29'5+8b80?!>c2:1/4h4<;%:e>6=#19087)7>:29'=7<43-386>5+9580?!?22:1/5;4<;%;4>6=#11087)76:29'=d<43-3i6>5+9b80?!?c2:1/5h4<;%;e>6=#i9087)o>:29'e7<43-k86>5+a580?!g22:1/m;4<;%c4>6=#i1087)o6:29'ed<43-ki6>5+ab80?!gc2:1/mh4<;%ce>6=#j9087)l>:29'f7<43-h86>5+b580?!d22:1/n;4<;%`4>6=#j1087)mj:228 g?=:2.im7<4$00g>44d3-n:6?5f3483>>o4>3:17d88:188m3>=831bh?4?::kg7?6=3`;9m7>5;h31f?6=3`;j6=4+c`82=>hd13:07d<<:18'gd<612dh57?4;h01>5<#kh0:56`l9;08?l46290/ol4>9:l`=?5<3`8;6=4+c`82=>hd13>07d?i:18'gd<612dh57;4;h3f>5<#kh0:56`l9;48?l7c290/ol4>9:l`=?1<3`;h6=4+c`82=>hd13207d?m:18'gd<612dh5774;h3;>5<#kh0:56`l9;c8?l41290/ol4=5:l`=?6<3`8m6=4+c`811>hd13;07d5<#kh0996`l9;18?l4d290/ol4=5:l`=?2<3`8i6=4+c`811>hd13?07d5<#kh0996`l9;58?l4?290/ol4=5:l`=?><3`8<6=4+c`811>hd13307d<;:18'gd<5=2dh57o4;h60>5<#kh0?>6`l9;28?l26290/ol4;2:l`=?7<3`>;6=4+c`876>hd13807d=i:18'gd<3:2dh57=4;h1f>5<#kh0?>6`l9;68?l5c290/ol4;2:l`=?3<3`9h6=4+c`876>hd13<07d=m:18'gd<3:2dh5794;h6`>5<#kh0?n6`l9;28?l2f290/ol4;b:l`=?7<3`>26=4+c`87f>hd13807d:7:18'gd<3j2dh57=4;h64>5<#kh0?n6`l9;68?l21290/ol4;b:l`=?3<3`>>6=4+c`87f>hd13<07d:;:18'gd<3j2dh5794;h6f>5<#kh0?h6`l9;28?l37290/ol4;f:l`=?6<3f?26=4+c`86<>hd13:07b;8:18'gd<202dh57?4;n75>5<#kh0>46`l9;08?j32290/ol4:8:l`=?5<3f??6=4+c`86<>hd13>07b;<:18'gd<202dh57;4;n71>5<#kh0>46`l9;48?j36290/ol4:8:l`=?1<3fhd13:07b8=:18'gd<192dh57>4;n43>5<#kh0==6`l9;38?j3a290/ol491:l`=?4<3f?n6=4+c`855>hd13907b;k:18'gd<192dh57:4;n7`>5<#kh0==6`l9;78?j3e290/ol491:l`=?0<3f?j6=4+c`855>hd13=07b89:18'gd<1=2dh57>4;|`263<72=81<7>t$e69gf=O9::0D<<8;[12>d}22?0:>7?<:88b>42=k3;>6i4r$00f>44d3-n;6?5+7180?!162:1/;?4<;%50>6=#?=087)9::29'33<43-=<6>5+7880?!1f2:1/;o4<;%5`>6=#?m087)9j:29'3c<43-2;6>5+8080?!>52:1/4>4<;%:7>6=#0<087)69:29'<2<43-236>5+8880?!>f2:1/4o4<;%:`>6=#0m087)6j:29'5+9080?!?52:1/5>4<;%;7>6=#1<087)79:29'=2<43-336>5+9880?!?f2:1/5o4<;%;`>6=#1m087)7j:29'=c<43-k;6>5+a080?!g52:1/m>4<;%c7>6=#i<087)o9:29'e2<43-k36>5+a880?!gf2:1/mo4<;%c`>6=#im087)oj:29'ec<43-h;6>5+b080?!d52:1/n>4<;%`7>6=#j<087)l9:29'f2<43-h36>5+cd804>"e1380(oo52:&26a<6:j1/h<4=;h16>5<>o103:17dj=:188ma5=831b=?o50;9j57d=831b=l4?:%ab>4?!ef2830bn751:9j67<72-ij6<74nb;96>=n:80;6)mn:0;8jf?=;21b>=4?:%ab>4?!ef2830bn755:9j5`<72-ij6<74nb;92>=n9m0;6)mn:0;8jf?=?21b=n4?:%ab>4?!ef2830bn759:9j5=<72-ij6<74nb;9e>=n:?0;6)mn:378jf?=821b>k4?:%ab>73!ef2;?0bn752:9j6a<72-ij6?;4nb;97>=n:j0;6)mn:378jf?=<21b>o4?:%ab>73!ef2;?0bn756:9j6<<72-ij6?;4nb;93>=n:10;6)mn:378jf?=021b>:4?:%ab>73!ef2;?0bn75a:9j06<72-ij69<4nb;94>=n<80;6)mn:508jf?=921b8=4?:%ab>1465f3g83>!ef2=80bn753:9j7`<72-ij69<4nb;90>=n;m0;6)mn:508jf?==21b?n4?:%ab>14!ef2=80bn757:9j0f<72-ij69l4nb;94>=n1d65f4983>!ef2=h0bn753:9j02<72-ij69l4nb;90>=n1d!ef2=h0bn757:9j0`<72-ij69j4nb;94>=n=90;6)mn:5d8jf?=821d944?:%ab>0>!ef2<20bn751:9l13<72-ij6864nb;96>=h=<0;6)mn:4:8jf?=;21d994?:%ab>0>!ef2<20bn755:9l17<72-ij6864nb;92>=h=80;6)mn:4:8jf?=?21d:94?:%ab>35!ef2?;0bn750:9l25<72-ij6;?4nb;95>=h=o0;6)mn:738jf?=:21d9h4?:%ab>37!ef2?;0bn754:9l1f<72-ij6;?4nb;91>=h=k0;6)mn:738jf?=>21d9l4?:%ab>37!ef2??0bn750:9~f465290>6=4?{%f7>gc<@89;7E?=7:&4l0;66g9f;29?je22900qo??3;291?6=8r.o87lj;I304>N6:>1/;54>0:k5g?6=3`o0;66al5;29?xd68=0;694?:1y'`16=44}cdf>5<2290;w)j;:cg8L4573A;9;6*88;32?l0d2900e;j50;9j2`<722c=j7>5;na6>5<"003;;7d8l:188m3b=831b:h4?::k5b?6=3fi>6=44}c334?6=<3:1:5f6b83>>o1l3:17dmk:188kf3=831vnko50;794?6|,m>1nh5G1228L4403-=36m0;66g9e;29?l0a2900cn;50;9~fcd=83?1<7>t$e69f`=O9::0D<<8;%5;>46>o1m3:17d8i:188kf3=831vnkm50;694?6|,m>1nk5G1228L4403`3:197>50z&g0?db3A;8<6F>269'3=<692c=o7>5;h4g>5<>id=3:17pli7;291?6=8r.o87lj;I304>N6:>1/;54>0:k5g?6=3`o0;66al5;29?xda03:187>50z&g0?da3A;8<6F>269j2f<722c=h7>5;hag>5<>4H004?!1?28:0e;m50;9j2a<722c=i7>5;h4e>5<55;294~"c<3hn7E?<0:J262=#?10:=6g9c;29?l0c2900e;k50;9j2c<722eh97>5;|`fb?6==3:1:5+79824>o1k3:17d8k:188m3c=831b:k4?::m`1?6=3thm<7>54;294~"c<3hm7E?<0:J262=n>j0;66g9d;29?lec2900cn;50;9~f`g=83?1<7>t$e69f`=O9::0D<<8;%5;>47>o1m3:17d8i:188kf3=831vnhl50;794?6|,m>1nh5G1228L4403-=36<>4i7a94?=n>m0;66g9e;29?l0a2900cn;50;9~f`e=83>1<7>t$e69fc=O9::0D<<8;h4`>5<>id=3:17plj6;291?6=8r.o87lj;I304>N6:>1/;54>1:k5g?6=3`o0;66al5;29?xdb?3:197>50z&g0?db3A;8<6F>269'3=<682c=o7>5;h4g>5<>id=3:17plj8;290?6=8r.o87li;I304>N6:>1b:n4?::k5`?6=3`io6=44ob794?=zjl81<7;50;2x a2=jl1C=>>4H004?!1?28;0e;m50;9j2a<722c=i7>5;h4e>5<1<7:50;2x a2=jo1C=>>4H004?l0d2900e;j50;9jga<722eh97>5;|q`6?6=:;q6=>?56`9>572=l;16=?:513`894432=i01<<;:5c894432=301<<;:5:894432==01<<;:54894432=?01<<;:56894432<:01<<::e089442288i70?=5;6`?875=3>j70?=5;6:?875=3>370?=5;64?875=3>=70?=5;66?875=3>?70?=5;73?875>3n970?=6;31f>;6:?0?o63>2787e>;6:?0?563>2787<>;6:?0?;63>27872>;6:?0?963>27870>;6:?0><6s|c283>6}:9:81o:52115976=:9921?>5rse794?4|5m<1o852136922=z{m=1<71:55rsef94?4|5mo1o85213792==z{ml1<7{tm;0;6?u2e28`1>;b<33i>70k7:7f8yvc12909w0k8:b789`>=>j1vh750;0x9`g=k<16in49d:pad<72;q6io4l5:?fg?0d3tynh7>52z?fa?e234l;6;j4}rgf>5<5s4om6n;4=g292f=z{o;1<77}:n:0h963i4;4`?xua=3:1>v3i6;a6?8`?2?n0q~h9:1818`02j?01k656b9~wc?=838p1ko5c49>bf<1l2wxjl4?:3y>bg52z?eb?e234;;<78l;|q244<72;q6==<5c49>552=>m1v<>=:181877;3i>70??4;4`?xu68<0;6<=t=024>fd<58:96;m4=020>3e<5oo1:n52fg85g>;ai3j16j:49c:?e6?0d34l86;m4=dg92f=:mo0=o63ja;4`?8ce2?i01h856b9>a2<1k27n>78l;3e512y>55>=kk16==<56e9>555=>m16jh49d:?eb?0c34lj6;j4=g`92a=:n?0=h63i7;4g?8`52?n01k=56e9>a`<1l27nj78k;3b<5lh1:i52e785`>;b?3m1v<>6:180875=3?j70h9:7d89c1=>o1v<>n:180875=3?i70hn:7d89cd=>o1v<>m:180875=3?h70hj:7d89c`=>o1v<>l:180875=3?o70??2;4e?877;30e83>6}:9;?19h52e385b>;b;30d83>6}:9;?19k52e785b>;b?30g83>6}:9;?1:=52e`85b>;bj31183>6}:9;?1:?52ed85b>;bn31083>6}:9;?1:;52f385b>;a;31383>6}:9;<19l52f785a>;a?31283>6}:9;<19o52f`85a>;aj31583>6}:9;<19n52fd85a>;an31483>6}:9;<19i5211092`=:9991:h5rs035>5<4s4;9:7;j;3c<5l91:h5rs034>5<4s4;9:7;i;3c<5l=1:h5rs03;>5<4s4;9:78?;3c<5lh1:h5rs03:>5<4s4;9:78=;3c<5ll1:h5rs03b>5<4s4;9:789;3c<5o91:h5rs03a>5<5s4;987;n;fb52z?261<2j27mo7mk;|q25a<72;q6=?:55b9>556=km1v9492:?e4?ec3ty:>>4?:3y>572=>?16j94ld:p56?=83>pR<=6;<310?7?34;997?7;<312?7?3ty:?l4?:5y]56g<588?64g<588=6;c033e9>`d<1l27o478l;3b54z\27`=:9;>1=o5213795g=:9;<1=o5rs01e>5<3sW;8j63>2582g>;6:<0:o63>2782g>{t9=:1<7:t^063?875<3;o70?=5;3g?875>3;o7p}>4083>1}Y9=;01<<;:0g8944228o01<<9:0g8yv73:3:18vP>439>572=9o16=?;51g9>570=9o1v<:<:187[73;27:>94=0:?260<5827:>;4=0:p512=83>pR<:;;<310?4634;997<>;<312?463ty:884?:5y]513<588?6?<4=006>74<588=6?<4}r372?6=>52134966=z{8><6=4;{_373>;6:=09863>24810>;6:?0986s|15:94?2|V8>370?=4;05?875=38=70?=6;05?xu6<00;68uQ15;894602:k01h>56b9>``<1l27oo78l;|q20g<726g<5l:1:i52dd85g>;ck34b83>1}Y9=i01<<;:35894422;=01<<9:358yv73l3:18vP>4e9>572=:116=?;5299>570=:11v<:j:187[73m27:>94=9:?260<5127:>;4=9:p51`=83>pR<:i;<310?4f34;9977d<588=6?l4}r365?6=n5213496f=z{8?96=4;{_366>;6:=09h63>2481`>;6:?09h6s|14194?2|V8?870?=4;0f?875=38n70?=6;0f?xu6==0;69uQ146894432;l01<<::3d894412;l0q~?:6;290~X6=?16=?:5349>573=;<16=?85349~w430290=wS?:7:?242<4:27:<54<2:?261<4>27:>84<6:?263<4>2wx=8650;6xZ43?34;987=m;<311?5e34;9:7=m;|q21<<72=qU=874=007>6e<588>6>m4=005>6em7>54z\21d=:9;>1?i5213797a=:9;<1?i5rs07a>5<3sW;>n63>2580a>;6:<08i63>2780a>{t939m7p}>5e83>1}Y95d9>572=<816=?;5409>570=<81v<;i:187[72n27:>94;3:?260<3;27:>;4;3:p537=83>pR<8>;<310?2b34;997:j;<312?2b3ty::?4?:3y]534<5o21o85rs040>5<5sW;=?63ic;a6?xu6>=0;6?uQ176894672j?0q~?95;296~X6><16==:5c49~w4012909wS?96:?f0?e23ty:::4?:3y]531<5l21o85rs04;>5<5sW;=463jc;a6?xu6>00;6?uQ17;89c6=k<1v<8m:181[71j27m87m:;|q22a<72=qU=;j4=007>a5<588>6i=4=005>a57>54z\237=:9;>1=?o4=006>44f34;9:7?=a:~j4e4290:wE?=7:m5f2=83;pD<<8;|l2g0<728qC=?94}o3`2?6=9rB:>:5rn0a4>5<6sA;9;6sa1b:94?7|@88<7p`>c883>4}O9;=0qc?la;295~N6:>1vb51zJ262=zf8im6=4>{I313>{i9m:1<7?tH004?xh6l80;6269~j4b4290:wE?=7:m5a2=83;pD<<8;|l2`0<728qC=?94}o3g2?6=9rB:>:5rn0f4>5<6sA;9;6sa1e:94?7|@88<7p`>d883>4}O9;=0qc?ka;295~N6:>1vb51zJ262=zf8nm6=4>{I313>{i9l:1<7?tH004?xh6m80;6269~j4c4290:wE?=7:m5`2=83;pD<<8;|l2a0<728qC=?94}o3f2?6=9rB:>:5rn0g4>5<6sA;9;6sa1d:94?7|@88<7p`>e883>4}O9;=0qc?ja;295~N6:>1vb51zJ262=zf8om6=4>{I313>{i9o:1<7?tH004?xh6n80;6269~j4`4290:wE?=7:m5c2=83;pD<<8;|l2b0<728qC=?94}o3e2?6=9rB:>:5rn0d4>5<6sA;9;6sa1g:94?7|@88<7p`>f883>4}O9;=0qc?ia;295~N6:>1vb51zJ262=zf8lm6=4>{I313>{i:9:1<7?tH004?xh5880;6269~j764290:wE?=7:m652=83;pD<<8;|l140<728qC=?94}o032?6=9rB:>:5rn324>5<6sA;9;6sa21:94?7|@88<7p`=0883>4}O9;=0qc1vb?>m:182M75?2we>=m50;3xL4403td951zJ262=zf;:m6=4>{I313>{i:8:1<7?tH004?xh5980;6269~j774290:wE?=7:m642=83;pD<<8;|l150<728qC=?94}o022?6=9rB:>:5rn334>5<6sA;9;6sa20:94?7|@88<7p`=1883>4}O9;=0qc<>a;295~N6:>1vb??m:182M75?2we>51zJ262=zf;;m6=4>{I313>{i:;:1<7?tH004?xh5:80;6269~j744290:wE?=7:m672=83;pD<<8;|l160<728qC=?94}o012?6=9rB:>:5rn304>5<6sA;9;6sa23:94?7|@88<7p`=2883>4}O9;=0qpsr@AAx6<7=m?hj8}ABA5{GHYqvLM \ No newline at end of file diff --git a/ipcore_dir/trace_memory.vhd b/ipcore_dir/trace_memory.vhd new file mode 100644 index 0000000..9356347 --- /dev/null +++ b/ipcore_dir/trace_memory.vhd @@ -0,0 +1,149 @@ +-------------------------------------------------------------------------------- +-- This file is owned and controlled by Xilinx and must be used -- +-- solely for design, simulation, implementation and creation of -- +-- design files limited to Xilinx devices or technologies. Use -- +-- with non-Xilinx devices or technologies is expressly prohibited -- +-- and immediately terminates your license. -- +-- -- +-- XILINX IS PROVIDING THIS DESIGN, CODE, OR INFORMATION "AS IS" -- +-- SOLELY FOR USE IN DEVELOPING PROGRAMS AND SOLUTIONS FOR -- +-- XILINX DEVICES. BY PROVIDING THIS DESIGN, CODE, OR INFORMATION -- +-- AS ONE POSSIBLE IMPLEMENTATION OF THIS FEATURE, APPLICATION -- +-- OR STANDARD, XILINX IS MAKING NO REPRESENTATION THAT THIS -- +-- IMPLEMENTATION IS FREE FROM ANY CLAIMS OF INFRINGEMENT, -- +-- AND YOU ARE RESPONSIBLE FOR OBTAINING ANY RIGHTS YOU MAY REQUIRE -- +-- FOR YOUR IMPLEMENTATION. XILINX EXPRESSLY DISCLAIMS ANY -- +-- WARRANTY WHATSOEVER WITH RESPECT TO THE ADEQUACY OF THE -- +-- IMPLEMENTATION, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OR -- +-- REPRESENTATIONS THAT THIS IMPLEMENTATION IS FREE FROM CLAIMS OF -- +-- INFRINGEMENT, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS -- +-- FOR A PARTICULAR PURPOSE. -- +-- -- +-- Xilinx products are not intended for use in life support -- +-- appliances, devices, or systems. Use in such applications are -- +-- expressly prohibited. -- +-- -- +-- (c) Copyright 1995-2011 Xilinx, Inc. -- +-- All rights reserved. -- +-------------------------------------------------------------------------------- +-- You must compile the wrapper file trace_memory.vhd when simulating +-- the core, trace_memory. When compiling the wrapper file, be sure to +-- reference the XilinxCoreLib VHDL simulation library. For detailed +-- instructions, please refer to the "CORE Generator Help". + +-- The synthesis directives "translate_off/translate_on" specified +-- below are supported by Xilinx, Mentor Graphics and Synplicity +-- synthesis tools. Ensure they are correct for your synthesis tool(s). + +LIBRARY ieee; +USE ieee.std_logic_1164.ALL; +-- synthesis translate_off +LIBRARY XilinxCoreLib; +-- synthesis translate_on +ENTITY trace_memory IS + PORT ( + clka : IN STD_LOGIC; + wea : IN STD_LOGIC_VECTOR(0 DOWNTO 0); + addra : IN STD_LOGIC_VECTOR(12 DOWNTO 0); + dina : IN STD_LOGIC_VECTOR(8 DOWNTO 0); + clkb : IN STD_LOGIC; + rstb : IN STD_LOGIC; + addrb : IN STD_LOGIC_VECTOR(12 DOWNTO 0); + doutb : OUT STD_LOGIC_VECTOR(8 DOWNTO 0) + ); +END trace_memory; + +ARCHITECTURE trace_memory_a OF trace_memory IS +-- synthesis translate_off +COMPONENT wrapped_trace_memory + PORT ( + clka : IN STD_LOGIC; + wea : IN STD_LOGIC_VECTOR(0 DOWNTO 0); + addra : IN STD_LOGIC_VECTOR(12 DOWNTO 0); + dina : IN STD_LOGIC_VECTOR(8 DOWNTO 0); + clkb : IN STD_LOGIC; + rstb : IN STD_LOGIC; + addrb : IN STD_LOGIC_VECTOR(12 DOWNTO 0); + doutb : OUT STD_LOGIC_VECTOR(8 DOWNTO 0) + ); +END COMPONENT; + +-- Configuration specification + FOR ALL : wrapped_trace_memory USE ENTITY XilinxCoreLib.blk_mem_gen_v6_1(behavioral) + GENERIC MAP ( + c_addra_width => 13, + c_addrb_width => 13, + c_algorithm => 1, + c_axi_id_width => 4, + c_axi_slave_type => 0, + c_axi_type => 1, + c_byte_size => 9, + c_common_clk => 1, + c_default_data => "0", + c_disable_warn_bhv_coll => 0, + c_disable_warn_bhv_range => 0, + c_family => "spartan3", + c_has_axi_id => 0, + c_has_ena => 0, + c_has_enb => 0, + c_has_injecterr => 0, + c_has_mem_output_regs_a => 0, + c_has_mem_output_regs_b => 0, + c_has_mux_output_regs_a => 0, + c_has_mux_output_regs_b => 0, + c_has_regcea => 0, + c_has_regceb => 0, + c_has_rsta => 0, + c_has_rstb => 1, + c_has_softecc_input_regs_a => 0, + c_has_softecc_output_regs_b => 0, + c_init_file_name => "no_coe_file_loaded", + c_inita_val => "0", + c_initb_val => "0", + c_interface_type => 0, + c_load_init_file => 0, + c_mem_type => 1, + c_mux_pipeline_stages => 0, + c_prim_type => 1, + c_read_depth_a => 5974, + c_read_depth_b => 5974, + c_read_width_a => 9, + c_read_width_b => 9, + c_rst_priority_a => "CE", + c_rst_priority_b => "CE", + c_rst_type => "SYNC", + c_rstram_a => 0, + c_rstram_b => 0, + c_sim_collision_check => "ALL", + c_use_byte_wea => 0, + c_use_byte_web => 0, + c_use_default_data => 1, + c_use_ecc => 0, + c_use_softecc => 0, + c_wea_width => 1, + c_web_width => 1, + c_write_depth_a => 5974, + c_write_depth_b => 5974, + c_write_mode_a => "WRITE_FIRST", + c_write_mode_b => "WRITE_FIRST", + c_write_width_a => 9, + c_write_width_b => 9, + c_xdevicefamily => "spartan3e" + ); +-- synthesis translate_on +BEGIN +-- synthesis translate_off +U0 : wrapped_trace_memory + PORT MAP ( + clka => clka, + wea => wea, + addra => addra, + dina => dina, + clkb => clkb, + rstb => rstb, + addrb => addrb, + doutb => doutb + ); +-- synthesis translate_on + +END trace_memory_a; diff --git a/ipcore_dir/trace_memory.vho b/ipcore_dir/trace_memory.vho new file mode 100644 index 0000000..ec1f1d3 --- /dev/null +++ b/ipcore_dir/trace_memory.vho @@ -0,0 +1,74 @@ +-------------------------------------------------------------------------------- +-- This file is owned and controlled by Xilinx and must be used -- +-- solely for design, simulation, implementation and creation of -- +-- design files limited to Xilinx devices or technologies. Use -- +-- with non-Xilinx devices or technologies is expressly prohibited -- +-- and immediately terminates your license. -- +-- -- +-- XILINX IS PROVIDING THIS DESIGN, CODE, OR INFORMATION "AS IS" -- +-- SOLELY FOR USE IN DEVELOPING PROGRAMS AND SOLUTIONS FOR -- +-- XILINX DEVICES. BY PROVIDING THIS DESIGN, CODE, OR INFORMATION -- +-- AS ONE POSSIBLE IMPLEMENTATION OF THIS FEATURE, APPLICATION -- +-- OR STANDARD, XILINX IS MAKING NO REPRESENTATION THAT THIS -- +-- IMPLEMENTATION IS FREE FROM ANY CLAIMS OF INFRINGEMENT, -- +-- AND YOU ARE RESPONSIBLE FOR OBTAINING ANY RIGHTS YOU MAY REQUIRE -- +-- FOR YOUR IMPLEMENTATION. XILINX EXPRESSLY DISCLAIMS ANY -- +-- WARRANTY WHATSOEVER WITH RESPECT TO THE ADEQUACY OF THE -- +-- IMPLEMENTATION, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OR -- +-- REPRESENTATIONS THAT THIS IMPLEMENTATION IS FREE FROM CLAIMS OF -- +-- INFRINGEMENT, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS -- +-- FOR A PARTICULAR PURPOSE. -- +-- -- +-- Xilinx products are not intended for use in life support -- +-- appliances, devices, or systems. Use in such applications are -- +-- expressly prohibited. -- +-- -- +-- (c) Copyright 1995-2011 Xilinx, Inc. -- +-- All rights reserved. -- +-------------------------------------------------------------------------------- + +-- The Xilinx LogiCORE IP Block Memory Generator replaces the Dual Port Block Memory and Single Port Block Memory LogiCOREs, but is not a direct drop-in replacement. It should be used in all new Xilinx designs. The core supports RAM and ROM functions over a wide range of widths and depths. Use this core to generate block memories with symmetric or asymmetric read and write port widths, as well as cores which can perform simultaneous write operations to separate locations, and simultaneous read operations from the same location. For more information on differences in interface and feature support between this core and the Dual Port Block Memory and Single Port Block Memory LogiCOREs, please consult the data sheet. + +-- Interfaces: +-- AXI4_SLAVE_S_AXI +-- AXILite_SLAVE_S_AXI + +-- The following code must appear in the VHDL architecture header: + +------------- Begin Cut here for COMPONENT Declaration ------ COMP_TAG +COMPONENT trace_memory + PORT ( + clka : IN STD_LOGIC; + wea : IN STD_LOGIC_VECTOR(0 DOWNTO 0); + addra : IN STD_LOGIC_VECTOR(12 DOWNTO 0); + dina : IN STD_LOGIC_VECTOR(8 DOWNTO 0); + clkb : IN STD_LOGIC; + rstb : IN STD_LOGIC; + addrb : IN STD_LOGIC_VECTOR(12 DOWNTO 0); + doutb : OUT STD_LOGIC_VECTOR(8 DOWNTO 0) + ); +END COMPONENT; +-- COMP_TAG_END ------ End COMPONENT Declaration ------------ + +-- The following code must appear in the VHDL architecture +-- body. Substitute your own instance name and net names. + +------------- Begin Cut here for INSTANTIATION Template ----- INST_TAG +your_instance_name : trace_memory + PORT MAP ( + clka => clka, + wea => wea, + addra => addra, + dina => dina, + clkb => clkb, + rstb => rstb, + addrb => addrb, + doutb => doutb + ); +-- INST_TAG_END ------ End INSTANTIATION Template ------------ + +-- You must compile the wrapper file trace_memory.vhd when simulating +-- the core, trace_memory. When compiling the wrapper file, be sure to +-- reference the XilinxCoreLib VHDL simulation library. For detailed +-- instructions, please refer to the "CORE Generator Help". + diff --git a/ipcore_dir/trace_memory.xco b/ipcore_dir/trace_memory.xco new file mode 100644 index 0000000..a4354a7 --- /dev/null +++ b/ipcore_dir/trace_memory.xco @@ -0,0 +1,101 @@ +############################################################## +# +# Xilinx Core Generator version 13.1 +# Date: Tue May 10 18:53:57 2011 +# +############################################################## +# +# This file contains the customisation parameters for a +# Xilinx CORE Generator IP GUI. It is strongly recommended +# that you do not manually alter this file as it may cause +# unexpected and unsupported behavior. +# +############################################################## +# +# BEGIN Project Options +SET addpads = false +SET asysymbol = true +SET busformat = BusFormatAngleBracketNotRipped +SET createndf = false +SET designentry = VHDL +SET device = xc3s100e +SET devicefamily = spartan3e +SET flowvendor = Other +SET formalverification = false +SET foundationsym = false +SET implementationfiletype = Ngc +SET package = cp132 +SET removerpms = false +SET simulationfiles = Behavioral +SET speedgrade = -5 +SET verilogsim = false +SET vhdlsim = true +# END Project Options +# BEGIN Select +SELECT Block_Memory_Generator xilinx.com:ip:blk_mem_gen:6.1 +# END Select +# BEGIN Parameters +CSET additional_inputs_for_power_estimation=false +CSET algorithm=Minimum_Area +CSET assume_synchronous_clk=true +CSET axi_id_width=4 +CSET axi_slave_type=Memory_Slave +CSET axi_type=AXI4_Full +CSET byte_size=9 +CSET coe_file=no_coe_file_loaded +CSET collision_warnings=ALL +CSET component_name=trace_memory +CSET disable_collision_warnings=false +CSET disable_out_of_range_warnings=false +CSET ecc=false +CSET ecctype=No_ECC +CSET enable_a=Always_Enabled +CSET enable_b=Always_Enabled +CSET error_injection_type=Single_Bit_Error_Injection +CSET fill_remaining_memory_locations=true +CSET interface_type=Native +CSET load_init_file=false +CSET memory_type=Simple_Dual_Port_RAM +CSET operating_mode_a=WRITE_FIRST +CSET operating_mode_b=WRITE_FIRST +CSET output_reset_value_a=0 +CSET output_reset_value_b=0 +CSET pipeline_stages=0 +CSET port_a_clock=100 +CSET port_a_enable_rate=100 +CSET port_a_write_rate=50 +CSET port_b_clock=100 +CSET port_b_enable_rate=100 +CSET port_b_write_rate=0 +CSET primitive=8kx2 +CSET read_width_a=9 +CSET read_width_b=9 +CSET register_porta_input_of_softecc=false +CSET register_porta_output_of_memory_core=false +CSET register_porta_output_of_memory_primitives=false +CSET register_portb_output_of_memory_core=false +CSET register_portb_output_of_memory_primitives=false +CSET register_portb_output_of_softecc=false +CSET remaining_memory_locations=0 +CSET reset_memory_latch_a=false +CSET reset_memory_latch_b=false +CSET reset_priority_a=CE +CSET reset_priority_b=CE +CSET reset_type=SYNC +CSET softecc=false +CSET use_axi_id=false +CSET use_byte_write_enable=false +CSET use_error_injection_pins=false +CSET use_regcea_pin=false +CSET use_regceb_pin=false +CSET use_rsta_pin=false +CSET use_rstb_pin=true +CSET write_depth_a=5974 +CSET write_width_a=9 +CSET write_width_b=9 +# END Parameters +# BEGIN Extra information +MISC pkg_timestamp=2011-02-03T22:20:43.000Z +# END Extra information +GENERATE +# CRC: 11dcdb2a diff --git a/ipcore_dir/trace_memory.xise b/ipcore_dir/trace_memory.xise new file mode 100644 index 0000000..c8ad50e --- /dev/null +++ b/ipcore_dir/trace_memory.xise @@ -0,0 +1,72 @@ + + + +
+ + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
diff --git a/ipcore_dir/trace_memory_flist.txt b/ipcore_dir/trace_memory_flist.txt new file mode 100644 index 0000000..1cbb4bb --- /dev/null +++ b/ipcore_dir/trace_memory_flist.txt @@ -0,0 +1,13 @@ +# Output products list for +_xmsgs/pn_parser.xmsgs +blk_mem_gen_ds512.pdf +blk_mem_gen_readme.txt +trace_memory.asy +trace_memory.gise +trace_memory.ngc +trace_memory.vhd +trace_memory.vho +trace_memory.xco +trace_memory.xise +trace_memory_flist.txt +trace_memory_xmdf.tcl diff --git a/ipcore_dir/trace_memory_xmdf.tcl b/ipcore_dir/trace_memory_xmdf.tcl new file mode 100644 index 0000000..3e42dbd --- /dev/null +++ b/ipcore_dir/trace_memory_xmdf.tcl @@ -0,0 +1,76 @@ +# The package naming convention is _xmdf +package provide trace_memory_xmdf 1.0 + +# This includes some utilities that support common XMDF operations +package require utilities_xmdf + +# Define a namespace for this package. The name of the name space +# is _xmdf +namespace eval ::trace_memory_xmdf { +# Use this to define any statics +} + +# Function called by client to rebuild the params and port arrays +# Optional when the use context does not require the param or ports +# arrays to be available. +proc ::trace_memory_xmdf::xmdfInit { instance } { +# Variable containg name of library into which module is compiled +# Recommendation: +# Required +utilities_xmdf::xmdfSetData $instance Module Attributes Name trace_memory +} +# ::trace_memory_xmdf::xmdfInit + +# Function called by client to fill in all the xmdf* data variables +# based on the current settings of the parameters +proc ::trace_memory_xmdf::xmdfApplyParams { instance } { + +set fcount 0 +# Array containing libraries that are assumed to exist +# Examples include unisim and xilinxcorelib +# Optional +# In this example, we assume that the unisim library will +# be magically +# available to the simulation and synthesis tool +utilities_xmdf::xmdfSetData $instance FileSet $fcount type logical_library +utilities_xmdf::xmdfSetData $instance FileSet $fcount logical_library unisim +incr fcount + +utilities_xmdf::xmdfSetData $instance FileSet $fcount relative_path blk_mem_gen_ds512.pdf +utilities_xmdf::xmdfSetData $instance FileSet $fcount type AnyView +incr fcount + +utilities_xmdf::xmdfSetData $instance FileSet $fcount relative_path blk_mem_gen_readme.txt +utilities_xmdf::xmdfSetData $instance FileSet $fcount type text +incr fcount + +utilities_xmdf::xmdfSetData $instance FileSet $fcount relative_path trace_memory.asy +utilities_xmdf::xmdfSetData $instance FileSet $fcount type asy +incr fcount + +utilities_xmdf::xmdfSetData $instance FileSet $fcount relative_path trace_memory.ngc +utilities_xmdf::xmdfSetData $instance FileSet $fcount type ngc +incr fcount + +utilities_xmdf::xmdfSetData $instance FileSet $fcount relative_path trace_memory.vhd +utilities_xmdf::xmdfSetData $instance FileSet $fcount type vhdl +incr fcount + +utilities_xmdf::xmdfSetData $instance FileSet $fcount relative_path trace_memory.vho +utilities_xmdf::xmdfSetData $instance FileSet $fcount type vhdl_template +incr fcount + +utilities_xmdf::xmdfSetData $instance FileSet $fcount relative_path trace_memory.xco +utilities_xmdf::xmdfSetData $instance FileSet $fcount type coregen_ip +incr fcount + +utilities_xmdf::xmdfSetData $instance FileSet $fcount relative_path trace_memory_xmdf.tcl +utilities_xmdf::xmdfSetData $instance FileSet $fcount type AnyView +incr fcount + +utilities_xmdf::xmdfSetData $instance FileSet $fcount associated_module trace_memory +incr fcount + +} + +# ::gen_comp_name_xmdf::xmdfApplyParams diff --git a/oscilloscope.xise b/oscilloscope.xise new file mode 100644 index 0000000..037fff1 --- /dev/null +++ b/oscilloscope.xise @@ -0,0 +1,511 @@ + + + +
+ + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
diff --git a/project/oscilloscope.svg b/project/oscilloscope.svg new file mode 100644 index 0000000..91a8d56 --- /dev/null +++ b/project/oscilloscope.svg @@ -0,0 +1,1766 @@ + + +board_inputssettings (S)reader (S)mem_interface(S)oscilloscope_displayboard_outputsD flip-flop (S)input_signals_3_delayer (triple D flip-flop) (S^3)btn_sw_3_delayer (triple D flip-flop) (S)trigger (S)D flip-flop (S)bits_aggregator (S)btn_sw_debouncers (S)vga_controller_1280_1024 (S)screen_position_gen (S)trace_pixgen (S^2)time_base_pixgen (S^2)settings_pixgen (S^2)char_rom_muxchar_rom_memory (S)pixgen_mux (S)Double D flip-flop (S^2)D flip-flop (S)Quadruple D flip-flop (S^4)A project of three input oscilloscope for 1280x1024@60hz VGA monitor. (C) 2011 Osowski Marcin FPGA @ MIMUWTarget device: Basys2, Spartan3E-100 FPGA Note: (S) in entity title indicates that this entity introduces a one clock cycle delay, (S^2) - two clock cycles etc. Screen utilization plan:  o Screen consists of 16 segments, numbered from 0 to 15   o Each segment is 64 pixels high and 1280 pixels wide   o There are 14 segments for showing trace and 2 segments for settings+-----------------+ |                 | Segment 0 (first trace segment) +-----------------+ |                 | Segment 1 +-----------------+    .............. +-----------------+ |                 | Segment 13 (last trace segment) +-----------------+ |                 | Segment 14 (first settings segment) +-----------------+ |                 | Segment 15 (second settings segment) +-----------------+   o Each segment consists of 4 subsegments   o Each trace segment has:      x three subsegments for trace printing - for red, green and blue signals      x one subsegment for time base indication   o Settings segment has one line of text in each subsegment.       So it has 8 lines of text availableUsed I/Os:   o C6 - red signal   o B6 - green signal   o C5 - blue signal   o SW7 - UNUSED   o SW6 - red enable switch   o SW5 - green enable switch   o SW4 - blue enable switch   o SW3, SW2, SW1, SW0 - time resolution switches   o BTN3 - start/stop button   o BTN2 - trigger event choose button   o BTN1 - behaviour after complete reading   o BTN0 - resetscreen_segment,screen_columnactive_pixgen_sourcetrigger_btnbtn_debounced,sw_debounceddoutbportBaddrbdoutwea, addra,dinaflush_and_return_to_zerowrite_enableoverflow_indicatorQis_reading_activered_after_trigger,green_after_trigger,blue_after_triggertrigger_event, red_enable,green_enable,blue_enable,continue_after_readingtime_resolutionQhsync, vsyncbtn_3_delayed,sw_3_delayedred_3_delayed,green_3_delayed,blue_3_delayedQQvoutvoutvoutvoutvoutQaddrchar_pixelchar_pixelchar_pixelcharcharsegment, segment_change, subsegment,subsegment_change, line, line_change,column, column_mod_8, column_div_8,column_change, page_change,active_pixgen_sourceactive_pixgen_source,column_mod_8, lineline_change,page_change, column,column_change, vblankreader_red_value,reader_green_value,reader_blue_valueportAred, green, bluebtn, swVisual Paradigm for UML Standard Edition(Warsaw University) diff --git a/project/oscilloscope.vpp b/project/oscilloscope.vpp new file mode 100644 index 0000000000000000000000000000000000000000..325c800461a67a96d75eda412823e5c7a18f3afa GIT binary patch literal 309240 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≧#!{Fkq;+2avsKtz7R{2`R+1NrlvNdfU@+a;bLL7 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 *VhYQL4XtB-1pHAlBm73u& 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 literal 0 HcmV?d00001 diff --git a/project/reading_resolutions.ods b/project/reading_resolutions.ods new file mode 100644 index 0000000000000000000000000000000000000000..1e4664fbf47c0271ad1c53c3362c72c219099ef2 GIT binary patch literal 13088 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 literal 0 HcmV?d00001 diff --git a/project/screen-utilization-plan.png b/project/screen-utilization-plan.png new file mode 100644 index 0000000000000000000000000000000000000000..35efbcffbb01ee119f6efbc83ffec380795ed892 GIT binary patch literal 13466 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 literal 0 HcmV?d00001 diff --git a/project/screen-utilization-plan.xcf b/project/screen-utilization-plan.xcf new file mode 100644 index 0000000000000000000000000000000000000000..5d6cec392af9caab4da0c767b63bc5bd5b5f8b8c GIT binary patch literal 197098 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

(?Um?L_&B9XM=CS9Rd&YD_%_*7 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 OCmC1R^a5P#O#gqLhWC{K literal 0 HcmV?d00001 diff --git a/src/basys2.ucf b/src/basys2.ucf new file mode 100644 index 0000000..b3427c5 --- /dev/null +++ b/src/basys2.ucf @@ -0,0 +1,58 @@ +NET "uclk" LOC = "M6"; # Bank = 2, Signal name = UCLK + +# Pin assignment for LEDs +NET "Led<7>" LOC = "G1" ; # Bank = 3, Signal name = LD7 +NET "Led<6>" LOC = "P4" ; # Bank = 2, Signal name = LD6 +NET "Led<5>" LOC = "N4" ; # Bank = 2, Signal name = LD5 +NET "Led<4>" LOC = "N5" ; # Bank = 2, Signal name = LD4 +NET "Led<3>" LOC = "P6" ; # Bank = 2, Signal name = LD3 +NET "Led<2>" LOC = "P7" ; # Bank = 3, Signal name = LD2 +NET "Led<1>" LOC = "M11" ; # Bank = 2, Signal name = LD1 +NET "Led<0>" LOC = "M5" ; # Bank = 2, Signal name = LD0 + +# Pin assignment for 7-segment display +NET "seg<0>" LOC = "L14"; # Bank = 1, Signal name = CA +NET "seg<1>" LOC = "H12"; # Bank = 1, Signal name = CB +NET "seg<2>" LOC = "N14"; # Bank = 1, Signal name = CC +NET "seg<3>" LOC = "N11"; # Bank = 2, Signal name = CD +NET "seg<4>" LOC = "P12"; # Bank = 2, Signal name = CE +NET "seg<5>" LOC = "L13"; # Bank = 1, Signal name = CF +NET "seg<6>" LOC = "M12"; # Bank = 1, Signal name = CG +NET "seg<7>" LOC = "N13"; # Bank = 1, Signal name = DP +NET "an<0>" LOC = "F12"; # Bank = 1, Signal name = AN0 +NET "an<1>" LOC = "J12"; # Bank = 1, Signal name = AN1 +NET "an<2>" LOC = "M13"; # Bank = 1, Signal name = AN2 +NET "an<3>" LOC = "K14"; # Bank = 1, Signal name = AN3 + +# Pin assignment for SWs +#NET "sw<7>" LOC = "N3"; # Bank = 2, Signal name = SW7 # This one is currently unused +NET "sw<6>" LOC = "E2"; # Bank = 3, Signal name = SW6 +NET "sw<5>" LOC = "F3"; # Bank = 3, Signal name = SW5 +NET "sw<4>" LOC = "G3"; # Bank = 3, Signal name = SW4 +NET "sw<3>" LOC = "B4"; # Bank = 3, Signal name = SW3 +NET "sw<2>" LOC = "K3"; # Bank = 3, Signal name = SW2 +NET "sw<1>" LOC = "L3"; # Bank = 3, Signal name = SW1 +NET "sw<0>" LOC = "P11"; # Bank = 2, Signal name = SW0 +NET "btn<3>" LOC = "A7"; # Bank = 1, Signal name = BTN3 +NET "btn<2>" LOC = "M4"; # Bank = 0, Signal name = BTN2 +NET "btn<1>" LOC = "C11"; # Bank = 2, Signal name = BTN1 +NET "btn<0>" LOC = "G12"; # Bank = 0, Signal name = BTN0 +# Pin assignment for VGA +NET "HSYNC" LOC = "J14";# |DRIVE = 2 |PULLUP ; # Bank = 1, Signal name = HSYNC +NET "VSYNC" LOC = "K13";# |DRIVE = 2 |PULLUP ; # Bank = 1, Signal name = VSYNC +NET "VOut<7>" LOC = "F13";# |DRIVE = 2 |PULLUP ; # Bank = 1, Signal name = RED2 +NET "VOut<6>" LOC = "D13";# |DRIVE = 2 |PULLUP ; # Bank = 1, Signal name = RED1 +NET "VOut<5>" LOC = "C14";# |DRIVE = 2 |PULLUP ; # Bank = 1, Signal name = RED0 +NET "VOut<4>" LOC = "G14";# |DRIVE = 2 |PULLUP ; # Bank = 1, Signal name = GRN2 +NET "VOut<3>" LOC = "G13";# |DRIVE = 2 |PULLUP ; # Bank = 1, Signal name = GRN1 +NET "VOut<2>" LOC = "F14";# |DRIVE = 2 |PULLUP ; # Bank = 1, Signal name = GRN0 +NET "VOut<1>" LOC = "J13";# |DRIVE = 2 |PULLUP ; # Bank = 1, Signal name = BLU2 +NET "VOut<0>" LOC = "H13";# |DRIVE = 2 |PULLUP ; # Bank = 1, Signal name = BLU1 +# Pin assignments for oscilloscope inputs +NET "red" LOC = "C6"; +NET "green" LOC = "B6"; +NET "blue" LOC = "C5"; + +#Created by Constraints Editor (xc3s100e-cp132-5) - 2011/04/25 +NET "uclk" TNM_NET = uclk; +TIMESPEC TS_uclk = PERIOD "uclk" 32 MHz HIGH 50%; diff --git a/src/bits_aggregator.vhd b/src/bits_aggregator.vhd new file mode 100644 index 0000000..b78b781 --- /dev/null +++ b/src/bits_aggregator.vhd @@ -0,0 +1,110 @@ +---------------------------------------------------------------------------------- +-- Author: Osowski Marcin +-- Create Date: 19:43:33 05/27/2011 +---------------------------------------------------------------------------------- +library ieee; +use ieee.std_logic_1164.all; +use ieee.std_logic_unsigned.all; + +entity bits_aggregator is + port ( + -- Inputs + nrst : in std_logic; + clk108 : in std_logic; + flush_and_return_to_zero : in std_logic; + write_enable : in std_logic; + red_value : in std_logic; + green_value : in std_logic; + blue_value : in std_logic; + + -- Outputs + wea : out std_logic; + addra : out std_logic_vector (12 downto 0); + dina : out std_logic_vector (8 downto 0) + ); +end bits_aggregator; + +architecture behavioral of bits_aggregator is + signal mod3 : integer range 0 to 2 := 0; + signal next_mod3 : integer range 0 to 2; + signal mod3_overflow : std_logic := '0'; + + signal address : std_logic_vector (12 downto 0) := (others => '0'); + signal next_address : std_logic_vector (12 downto 0); + + signal row_buffer : std_logic_vector (5 downto 0) := (others => '0'); + signal next_row : std_logic_vector (8 downto 0) := (others => '0'); +begin + + -- Process calculates next_mod3, mod3_overflow, next_address + process (mod3, address) is + begin + if mod3 = 2 then + next_mod3 <= 0; + mod3_overflow <= '1'; + next_address <= address + 1; + else + next_mod3 <= mod3 + 1; + mod3_overflow <= '0'; + next_address <= address; + end if; + end process; + + -- Process calculates next_row + process (mod3, row_buffer, red_value, green_value, blue_value) is + begin + if mod3 = 0 then + next_row (0) <= red_value; + next_row (1) <= green_value; + next_row (2) <= blue_value; + next_row (8 downto 3) <= (others => '0'); + elsif mod3 = 1 then + next_row (2 downto 0) <= row_buffer (2 downto 0); + next_row (3) <= red_value; + next_row (4) <= green_value; + next_row (5) <= blue_value; + next_row (8 downto 6) <= (others => '0'); + else + next_row (5 downto 0) <= row_buffer (5 downto 0); + next_row (6) <= red_value; + next_row (7) <= green_value; + next_row (8) <= blue_value; + end if; + end process; + + process (nrst, clk108) is + begin + if nrst = '0' then + mod3 <= 0; + address <= (others => '0'); + wea <= '0'; + addra <= (others => '0'); + dina <= (others => '0'); + elsif rising_edge (clk108) then + if flush_and_return_to_zero = '1' then + mod3 <= 0; + address <= (others => '0'); + row_buffer <= (others => '0'); + addra <= address; + dina <= next_row; + wea <= '1'; + elsif write_enable = '1' then + mod3 <= next_mod3; + address <= next_address; + row_buffer <= next_row (5 downto 0); + if mod3_overflow = '1' then + addra <= address; + dina <= next_row; + wea <= '1'; + else + wea <= '0'; + end if; + else + wea <= '0'; + end if; + end if; + end process; + + +end behavioral; + diff --git a/src/char_rom_mux.vhd b/src/char_rom_mux.vhd new file mode 100644 index 0000000..ee95a81 --- /dev/null +++ b/src/char_rom_mux.vhd @@ -0,0 +1,55 @@ +---------------------------------------------------------------------------------- +-- Author: Osowski Marcin +-- Create Date: 17:46:36 05/28/2011 +---------------------------------------------------------------------------------- +library ieee; +use ieee.std_logic_1164.all; +use ieee.numeric_std.all; +use work.types.all; + +entity char_rom_mux is + port ( + -- Inputs + nrst : in std_logic; + clk108 : in std_logic; + active_pixgen_source : in PIXGEN_SOURCE_T; + char_pos_x : in integer range 0 to 7; + char_pos_y : in integer range 0 to 15; + time_base_char : in short_character; + settings_char : in short_character; + + char_pixel : out std_logic + ); +end char_rom_mux; + +architecture behavioral of char_rom_mux is + signal addra : std_logic_vector (13 downto 0); + signal douta : std_logic; + signal char_int : integer range 0 to 127; + signal char_lv : std_logic_vector (6 downto 0); + signal pos_x_lv : std_logic_vector (2 downto 0); + signal pos_y_lv : std_logic_vector (3 downto 0); +begin + char_rom_memory: entity work.char_rom_memory + port map ( + clka => clk108, + addra => addra, + douta(0) => douta + ); + + char_pixel <= '0' when nrst = '0' else douta; + + with active_pixgen_source select + char_int <= + short_character'pos (time_base_char) when TIME_BASE_PIXGEN_T, + short_character'pos (settings_char) when SETTINGS_PIXGEN_T, + 0 when others; + char_lv <= std_logic_vector (to_unsigned (char_int, 7)); + pos_x_lv <= std_logic_vector (to_unsigned (char_pos_x, 3)); + pos_y_lv <= std_logic_vector (to_unsigned (char_pos_y, 4)); + + + addra <= char_lv (6 downto 4) & pos_y_lv & char_lv (3 downto 0) & pos_x_lv; + +end behavioral; + diff --git a/src/clock_divider.vhd b/src/clock_divider.vhd new file mode 100644 index 0000000..9183b65 --- /dev/null +++ b/src/clock_divider.vhd @@ -0,0 +1,38 @@ +-- A simple frequency divider + +library ieee; +use ieee.std_logic_1164.all; +use ieee.numeric_std.all; + +entity divider is + -- 1 + -- f_out = f_in ----- + -- 2 * n + generic (n: natural range 1 to 2147483647); + port ( + clk_in : in std_logic; + nrst : in std_logic; + clk_out : out std_logic + ); +end entity divider; + +architecture counter of divider is + signal cnt : integer range 0 to n - 1; + signal internal_clk_out : std_logic := '0'; +begin + clk_out <= internal_clk_out; + process (clk_in, nrst) + begin + if nrst = '0' then + cnt <= 0; + internal_clk_out <= '0'; + elsif rising_edge (clk_in) then + if cnt = n - 1 then + cnt <= 0; + internal_clk_out <= not internal_clk_out; + else + cnt <= cnt + 1; + end if; + end if; + end process; +end architecture counter; diff --git a/src/debouncer.vhd b/src/debouncer.vhd new file mode 100644 index 0000000..c3649e5 --- /dev/null +++ b/src/debouncer.vhd @@ -0,0 +1,38 @@ +---------------------------------------------------------------------------------- +-- Author: Osowski Marcin +-- Create Date: 15:03:57 05/24/2011 +---------------------------------------------------------------------------------- +library ieee; +use ieee.std_logic_1164.all; + + +entity debouncer is + generic ( + n : natural := 5000; + signal_width : natural := 8 + ); + port ( + nrst : in std_logic; + clk : in std_logic; + input : in std_logic_vector (signal_width - 1 downto 0); + output : out std_logic_vector (signal_width - 1 downto 0) + ); +end debouncer; + +architecture behavioral of debouncer is +begin + debouncers: for i in 0 to signal_width - 1 generate + one_debouncer: entity work.single_debouncer + generic map ( + n => n + ) + port map( + nrst => nrst, + clk => clk, + input => input (i), + output => output (i) + ); + end generate debouncers; + +end behavioral; + diff --git a/src/display.vhd b/src/display.vhd new file mode 100644 index 0000000..c14bdaf --- /dev/null +++ b/src/display.vhd @@ -0,0 +1,224 @@ +---------------------------------------------------------------------------------- +-- Author: Osowski Marcin +-- Create Date: 15:58:36 05/22/2011 +---------------------------------------------------------------------------------- +library ieee; +use ieee.std_logic_1164.all; +use ieee.numeric_std.all; +use work.types.all; + + +entity oscilloscope_display is + port ( + nrst : in std_logic; + clk108 : in std_logic; + is_reading_active : in std_logic; + trigger_event : in TRIGGER_EVENT_T; + red_enable : in std_logic; + green_enable : in std_logic; + blue_enable : in std_logic; + continue_after_reading : in std_logic; + time_resolution : in integer range 0 to 15; + currently_read_screen_segment : in natural range 0 to 13; + currently_read_screen_column : in natural range 0 to 1279; + addrb : out std_logic_vector (12 downto 0); + doutb : in std_logic_vector (8 downto 0); + vout : out std_logic_vector (7 downto 0); + vsync : out std_logic; + hsync : out std_logic + ); +end oscilloscope_display; + +architecture behavioral of oscilloscope_display is + signal vga_cntl_line_change : std_logic; + signal vga_cntl_page_change : std_logic; + signal vga_cntl_column : integer range 0 to 1279; + signal vga_cntl_column_change : std_logic; + signal vga_cntl_vblank : std_logic; + signal vga_cntl_hsync : std_logic; + signal vga_cntl_vsync : std_logic; + + signal scr_pos_segment : integer range 0 to 15; + signal scr_pos_segment_change : std_logic; + signal scr_pos_subsegment : integer range 0 to 3; + signal scr_pos_subsegment_change : std_logic; + signal scr_pos_line : integer range 0 to 15; + signal scr_pos_out_line_change : std_logic; + signal scr_pos_out_column : integer range 0 to 1279; + signal scr_pos_out_column_mod_8 : integer range 0 to 7; + signal scr_pos_out_column_div_8 : integer range 0 to 159; + signal scr_pos_column_change : std_logic; + signal scr_pos_out_page_change : std_logic; + signal scr_pos_active_pixgen_source : PIXGEN_SOURCE_T; + + + signal scr_pos_out_column_mod_8_delayed : integer range 0 to 7; + signal scr_pos_line_delayed : integer range 0 to 15; + + signal scr_pos_active_pixgen_source_delayed_1 : PIXGEN_SOURCE_T; + signal scr_pos_active_pixgen_source_delayed_2 : PIXGEN_SOURCE_T; + + signal time_base_char : short_character; + signal settings_char : short_character; + signal char_rom_mux_char_pixel : std_logic; + + signal trace_vout : std_logic_vector (7 downto 0); + signal time_base_vout : std_logic_vector (7 downto 0); + signal settings_vout : std_logic_vector (7 downto 0); + +begin + + vga_controller_1280_1024: entity work.vga_controller_1280_1024 + port map ( + nrst => nrst, + clk108 => clk108, + hsync => vga_cntl_hsync, + vsync => vga_cntl_vsync, + vblank => vga_cntl_vblank, + line_change => vga_cntl_line_change, + page_change => vga_cntl_page_change, + column => vga_cntl_column, + column_change => vga_cntl_column_change + ); + + + + screen_position_gen: entity work.screen_position_gen + port map ( + nrst => nrst, + clk108 => clk108, + vblank => vga_cntl_vblank, + in_line_change => vga_cntl_line_change, + in_page_change => vga_cntl_page_change, + in_column => vga_cntl_column, + in_column_change => vga_cntl_column_change, + + segment => scr_pos_segment, + segment_change => scr_pos_segment_change, + subsegment => scr_pos_subsegment, + subsegment_change => scr_pos_subsegment_change, + line => scr_pos_line, + out_line_change => scr_pos_out_line_change, + out_column => scr_pos_out_column, + out_column_mod_8 => scr_pos_out_column_mod_8, + out_column_div_8 => scr_pos_out_column_div_8, + out_column_change => scr_pos_column_change, + out_page_change => scr_pos_out_page_change, + active_pixgen_source => scr_pos_active_pixgen_source + ); + + trace_pixgen: entity work.trace_pixgen + port map ( + nrst => nrst, + clk108 => clk108, + segment => scr_pos_segment, + segment_change => scr_pos_segment_change, + subsegment => scr_pos_subsegment, + subsegment_change => scr_pos_subsegment_change, + line => scr_pos_line, + line_change => scr_pos_out_line_change, + column => scr_pos_out_column, + column_change => scr_pos_column_change, + page_change => scr_pos_out_page_change, + active_pixgen_source => scr_pos_active_pixgen_source, + currently_read_screen_segment => currently_read_screen_segment, + currently_read_screen_column => currently_read_screen_column, + time_resolution => time_resolution, + is_reading_active => is_reading_active, + doutb => doutb, + addrb => addrb, + vout => trace_vout + ); + + scr_pos_out_column_mod_8_delayed <= scr_pos_out_column_mod_8 when rising_edge (clk108); + scr_pos_line_delayed <= scr_pos_line when rising_edge (clk108); + scr_pos_active_pixgen_source_delayed_1 <= scr_pos_active_pixgen_source when rising_edge (clk108); + scr_pos_active_pixgen_source_delayed_2 <= scr_pos_active_pixgen_source_delayed_1 when rising_edge (clk108); + + char_rom_mux: entity work.char_rom_mux + port map ( + nrst => nrst, + clk108 => clk108, + active_pixgen_source => scr_pos_active_pixgen_source_delayed_1, + char_pos_x => scr_pos_out_column_mod_8_delayed, + char_pos_y => scr_pos_line_delayed, + time_base_char => time_base_char, + settings_char => settings_char, + char_pixel => char_rom_mux_char_pixel + ); + + time_base_pixgen: entity work.time_base_pixgen + port map ( + nrst => nrst, + clk108 => clk108, + segment => scr_pos_segment, + segment_change => scr_pos_segment_change, + subsegment => scr_pos_subsegment, + subsegment_change => scr_pos_subsegment_change, + line => scr_pos_line, + line_change => scr_pos_out_line_change, + column => scr_pos_out_column, + column_change => scr_pos_column_change, + page_change => scr_pos_out_page_change, + active_pixgen_source => scr_pos_active_pixgen_source, + char => time_base_char, + char_pixel => char_rom_mux_char_pixel, + vout => time_base_vout + ); + + settings_pixgen: entity work.settings_pixgen + port map ( + nrst => nrst, + clk108 => clk108, + segment => scr_pos_segment, + segment_change => scr_pos_segment_change, + subsegment => scr_pos_subsegment, + subsegment_change => scr_pos_subsegment_change, + line => scr_pos_line, + line_change => scr_pos_out_line_change, + column => scr_pos_out_column, + column_div_8 => scr_pos_out_column_div_8, + column_mod_8 => scr_pos_out_column_mod_8, + column_change => scr_pos_column_change, + page_change => scr_pos_out_page_change, + active_pixgen_source => scr_pos_active_pixgen_source, + is_reading_active => is_reading_active, + trigger_event => trigger_event, + red_enable => red_enable, + green_enable => green_enable, + blue_enable => blue_enable, + continue_after_reading => continue_after_reading, + time_resolution => time_resolution, + char => settings_char, + char_pixel => char_rom_mux_char_pixel, + vout => settings_vout + ); + + + pixgen_mux: entity work.pixgen_mux + port map ( + nrst => nrst, + clk108 => clk108, + trace_vout => trace_vout, + time_base_vout => time_base_vout, + settings_vout => settings_vout, + active_pixgen_source => scr_pos_active_pixgen_source_delayed_2, + vout => vout + ); + + vga_sync_signals_4_delay: entity work.n_cycles_delayer + generic map ( + n => 4, + signal_width => 2 + ) + port map ( + nrst => nrst, + clk => clk108, + input(0) => vga_cntl_hsync, + input(1) => vga_cntl_vsync, + output(0) => hsync, + output(1) => vsync + ); + +end behavioral; + diff --git a/src/main.vhd b/src/main.vhd new file mode 100644 index 0000000..4a99598 --- /dev/null +++ b/src/main.vhd @@ -0,0 +1,281 @@ +---------------------------------------------------------------------------------- +-- Author: Marcin Osowski +---------------------------------------------------------------------------------- + +library ieee; +use ieee.std_logic_1164.all; +use ieee.std_logic_arith.all; +use ieee.std_logic_unsigned.all; +use work.types.all; + +entity oscilloscope is + port( + uclk : in std_logic; -- 32 MHz stable + sw : in std_logic_vector (6 downto 0); + btn : in std_logic_vector (3 downto 0); + red : in std_logic; + green : in std_logic; + blue : in std_logic; + + -- Project does not use any of the below + -- pins. They are here just to give them + -- constant value. + led : out std_logic_vector (7 downto 0); + seg : out std_logic_vector (7 downto 0); + an : out std_logic_vector (3 downto 0); + + hsync : out std_logic; + vsync : out std_logic; + vout : out std_logic_vector (7 downto 0) + ); +end entity oscilloscope; + +architecture structural of oscilloscope is + signal rst : std_logic; + signal nrst : std_logic; + signal clk108 : std_logic; + signal clk108_ok : std_logic; + signal clk10khz : std_logic; + + signal sw_3_delayed : std_logic_vector (6 downto 0); + signal btn_3_delayed : std_logic_vector (2 downto 0); + signal sw_debounced : std_logic_vector (6 downto 0); + signal btn_debounced : std_logic_vector (2 downto 0); + + signal red_3_delayed : std_logic; + signal green_3_delayed : std_logic; + signal blue_3_delayed : std_logic; + + signal trigger_btn : std_logic; + signal trigger_event : TRIGGER_EVENT_T; + signal red_enable : std_logic; + signal green_enable : std_logic; + signal blue_enable : std_logic; + signal continue_after_reading : std_logic; + signal time_resolution : integer range 0 to 15; + signal time_resolution_delayed : integer range 0 to 15; + + signal overflow_indicator : std_logic; + signal red_after_trigger : std_logic; + signal green_after_trigger : std_logic; + signal blue_after_trigger : std_logic; + signal is_reading_active : std_logic; + + signal flush_and_return_to_zero : std_logic; + signal write_enable : std_logic; + signal reader_red_value : std_logic; + signal reader_green_value : std_logic; + signal reader_blue_value : std_logic; + signal reader_screen_segment : natural range 0 to 13; + signal reader_screen_column : natural range 0 to 1279; + + + signal pre_hsync : std_logic; + signal pre_vsync : std_logic; + signal pre_vout : std_logic_vector (7 downto 0); + + signal wea : std_logic; + signal addra : std_logic_vector (12 downto 0); + signal dina : std_logic_vector (8 downto 0); + signal addrb : std_logic_vector (12 downto 0); + signal doutb : std_logic_vector (8 downto 0); + + + +begin + led <= (others => '0'); + seg <= (others => '1'); + an <= (others => '1'); + + display_clock_108mhz: entity work.clock_108mhz + port map ( + CLKIN_IN => uclk, + RST_IN => btn (3), + CLKFX_OUT => clk108, + CLKIN_IBUFG_OUT => open, + LOCKED_OUT => clk108_ok + ); + + + rst <= btn (3) and clk108_ok; + nrst <= not rst; + + divider_10khz: entity work.divider + generic map ( + n => 5400 + ) + port map ( + clk_in => clk108, + nrst => nrst, + clk_out => clk10khz + ); + + btn_sw_3_delayer : entity work.n_cycles_delayer + generic map ( + n => 3, + signal_width => 10 + ) + port map ( + nrst => nrst, + clk => clk10khz, + input (9 downto 7) => btn (2 downto 0), + input (6 downto 0) => sw (6 downto 0), + + output (9 downto 7) => btn_3_delayed (2 downto 0), + output (6 downto 0) => sw_3_delayed (6 downto 0) + ); + + input_signals_3_delayer : entity work.n_cycles_delayer + generic map ( + n => 3, + signal_width => 3 + ) + port map ( + nrst => nrst, + clk => clk108, + input (2) => red, + input (1) => green, + input (0) => blue, + + output (2) => red_3_delayed, + output (1) => green_3_delayed, + output (0) => blue_3_delayed + ); + + btn_sw_debouncers: entity work.debouncer + generic map ( + n => 50, + signal_width => 10 + ) + port map ( + nrst => nrst, + clk => clk10khz, + input (9 downto 7) => btn_3_delayed, + input (6 downto 0) => sw_3_delayed, + + output (9 downto 7) => btn_debounced, + output (6 downto 0) => sw_debounced + ); + + settings: entity work.settings + port map ( + nrst => nrst, + clk108 => clk108, + sw => sw_debounced, + btn => btn_debounced, + trigger_btn => trigger_btn, + trigger_event => trigger_event, + red_enable => red_enable, + green_enable => green_enable, + blue_enable => blue_enable, + continue_after_reading => continue_after_reading, + time_resolution => time_resolution + ); + + trigger: entity work.trigger + port map ( + nrst => nrst, + clk108 => clk108, + trigger_btn => trigger_btn, + trigger_event => trigger_event, + red_enable => red_enable, + green_enable => green_enable, + blue_enable => blue_enable, + continue_after_reading => continue_after_reading, + red_input => red_3_delayed, + green_input => green_3_delayed, + blue_input => blue_3_delayed, + overflow_indicator => overflow_indicator, + red_output => red_after_trigger, + green_output => green_after_trigger, + blue_output => blue_after_trigger, + is_reading_active => is_reading_active + ); + + time_resolution_delayed <= time_resolution when rising_edge (clk108); + + reader: entity work.reader + port map ( + nrst => nrst, + clk108 => clk108, + input_red => red_after_trigger, + input_green => green_after_trigger, + input_blue => blue_after_trigger, + is_reading_active => is_reading_active, + time_resolution => time_resolution_delayed, + overflow_indicator => overflow_indicator, + screen_segment => reader_screen_segment, + screen_column => reader_screen_column, + flush_and_return_to_zero => flush_and_return_to_zero, + write_enable => write_enable, + red_value => reader_red_value, + green_value => reader_green_value, + blue_value => reader_blue_value + ); + + bits_aggregator: entity work.bits_aggregator + port map ( + nrst => nrst, + clk108 => clk108, + flush_and_return_to_zero => flush_and_return_to_zero, + write_enable => write_enable, + red_value => reader_red_value, + green_value => reader_green_value, + blue_value => reader_blue_value, + wea => wea, + addra => addra, + dina => dina + ); + + + + oscilloscope_display: entity work.oscilloscope_display + port map ( + nrst => nrst, + clk108 => clk108, + is_reading_active => is_reading_active, + trigger_event => trigger_event, + red_enable => red_enable, + green_enable => green_enable, + blue_enable => blue_enable, + continue_after_reading => continue_after_reading, + time_resolution => time_resolution, + currently_read_screen_segment => reader_screen_segment, + currently_read_screen_column => reader_screen_column, + addrb => addrb, + doutb => doutb, + vout => pre_vout, + vsync => pre_vsync, + hsync => pre_hsync + ); + + vga_signal_formatter: entity work.one_cycle_delayer + generic map ( + signal_width => 10 + ) + port map ( + nrst => nrst, + clk => clk108, + input (9 downto 2) => pre_vout, + input (1) => pre_vsync, + input (0) => pre_hsync, + output (9 downto 2) => vout, + output (1) => vsync, + output (0) => hsync + ); + + + trace_memory: entity work.trace_memory + port map ( + clka => clk108, + wea(0) => wea, + addra => addra, + dina => dina, + clkb => clk108, + rstb => rst, + addrb => addrb, + doutb => doutb + ); + + +end architecture structural; diff --git a/src/n_cycles_delayer.vhd b/src/n_cycles_delayer.vhd new file mode 100644 index 0000000..7721cff --- /dev/null +++ b/src/n_cycles_delayer.vhd @@ -0,0 +1,47 @@ +---------------------------------------------------------------------------------- +-- Author: Osowski Marcin +-- Create Date: 17:31:43 05/22/2011 +-- +-- Description: This entity delays given signal of width signal_width by n clock cycles. +---------------------------------------------------------------------------------- +library ieee; +use ieee.std_logic_1164.all; + + +entity n_cycles_delayer is + generic ( + n : integer range 2 to 1024; + signal_width : integer range 1 to 1024 + ); + + port ( + nrst : in std_logic; + clk : in std_logic; + input : in std_logic_vector (signal_width - 1 downto 0); + output : out std_logic_vector (signal_width - 1 downto 0) + ); +end n_cycles_delayer; + +architecture behavioral of n_cycles_delayer is + type delay_array_t is array (n - 1 downto 0) of std_logic_vector (signal_width - 1 downto 0); + signal delay_array: delay_array_t ;--:= (others => (others => '0')); + +begin + output <= delay_array (n - 1); + process (clk, nrst) is + variable i : integer range 0 to n - 2; + begin + if nrst = '0' then + for i in 0 to n - 1 loop + delay_array (i) <= (others => '0'); + end loop; + elsif rising_edge (clk) then + delay_array (0) <= input; + for i in 0 to (n - 2) loop + delay_array (i + 1) <= delay_array (i); + end loop; + end if; + end process; + +end architecture behavioral; + diff --git a/src/one_cycle_delayer.vhd b/src/one_cycle_delayer.vhd new file mode 100644 index 0000000..53b0f53 --- /dev/null +++ b/src/one_cycle_delayer.vhd @@ -0,0 +1,36 @@ +---------------------------------------------------------------------------------- +-- Author: Osowski Marcin +-- Create Date: 16:19:05 05/24/2011 +-- +-- Description: This entity delays given signal of width signal_width by n clock cycles. +---------------------------------------------------------------------------------- +library ieee; +use ieee.std_logic_1164.all; + + +entity one_cycle_delayer is + generic ( + signal_width : integer range 1 to 1024 + ); + + port ( + nrst : in std_logic; + clk : in std_logic; + input : in std_logic_vector (signal_width - 1 downto 0); + output : out std_logic_vector (signal_width - 1 downto 0) + ); +end one_cycle_delayer; + +architecture behavioral of one_cycle_delayer is + +begin + process (clk, nrst) is + begin + if nrst = '0' then + output <= (others => '0'); + elsif rising_edge (clk) then + output <= input; + end if; + end process; +end behavioral; + diff --git a/src/pixgen_mux.vhd b/src/pixgen_mux.vhd new file mode 100644 index 0000000..5d2626c --- /dev/null +++ b/src/pixgen_mux.vhd @@ -0,0 +1,42 @@ +---------------------------------------------------------------------------------- +-- Author: Osowski Marcin +-- Create Date: 21:10:21 05/22/2011 +---------------------------------------------------------------------------------- +library ieee; +use ieee.std_logic_1164.all; +use work.types.all; + + +entity pixgen_mux is + port ( + nrst : in std_logic; + clk108 : in std_logic; + trace_vout : in std_logic_vector (7 downto 0); + time_base_vout : in std_logic_vector (7 downto 0); + settings_vout : in std_logic_vector (7 downto 0); + active_pixgen_source : in PIXGEN_SOURCE_T; + vout : out std_logic_vector (7 downto 0) + ); +end pixgen_mux; + +architecture behavioral of pixgen_mux is + +begin + process (nrst, clk108) is + begin + if nrst = '0' then + vout <= "00000000"; + elsif rising_edge (clk108) then + if active_pixgen_source = TRACE_PIXGEN_T then + vout <= trace_vout; + elsif active_pixgen_source = TIME_BASE_PIXGEN_T then + vout <= time_base_vout; + elsif active_pixgen_source = SETTINGS_PIXGEN_T then + vout <= settings_vout; + else + vout <= "00000000"; + end if; + end if; + end process; + +end behavioral; diff --git a/src/reader.vhd b/src/reader.vhd new file mode 100644 index 0000000..14d08f5 --- /dev/null +++ b/src/reader.vhd @@ -0,0 +1,150 @@ +---------------------------------------------------------------------------------- +-- Author: Osowski Marcin +-- Create Date: 14:48:55 05/24/2011 +---------------------------------------------------------------------------------- + +library ieee; +use ieee.std_logic_1164.all; +use ieee.numeric_std.all; + + +entity reader is + port ( + nrst : in std_logic; + clk108 : in std_logic; + input_red : in std_logic; + input_green : in std_logic; + input_blue : in std_logic; + is_reading_active : in std_logic; + time_resolution : in integer range 0 to 15; + + -- This is an asynchronous output. It indicates that during next + -- clock cycle entity will generate flush_and_return_to_zero. + overflow_indicator : out std_logic; + + screen_segment : out natural range 0 to 13; + screen_column : out natural range 0 to 1279; + flush_and_return_to_zero : out std_logic; + write_enable : out std_logic; + red_value : out std_logic; + green_value : out std_logic; + blue_value : out std_logic + ); + + constant max_time_resolution : natural := 432000; + + type res_array is array (0 to 15) of natural range 2 to max_time_resolution; + + -- Real time resolution will be given by equation: + -- time_between_probes = time_resolutions (time_resolution) / (108 Mhz) + -- No 1 (ones) here please! + constant time_resolutions : res_array := ( + 2, 5, 10, 20, 108, 216, 432, 1080, 2160, 4320, + 10800, 21600, 43200, 108000, 216000, 432000 + ); + + +end reader; + + +architecture behavioral of reader is + signal time_position : natural range 0 to max_time_resolution + 1 := 0; + signal next_time_position : natural range 0 to max_time_resolution + 1; + signal time_overflow : std_logic; + + signal memory_position : natural range 0 to (14 * 1280) := 0; + signal next_memory_position : natural range 0 to (14 * 1280); + + signal internal_screen_segment : natural range 0 to 13:= 0; + signal internal_screen_column : natural range 0 to 1279 := 0; + signal next_screen_segment : natural range 0 to 14; + signal next_screen_column : natural range 0 to 1280; + + + signal internal_overflow_indicator : std_logic; +begin + overflow_indicator <= internal_overflow_indicator; + screen_segment <= internal_screen_segment; + screen_column <= internal_screen_column; + + -- Process computes next_time_position and time_overflow + process (time_position) is + begin + if time_position + 1 >= time_resolutions (time_resolution) then + next_time_position <= 0; + time_overflow <= '1'; + else + next_time_position <= time_position + 1; + time_overflow <= '0'; + end if; + end process; + + -- Process computes next_memory_position and internal_overflow_indicator + process (memory_position, internal_screen_segment, internal_screen_column, time_overflow) is + begin + if time_overflow = '1' then + if memory_position + 1 >= (14 * 1280) then + next_memory_position <= 0; + next_screen_segment <= 0; + next_screen_column <= 0; + internal_overflow_indicator <= '1'; + else + next_memory_position <= memory_position + 1; + if internal_screen_column + 1 >= 1280 then + next_screen_column <= 0; + next_screen_segment <= internal_screen_segment + 1; + else + next_screen_column <= internal_screen_column + 1; + next_screen_segment <= internal_screen_segment; + end if; + internal_overflow_indicator <= '0'; + end if; + else + next_memory_position <= memory_position; + next_screen_column <= internal_screen_column; + next_screen_segment <= internal_screen_segment; + internal_overflow_indicator <= '0'; + end if; + end process; + + + process (nrst, clk108) is + begin + if nrst = '0' then + time_position <= 0; + memory_position <= 0; + flush_and_return_to_zero <= '0'; + write_enable <= '0'; + red_value <= '0'; + green_value <= '0'; + blue_value <= '0'; + elsif rising_edge (clk108) then + memory_position <= next_memory_position; + internal_screen_column <= next_screen_column; + internal_screen_segment <= next_screen_segment; + if is_reading_active = '1' or time_position /= 0 then + time_position <= next_time_position; + if time_overflow = '1' then + red_value <= input_red; + green_value <= input_green; + blue_value <= input_blue; + write_enable <= '1'; + flush_and_return_to_zero <= internal_overflow_indicator; + else + red_value <= '0'; + green_value <= '0'; + blue_value <= '0'; + write_enable <= '0'; + flush_and_return_to_zero <= '0'; + end if; + else + red_value <= '0'; + green_value <= '0'; + blue_value <= '0'; + write_enable <= '0'; + flush_and_return_to_zero <= '0'; + end if; + end if; + end process; + +end behavioral; diff --git a/src/rom_data/8x16_font_ASCII_DOS_437.coe b/src/rom_data/8x16_font_ASCII_DOS_437.coe new file mode 100644 index 0000000..2b92936 --- /dev/null +++ b/src/rom_data/8x16_font_ASCII_DOS_437.coe @@ -0,0 +1,16386 @@ +memory_initialization_radix=2; +memory_initialization_vector= +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +1 , +1 , +1 , +1 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +1 , +1 , +1 , +1 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +1 , +1 , +1 , +1 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +1 , +1 , +1 , +1 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +1 , +1 , +1 , +1 , +0 , +0 , +1 , +1 , +1 , +1 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +1 , +1 , +1 , +1 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +1 , +1 , +1 , +1 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +1 , +1 , +0 , +0 , +0 , +0 , +1 , +1 , +1 , +1 , +1 , +1 , +0 , +1 , +1 , +1 , +1 , +1 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +1 , +1 , +1 , +1 , +1 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +1 , +1 , +1 , +1 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +1 , +1 , +1 , +1 , +1 , +1 , +0 , +0 , +0 , +0 , +1 , +1 , +1 , +0 , +0 , +1 , +1 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +1 , +1 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +0 , +1 , +0 , +0 , +1 , +0 , +1 , +1 , +1 , +0 , +1 , +1 , +0 , +1 , +1 , +0 , +1 , +1 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +1 , +1 , +0 , +0 , +0 , +0 , +1 , +1 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +1 , +1 , +1 , +1 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +1 , +1 , +1 , +1 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +0 , +1 , +0 , +0 , +1 , +1 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +1 , +1 , +1 , +1 , +0 , +1 , +1 , +1 , +1 , +1 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +1 , +1 , +1 , +1 , +1 , +1 , +1 , +1 , +1 , +1 , +1 , +1 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +1 , +1 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +1 , +1 , +1 , +1 , +1 , +1 , +0 , +0 , +1 , +1 , +1 , +1 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +1 , +1 , +0 , +0 , +1 , +0 , +0 , +1 , +1 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +1 , +1 , +0 , +1 , +1 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +1 , +1 , +1 , +1 , +1 , +1 , +1 , +1 , +1 , +1 , +1 , +1 , +1 , +1 , +0 , +0 , +1 , +1 , +1 , +1 , +1 , +0 , +0 , +1 , +1 , +1 , +0 , +0 , +1 , +1 , +1 , +1 , +1 , +1 , +1 , +1 , +1 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +1 , +0 , +0 , +1 , +1 , +1 , +0 , +1 , +1 , +0 , +0 , +1 , +1 , +0 , +1 , +0 , +0 , +1 , +1 , +0 , +0 , +1 , +0 , +1 , +1 , +1 , +1 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +1 , +1 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +0 , +1 , +1 , +1 , +1 , +0 , +1 , +1 , +1 , +0 , +0 , +0 , +0 , +1 , +1 , +1 , +1 , +1 , +1 , +1 , +1 , +1 , +0 , +1 , +1 , +1 , +1 , +1 , +1 , +1 , +0 , +1 , +1 , +1 , +0 , +0 , +1 , +1 , +1 , +1 , +1 , +1 , +1 , +1 , +1 , +1 , +1 , +0 , +0 , +1 , +1 , +1 , +1 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +1 , +0 , +0 , +0 , +0 , +1 , +0 , +1 , +0 , +1 , +1 , +1 , +1 , +0 , +1 , +1 , +1 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +1 , +1 , +1 , +1 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +1 , +1 , +1 , +0 , +0 , +1 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +0 , +0 , +1 , +1 , +0 , +0 , +1 , +1 , +1 , +1 , +0 , +0 , +1 , +1 , +1 , +1 , +1 , +1 , +1 , +1 , +1 , +1 , +0 , +0 , +1 , +1 , +1 , +1 , +1 , +0 , +0 , +1 , +1 , +1 , +0 , +0 , +1 , +1 , +1 , +0 , +1 , +1 , +1 , +1 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +1 , +1 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +1 , +0 , +0 , +0 , +0 , +1 , +0 , +1 , +0 , +1 , +1 , +1 , +1 , +0 , +1 , +1 , +1 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +1 , +1 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +1 , +1 , +1 , +1 , +1 , +1 , +1 , +0 , +1 , +1 , +1 , +1 , +1 , +0 , +0 , +0 , +0 , +1 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +1 , +0 , +0 , +1 , +1 , +1 , +0 , +1 , +1 , +0 , +0 , +1 , +1 , +0 , +1 , +0 , +0 , +1 , +1 , +0 , +0 , +1 , +1 , +1 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +1 , +1 , +1 , +1 , +0 , +0 , +1 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +1 , +1 , +1 , +1 , +1 , +0 , +1 , +1 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +1 , +1 , +1 , +1 , +1 , +1 , +1 , +0 , +0 , +1 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +1 , +1 , +1 , +1 , +1 , +1 , +0 , +0 , +1 , +1 , +1 , +1 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +1 , +1 , +1 , +1 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +1 , +1 , +0 , +0 , +0 , +0 , +1 , +1 , +1 , +0 , +0 , +1 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +1 , +1 , +1 , +1 , +0 , +0 , +1 , +1 , +1 , +1 , +1 , +1 , +0 , +0 , +0 , +0 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +1 , +1 , +0 , +0 , +0 , +0 , +1 , +1 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +1 , +1 , +1 , +1 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +1 , +1 , +1 , +1 , +1 , +1 , +0 , +1 , +1 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +1 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +1 , +1 , +1 , +1 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +1 , +1 , +1 , +1 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +1 , +1 , +1 , +1 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +1 , +1 , +1 , +1 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +1 , +1 , +1 , +1 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +1 , +1 , +1 , +1 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +1 , +1 , +1 , +1 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +1 , +1 , +1 , +1 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +1 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +1 , +1 , +0 , +0 , +1 , +1 , +1 , +1 , +1 , +1 , +1 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +1 , +1 , +0 , +1 , +1 , +0 , +1 , +1 , +0 , +1 , +1 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +1 , +1 , +0 , +0 , +0 , +0 , +1 , +1 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +1 , +1 , +0 , +0 , +1 , +1 , +1 , +1 , +1 , +1 , +0 , +0 , +1 , +1 , +0 , +0 , +1 , +1 , +0 , +1 , +1 , +0 , +1 , +1 , +0 , +1 , +1 , +0 , +0 , +1 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +1 , +1 , +1 , +1 , +0 , +0 , +1 , +1 , +1 , +1 , +1 , +1 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +0 , +0 , +0 , +0 , +1 , +1 , +1 , +1 , +1 , +1 , +1 , +0 , +1 , +1 , +1 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +1 , +1 , +1 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +1 , +1 , +0 , +1 , +1 , +0 , +1 , +1 , +0 , +1 , +1 , +0 , +1 , +1 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +0 , +1 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +1 , +1 , +1 , +1 , +1 , +0 , +1 , +1 , +1 , +1 , +1 , +1 , +1 , +0 , +1 , +1 , +1 , +1 , +1 , +1 , +1 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +1 , +1 , +0 , +0 , +1 , +1 , +1 , +1 , +0 , +1 , +1 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +1 , +1 , +1 , +0 , +0 , +0 , +0 , +1 , +1 , +1 , +1 , +1 , +0 , +0 , +1 , +1 , +1 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +1 , +1 , +1 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +1 , +1 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +1 , +1 , +1 , +1 , +1 , +0 , +1 , +1 , +1 , +1 , +1 , +1 , +1 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +1 , +1 , +1 , +1 , +1 , +0 , +0 , +1 , +1 , +1 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +1 , +1 , +1 , +0 , +0 , +1 , +1 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +1 , +1 , +0 , +0 , +1 , +1 , +1 , +1 , +1 , +1 , +0 , +0 , +1 , +1 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +1 , +1 , +0 , +1 , +1 , +0 , +1 , +1 , +0 , +0 , +1 , +1 , +1 , +1 , +1 , +1 , +1 , +0 , +0 , +1 , +1 , +1 , +1 , +1 , +1 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +1 , +1 , +1 , +0 , +0 , +0 , +0 , +1 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +1 , +1 , +0 , +0 , +1 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +1 , +1 , +1 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +1 , +1 , +1 , +1 , +1 , +1 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +1 , +1 , +1 , +1 , +1 , +1 , +1 , +0 , +0 , +0 , +1 , +0 , +1 , +0 , +0 , +0 , +1 , +1 , +1 , +1 , +1 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +1 , +1 , +1 , +1 , +1 , +1 , +1 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +1 , +1 , +1 , +1 , +1 , +0 , +0 , +0 , +0 , +1 , +0 , +0 , +0 , +0 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +1 , +1 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +0 , +1 , +1 , +1 , +1 , +1 , +1 , +1 , +0 , +0 , +1 , +1 , +1 , +1 , +1 , +1 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +1 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +1 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +1 , +1 , +0 , +0 , +1 , +1 , +0 , +1 , +1 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +1 , +1 , +0 , +0 , +0 , +0 , +1 , +0 , +0 , +1 , +0 , +0 , +0 , +1 , +1 , +0 , +1 , +1 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +1 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +1 , +0 , +0 , +1 , +1 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +1 , +1 , +1 , +1 , +1 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +1 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +1 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +1 , +1 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +0 , +1 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +1 , +1 , +1 , +1 , +1 , +1 , +1 , +1 , +0 , +1 , +1 , +1 , +1 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +1 , +1 , +1 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +1 , +1 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +1 , +1 , +1 , +1 , +1 , +0 , +1 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +1 , +1 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +0 , +1 , +1 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +1 , +1 , +1 , +0 , +0 , +1 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +1 , +1 , +1 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +1 , +1 , +1 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +1 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +1 , +1 , +1 , +1 , +1 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +1 , +1 , +1 , +1 , +1 , +0 , +0 , +1 , +1 , +1 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +1 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +1 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +1 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +1 , +1 , +1 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +1 , +1 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +1 , +1 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +1 , +1 , +0 , +1 , +1 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +1 , +1 , +1 , +1 , +1 , +1 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +1 , +1 , +0 , +1 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +1 , +1 , +0 , +0 , +1 , +1 , +0 , +0 , +1 , +1 , +0 , +0 , +1 , +1 , +1 , +1 , +1 , +1 , +0 , +0 , +1 , +1 , +1 , +1 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +1 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +1 , +1 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +0 , +1 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +1 , +1 , +1 , +1 , +1 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +1 , +1 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +1 , +0 , +0 , +0 , +0 , +1 , +1 , +1 , +1 , +1 , +1 , +0 , +1 , +1 , +1 , +1 , +1 , +1 , +1 , +0 , +0 , +1 , +1 , +1 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +1 , +1 , +0 , +0 , +1 , +1 , +1 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +1 , +1 , +1 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +1 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +0 , +0 , +0 , +0 , +1 , +1 , +1 , +1 , +1 , +1 , +0 , +0 , +0 , +0 , +1 , +1 , +1 , +1 , +0 , +0 , +1 , +1 , +1 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +1 , +1 , +1 , +1 , +1 , +0 , +1 , +1 , +1 , +1 , +1 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +1 , +1 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +1 , +1 , +0 , +1 , +1 , +1 , +0 , +0 , +1 , +1 , +0 , +1 , +1 , +1 , +1 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +1 , +1 , +1 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +1 , +1 , +1 , +0 , +0 , +0 , +0 , +1 , +1 , +1 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +1 , +1 , +0 , +0 , +1 , +1 , +0 , +0 , +1 , +1 , +0 , +0 , +1 , +1 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +1 , +1 , +0 , +0 , +1 , +1 , +0 , +0 , +1 , +1 , +0 , +0 , +1 , +1 , +0 , +0 , +1 , +1 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +1 , +1 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +1 , +0 , +1 , +1 , +1 , +0 , +1 , +1 , +1 , +0 , +0 , +1 , +1 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +1 , +1 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +1 , +1 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +1 , +0 , +0 , +1 , +1 , +0 , +0 , +1 , +1 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +1 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +1 , +1 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +1 , +1 , +1 , +1 , +1 , +0 , +1 , +1 , +1 , +1 , +0 , +1 , +1 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +1 , +1 , +0 , +0 , +1 , +1 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +1 , +1 , +0 , +0 , +1 , +1 , +0 , +1 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +1 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +1 , +1 , +1 , +1 , +1 , +0 , +1 , +1 , +1 , +1 , +1 , +1 , +1 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +0 , +1 , +1 , +0 , +1 , +1 , +1 , +1 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +1 , +1 , +1 , +1 , +1 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +1 , +1 , +0 , +0 , +1 , +1 , +1 , +1 , +0 , +0 , +0 , +0 , +1 , +1 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +1 , +1 , +1 , +1 , +1 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +1 , +1 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +1 , +0 , +1 , +1 , +0 , +1 , +1 , +0 , +1 , +1 , +1 , +1 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +0 , +1 , +1 , +0 , +1 , +1 , +1 , +1 , +0 , +1 , +1 , +1 , +1 , +1 , +1 , +1 , +0 , +0 , +1 , +1 , +0 , +0 , +1 , +1 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +1 , +1 , +0 , +0 , +1 , +1 , +0 , +1 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +1 , +0 , +0 , +0 , +1 , +1 , +0 , +1 , +1 , +1 , +1 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +1 , +1 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +0 , +1 , +1 , +0 , +0 , +1 , +1 , +1 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +0 , +1 , +1 , +0 , +1 , +1 , +1 , +1 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +1 , +1 , +0 , +0 , +1 , +1 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +1 , +1 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +0 , +1 , +1 , +0 , +1 , +1 , +1 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +1 , +1 , +0 , +0 , +1 , +1 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +1 , +0 , +0 , +1 , +1 , +0 , +0 , +1 , +1 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +1 , +1 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +1 , +1 , +0 , +0 , +1 , +1 , +0 , +0 , +1 , +1 , +0 , +0 , +1 , +1 , +0 , +0 , +1 , +1 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +1 , +1 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +1 , +1 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +1 , +1 , +0 , +0 , +1 , +1 , +0 , +0 , +1 , +1 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +1 , +1 , +1 , +1 , +1 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +0 , +1 , +1 , +1 , +1 , +1 , +1 , +0 , +0 , +0 , +0 , +1 , +1 , +1 , +1 , +0 , +0 , +1 , +1 , +1 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +1 , +1 , +1 , +1 , +1 , +0 , +1 , +1 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +1 , +0 , +1 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +1 , +0 , +0 , +1 , +1 , +0 , +1 , +1 , +1 , +1 , +1 , +1 , +1 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +1 , +1 , +1 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +1 , +1 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +1 , +1 , +1 , +0 , +0 , +1 , +1 , +1 , +1 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +1 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +1 , +1 , +1 , +1 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +1 , +1 , +0 , +0 , +1 , +1 , +0 , +1 , +1 , +1 , +1 , +1 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +1 , +1 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +1 , +1 , +0 , +0 , +1 , +1 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +1 , +1 , +1 , +1 , +1 , +1 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +1 , +1 , +0 , +0 , +1 , +1 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +1 , +1 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +1 , +1 , +0 , +0 , +1 , +1 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +1 , +0 , +1 , +1 , +0 , +1 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +1 , +1 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +1 , +1 , +0 , +1 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +1 , +1 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +1 , +1 , +0 , +0 , +1 , +1 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +1 , +1 , +1 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +1 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +1 , +1 , +1 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +1 , +1 , +1 , +1 , +1 , +0 , +0 , +0 , +0 , +1 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +0 , +1 , +1 , +0 , +1 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +1 , +1 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +0 , +1 , +1 , +0 , +1 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +1 , +1 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +0 , +1 , +1 , +0 , +1 , +0 , +1 , +1 , +0 , +0 , +1 , +1 , +1 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +1 , +0 , +1 , +1 , +0 , +0 , +1 , +1 , +0 , +0 , +1 , +1 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +1 , +1 , +0 , +1 , +1 , +0 , +0 , +1 , +1 , +1 , +1 , +1 , +1 , +1 , +0 , +0 , +1 , +1 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +1 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +1 , +1 , +1 , +1 , +0 , +0 , +1 , +1 , +0 , +0 , +1 , +1 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +1 , +0 , +1 , +1 , +1 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +1 , +1 , +1 , +0 , +0 , +1 , +1 , +1 , +0 , +0 , +1 , +1 , +0 , +0 , +1 , +1 , +1 , +1 , +1 , +0 , +0 , +0 , +0 , +1 , +1 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +1 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +1 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +1 , +1 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +1 , +1 , +0 , +0 , +1 , +1 , +1 , +1 , +1 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +0 , +0 , +0 , +1 , +1 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +1 , +1 , +1 , +1 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +1 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +1 , +1 , +0 , +0 , +0 , +0 , +1 , +1 , +1 , +1 , +0 , +0 , +0 , +0 , +1 , +1 , +1 , +1 , +1 , +0 , +0 , +0 , +0 , +1 , +1 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +1 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +1 , +0 , +1 , +1 , +0 , +0 , +1 , +1 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +1 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +1 , +0 , +0 , +1 , +1 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +1 , +0 , +1 , +1 , +0 , +0 , +1 , +1 , +0 , +1 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +1 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +0 , +1 , +1 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +1 , +1 , +0 , +1 , +1 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +0 , +1 , +1 , +1 , +1 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +1 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +1 , +1 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +1 , +1 , +1 , +1 , +1 , +0 , +0 , +1 , +1 , +0 , +0 , +1 , +1 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +1 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +1 , +1 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +1 , +1 , +0 , +0 , +1 , +1 , +1 , +1 , +1 , +1 , +1 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +1 , +1 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +0 , +1 , +0 , +1 , +1 , +0 , +0 , +1 , +1 , +0 , +0 , +1 , +1 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +1 , +1 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +1 , +1 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +1 , +1 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +0 , +1 , +0 , +1 , +1 , +0 , +0 , +1 , +1 , +0 , +0 , +1 , +1 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +1 , +1 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +1 , +1 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +1 , +1 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +0 , +1 , +0 , +1 , +1 , +0 , +0 , +1 , +1 , +0 , +0 , +1 , +1 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +1 , +1 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +0 , +1 , +1 , +0 , +0 , +1 , +1 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +1 , +1 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +0 , +1 , +0 , +1 , +1 , +0 , +0 , +1 , +1 , +0 , +0 , +1 , +1 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +1 , +0 , +1 , +1 , +0 , +0 , +1 , +1 , +1 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +1 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +1 , +0 , +1 , +1 , +0 , +0 , +1 , +1 , +1 , +1 , +1 , +0 , +0 , +1 , +1 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +1 , +1 , +1 , +0 , +0 , +1 , +1 , +1 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +1 , +1 , +1 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +1 , +1 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +1 , +1 , +0 , +0 , +1 , +1 , +0 , +0 , +1 , +1 , +1 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +1 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +1 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +1 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +0 , +1 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +1 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +1 , +0 , +1 , +1 , +0 , +1 , +1 , +0 , +1 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +1 , +1 , +1 , +0 , +0 , +1 , +1 , +1 , +1 , +1 , +1 , +0 , +0 , +1 , +1 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +1 , +1 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +0 , +1 , +1 , +1 , +1 , +1 , +1 , +1 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +1 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +1 , +1 , +0 , +1 , +1 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +1 , +0 , +1 , +1 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +1 , +1 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +1 , +1 , +0 , +1 , +1 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +0 , +1 , +1 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +1 , +1 , +0 , +1 , +1 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +1 , +1 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +1 , +1 , +0 , +1 , +1 , +0 , +1 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +1 , +1 , +0 , +0 , +1 , +1 , +0 , +1 , +1 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +1 , +1 , +0 , +1 , +1 , +0 , +1 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +1 , +1 , +0 , +0 , +1 , +1 , +0 , +1 , +1 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +1 , +1 , +0 , +1 , +1 , +0 , +1 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +1 , +1 , +0 , +0 , +1 , +1 , +0 , +1 , +1 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +0 , +1 , +1 , +0 , +1 , +1 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +1 , +1 , +1 , +1 , +0 , +0 , +1 , +1 , +1 , +1 , +1 , +1 , +1 , +0 , +0 , +1 , +1 , +0 , +1 , +1 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +1 , +1 , +1 , +1 , +1 , +0 , +0 , +1 , +1 , +1 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +1 , +1 , +1 , +0 , +0 , +1 , +1 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +1 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +1 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +1 , +1 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +1 , +1 , +1 , +1 , +1 , +1 , +0 , +1 , +1 , +1 , +1 , +1 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +1 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +1 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +1 , +1 , +1 , +1 , +1 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 , +0 ; diff --git a/src/rom_data/8x16_font_ASCII_DOS_437.gif b/src/rom_data/8x16_font_ASCII_DOS_437.gif new file mode 100644 index 0000000000000000000000000000000000000000..ecb314339a366dae8f6ffd6ddb9afc665116c9f3 GIT binary patch literal 1426 zcmV;D1#S9ANk%w1VSoUD0Du7i00030|Nkri0001h0Du4h0{)DTsmtvRqKs_LhqKS zlgD@%0~I;9BWX7Xx3_6%Ni-UkC>f_U1(`({$~YV9=zw*pR(O@`TU6+|7&!LVI|=p( z)r(5{=&W3Pno0aQ_Nh7ukqR2k>`IEg``rl*j7`0wzMi#34$9)qK3^i#2Tz}`?_vKQ zz7H_q5I5r72|S1}AwYRi=8aPb@fa>w)=ZUQXij3p{viKk#X_VfED;X|FQTjQnZ3fUI}+e7+d_Zl=de)^>ejt97Kw z#KTp)s$*mBg9nGh{@Q$Zc-1@9ANe)D#OnY4;Gb=4-*@~8Cm4LGsTQ3E_xXokcyTEa z-*%BD7NCNEU3TAR8QS)pZytUKVu&J+NMeZ~;-g4iD6XZVUsX|+++-<=vfGT~^`%pB z6gD^^jnaK|TqD&Gc2|MM0rj4I(lL1Bd1>{=lYvL>1Z8DD9YWqxt$;LEZ@Um=A$UG+ zR})?7nZqQ5P=;BdkJCA&WmG@@m)M4Jdgm5xJH}b0n?lYPq;==1R_2&f7N+B$e$uig zoJ2C3A{iH-;BPAZSiZT8iqR%x#T$*zBTBcEG8R>+7!aOTXR&`F9WVMI3 z+KIQZSi9wwYpsf;m2PDThECz?NK-Y<>DO+x-X5!|c83`n47KknD4> zqVB$mRkFc0RH(wVE&}i-2m3m&q7PqdEX5tq`6IavQ!6oxfAVFkN=ga4t6o|m`xVJa zb%<)sHs6eM&N_ce^UgA{)$Q^z9RYseA7_+wS|@!EXfghPf-PS$~PhhFXWk3%a>72WkqDozFiO zsF;!e9H~_<--gc9yg+`Sc1RD+W{x5=43m&#N)Pk8pHt1n`dr2CF{1i&dTyQsYTY!o zQHfVUV%V?D<)v3p?ojk98@;;K!1BS5X-ldYllCLPgBdVlB8y(HPG&&{hOcoj8dl>{ z*Am%X=T#eAN$x~rxcm+8WBice3~5(G;N5VCJnZ49dRDzGaV}s%^i89r1Vr2=5g|u3 z4MkcsE%XuPgW?06c9Co{FzCr`YoY@kQtbCJ_F>IzuC}@+w0(yz9mTYv5qqT17Nzc#~c!JgB*}Ep&wfq guV^_giRxJ*hCG>%PLfE6wJY2UITITn-mCxsJBGKs^#A|> literal 0 HcmV?d00001 diff --git a/src/rom_data/img2coe.py b/src/rom_data/img2coe.py new file mode 100755 index 0000000..5abc7d2 --- /dev/null +++ b/src/rom_data/img2coe.py @@ -0,0 +1,20 @@ +#!/usr/bin/env python + +import sys +import Image + +i = Image.open(sys.argv[1]).convert('L') +assert i.size == (128, 128) +print 'memory_initialization_radix=2;' +print 'memory_initialization_vector=' +for y in xrange(128): + for x in xrange(128): + if x + y > 0: + print ',' + pixel = i.getpixel((x,y)) + assert pixel in [0,255] + if pixel == 255: + print 0, + else: + print 1, +print ';' diff --git a/src/screen_position_gen.vhd b/src/screen_position_gen.vhd new file mode 100644 index 0000000..2771cb0 --- /dev/null +++ b/src/screen_position_gen.vhd @@ -0,0 +1,125 @@ +library ieee; +use ieee.std_logic_1164.all; +use ieee.numeric_std.all; +use work.types.all; + +entity screen_position_gen is + port ( + -- inputs + nrst : in std_logic; + clk108 : in std_logic; + vblank : in std_logic; + in_line_change : in std_logic; + in_page_change : in std_logic; + in_column : in integer range 0 to 1279; + in_column_change : in std_logic; + + -- outputs + segment : out integer range 0 to 15; + segment_change : out std_logic; + subsegment : out integer range 0 to 3; + subsegment_change : out std_logic; + line : out integer range 0 to 15; + out_line_change : out std_logic; + out_column : out integer range 0 to 1279; + out_column_mod_8 : out integer range 0 to 7; + out_column_div_8 : out integer range 0 to 159; + out_column_change : out std_logic; + out_page_change : out std_logic; + active_pixgen_source : out PIXGEN_SOURCE_T + ); +end screen_position_gen; + + +architecture behavioral of screen_position_gen is + signal internal_segment : integer range 0 to 15; + signal internal_subsegment : integer range 0 to 3; + signal internal_line : integer range 0 to 15; + + signal next_segment : integer range 0 to 15; + signal next_subsegment : integer range 0 to 3; + signal next_line : integer range 0 to 15; + +begin + segment <= internal_segment; + subsegment <= internal_subsegment; + line <= internal_line; + + -- This process calculates next_line, next_subsegment, next_segment signals + process (in_line_change, in_page_change, internal_segment, internal_subsegment, internal_line) is + begin + if in_page_change = '1' then + next_line <= 0; + next_subsegment <= 0; + next_segment <= 0; + else + if in_line_change = '1' then + if internal_line = 15 then + next_line <= 0; + if internal_subsegment = 3 then + next_subsegment <= 0; + if internal_segment = 15 then + next_segment <= 0; + else + next_segment <= internal_segment + 1; + end if; + else + next_subsegment <= internal_subsegment + 1; + next_segment <= internal_segment; + end if; + else + next_line <= internal_line + 1; + next_subsegment <= internal_subsegment; + next_segment <= internal_segment; + end if; + else + next_line <= internal_line; + next_subsegment <= internal_subsegment; + next_segment <= internal_segment; + end if; + end if; + end process; + + -- This proces generates all output signals + process (clk108, nrst) is + begin + if nrst = '0' then + + elsif rising_edge (clk108) then + internal_line <= next_line; + internal_subsegment <= next_subsegment; + internal_segment <= next_segment; + out_line_change <= in_line_change; + + if internal_subsegment /= next_subsegment then + subsegment_change <= '1'; + else + subsegment_change <= '0'; + end if; + + if internal_segment /= next_segment then + segment_change <= '1'; + else + segment_change <= '0'; + end if; + + out_column <= in_column; + out_column_mod_8 <= in_column mod 8; + out_column_div_8 <= in_column / 8; + out_column_change <= in_column_change; + out_page_change <= in_page_change; + + if vblank = '1' then + active_pixgen_source <= BLANK_PIXGEN_T; + elsif next_segment < 14 then + if next_subsegment /= 3 then + active_pixgen_source <= TRACE_PIXGEN_T; + else + active_pixgen_source <= TIME_BASE_PIXGEN_T; + end if; + else + active_pixgen_source <= SETTINGS_PIXGEN_T; + end if; + end if; + end process; +end architecture behavioral; diff --git a/src/settings.vhd b/src/settings.vhd new file mode 100644 index 0000000..ce1f9fa --- /dev/null +++ b/src/settings.vhd @@ -0,0 +1,82 @@ +---------------------------------------------------------------------------------- +-- Author: Osowski Marcin +-- Create Date: 13:36:26 05/24/2011 +---------------------------------------------------------------------------------- +library ieee; +use ieee.std_logic_1164.all; +use ieee.numeric_std.all; +use work.types.all; + + +entity settings is + port ( + -- Inputs + nrst : in std_logic; + clk108 : in std_logic; + sw : in std_logic_vector (6 downto 0); + btn : in std_logic_vector (2 downto 0); + + -- Outputs + trigger_btn : out std_logic := '0'; + trigger_event : out TRIGGER_EVENT_T; + red_enable : out std_logic := '0'; + green_enable : out std_logic := '0'; + blue_enable : out std_logic := '0'; + continue_after_reading : out std_logic; + time_resolution : out integer range 0 to 15 := 0 + ); +end settings; + +architecture behavioral of settings is + signal prev_btn_1 : std_logic := '0'; + signal prev_btn_2 : std_logic := '0'; + + signal internal_continue_after_reading : std_logic := '0'; + signal internal_trigger_event : TRIGGER_EVENT_T := BUTTON_TRIGGER_T; + +begin + continue_after_reading <= internal_continue_after_reading; + trigger_event <= internal_trigger_event; + + process (nrst, clk108) is + begin + if nrst = '0' then + trigger_btn <= '0'; + internal_trigger_event <= BUTTON_TRIGGER_T; + red_enable <= '0'; + green_enable <= '0'; + blue_enable <= '0'; + internal_continue_after_reading <= '0'; + time_resolution <= 0; + prev_btn_1 <= '0'; + prev_btn_2 <= '0'; + elsif rising_edge (clk108) then + trigger_btn <= btn (0); + + prev_btn_2 <= btn (2); + if btn (2) = '1' and prev_btn_2 = '0' then + -- cycle through available modes + if internal_trigger_event = BUTTON_TRIGGER_T then + internal_trigger_event <= RED_TRIGGER_T; + elsif internal_trigger_event = RED_TRIGGER_T then + internal_trigger_event <= GREEN_TRIGGER_T; + elsif internal_trigger_event = GREEN_TRIGGER_T then + internal_trigger_event <= BLUE_TRIGGER_T; + elsif internal_trigger_event = BLUE_TRIGGER_T then + internal_trigger_event <= BUTTON_TRIGGER_T; + end if; + end if; + + red_enable <= sw (6); + green_enable <= sw (5); + blue_enable <= sw (4); + + prev_btn_1 <= btn (1); + if btn (1) = '1' and prev_btn_1 = '0' then + internal_continue_after_reading <= not internal_continue_after_reading; + end if; + time_resolution <= to_integer (unsigned (sw (3 downto 0))); + end if; + end process; + +end behavioral; \ No newline at end of file diff --git a/src/settings_pixgen.vhd b/src/settings_pixgen.vhd new file mode 100644 index 0000000..e0391d8 --- /dev/null +++ b/src/settings_pixgen.vhd @@ -0,0 +1,240 @@ +---------------------------------------------------------------------------------- +-- Author: Osowski Marcin +-- Create Date: 20:16:43 05/22/2011 +---------------------------------------------------------------------------------- +library ieee; +use ieee.std_logic_1164.all; +use ieee.std_logic_unsigned.all; +use ieee.numeric_std.all; +use work.types.all; + +entity settings_pixgen is + port ( + nrst : in std_logic; + clk108 : in std_logic; + segment : in integer range 0 to 15; + segment_change : in std_logic; + subsegment : in integer range 0 to 3; + subsegment_change : in std_logic; + line : in integer range 0 to 15; + line_change : in std_logic; + column : in integer range 0 to 1279; + column_mod_8 : in integer range 0 to 7; + column_div_8 : in integer range 0 to 159; + column_change : in std_logic; + page_change : in std_logic; + active_pixgen_source : in PIXGEN_SOURCE_T; + is_reading_active : in std_logic; + trigger_event : in TRIGGER_EVENT_T; + red_enable : in std_logic; + green_enable : in std_logic; + blue_enable : in std_logic; + continue_after_reading : in std_logic; + time_resolution : in integer range 0 to 15; + char : out short_character; + char_pixel : in std_logic; + vout : out std_logic_vector (7 downto 0) + ); +end settings_pixgen; + +architecture behavioral of settings_pixgen is + constant s_red_sig : short_string := to_short_string (" Red signal (C6): ???abled (SW6)"); + constant s_green_sig : short_string := to_short_string ("Green signal (B6): ???abled (SW5)"); + constant s_blue_sig : short_string := to_short_string (" Blue signal (C5): ???abled (SW4)"); + constant s_enabled : short_string := to_short_string (" en"); + constant s_disabled : short_string := to_short_string ("dis"); + + constant s_resolution : short_string := to_short_string (" Resolution: ???????? (SW3 ~ SW0)"); + constant s_trigger : short_string := to_short_string (" Trigger on: ???????? (BTN2 to change)"); + constant s_after : short_string := to_short_string ("After reading: ???????? (BTN1 to change)"); + + type res_array_t is array (0 to 15) of short_string (7 downto 0); + + constant res_array : res_array_t := ( + to_short_string (" 54 Mhz"), + to_short_string ("21.6 Mhz"), + to_short_string ("10.8 Mhz"), + to_short_string (" 5.4 Mhz"), + to_short_string (" 1 Mhz"), + to_short_string (" 500 khz"), + to_short_string (" 250 khz"), + to_short_string (" 100 khz"), + to_short_string (" 50 khz"), + to_short_string (" 25 khz"), + to_short_string (" 10 khz"), + to_short_string (" 5 khz"), + to_short_string (" 2.5 khz"), + to_short_string (" 1 khz"), + to_short_string (" 500 hz"), + to_short_string (" 250 hz") + ); + + constant s_btn0 : short_string := to_short_string (" BTN0"); + constant s_red : short_string := to_short_string (" red"); + constant s_green : short_string := to_short_string (" green"); + constant s_blue : short_string := to_short_string (" blue"); + + constant s_continue : short_string := to_short_string ("continue"); + constant s_stop : short_string := to_short_string (" stop"); + + constant s_reading_active : short_string := to_short_string (" Running... (press BTN0 to stop)"); + constant s_reading_stopped : short_string := to_short_string ("Stopped. Waiting for trigger event."); + + +begin + process (nrst, clk108) is + begin + if nrst = '0' then + char <= character_conv_table (0); + elsif rising_edge (clk108) then + if segment = 14 then + -- Upper settings segment (segment = 14) + if subsegment = 0 then + -- Red subsegment + if column_div_8 < 19 then + char <= s_red_sig (column_div_8); + elsif column_div_8 < 22 then + if red_enable = '1' then + char <= s_enabled (column_div_8 - 19); + else + char <= s_disabled (column_div_8 - 19); + end if; + elsif column_div_8 < s_red_sig'length then + char <= s_red_sig (column_div_8); + else + char <= to_short_character (' '); + end if; + + + elsif subsegment = 1 then + -- Green subsegment + if column_div_8 < 19 then + char <= s_green_sig (column_div_8); + elsif column_div_8 < 22 then + if green_enable = '1' then + char <= s_enabled (column_div_8 - 19); + else + char <= s_disabled (column_div_8 - 19); + end if; + elsif column_div_8 < s_green_sig'length then + char <= s_green_sig (column_div_8); + else + char <= to_short_character (' '); + end if; + + + elsif subsegment = 2 then + -- Blue subsegment + if column_div_8 < 19 then + char <= s_blue_sig (column_div_8); + elsif column_div_8 < 22 then + if blue_enable = '1' then + char <= s_enabled (column_div_8 - 19); + else + char <= s_disabled (column_div_8 - 19); + end if; + elsif column_div_8 < s_blue_sig'length then + char <= s_blue_sig (column_div_8); + else + char <= to_short_character (' '); + end if; + + + else + -- Empty subsegment + char <= to_short_character (' '); + end if; + + + else + -- Lower settings segment (segment = 15) + if subsegment = 0 then + -- Resolution subsegment + if column_div_8 < 15 then + char <= s_resolution (column_div_8); + elsif column_div_8 < 23 then + char <= res_array (time_resolution) (column_div_8 - 15); + elsif column_div_8 < s_resolution'length then + char <= s_resolution (column_div_8); + else + char <= to_short_character (' '); + end if; + + + elsif subsegment = 1 then + -- Trigger subsegment + if column_div_8 < 15 then + char <= s_trigger (column_div_8); + elsif column_div_8 < 23 then + if trigger_event = RED_TRIGGER_T then + char <= s_red (column_div_8 - 15); + elsif trigger_event = GREEN_TRIGGER_T then + char <= s_green (column_div_8 - 15); + elsif trigger_event = BLUE_TRIGGER_T then + char <= s_blue (column_div_8 - 15); + else + char <= s_btn0 (column_div_8 - 15); + end if; + elsif column_div_8 < s_trigger'length then + char <= s_trigger (column_div_8); + else + char <= to_short_character (' '); + end if; + + + elsif subsegment = 2 then + -- Behaviour after reading subsegment + if column_div_8 < 15 then + char <= s_after (column_div_8); + elsif column_div_8 < 23 then + if continue_after_reading = '1' then + char <= s_continue (column_div_8 - 15); + else + char <= s_stop (column_div_8 - 15); + end if; + elsif column_div_8 < s_after'length then + char <= s_after (column_div_8); + else + char <= to_short_character (' '); + end if; + + + else + -- Status subsegment. + if column_div_8 < 125 then + char <= to_short_character (' '); + else + if is_reading_active = '1' then + char <= s_reading_active (column_div_8 - 125); + else + char <= s_reading_stopped (column_div_8 - 125); + end if; + end if; + end if; + + end if; + end if; + end process; + + process (char_pixel, segment, subsegment) is + begin + if char_pixel = '1' then + if segment = 14 then + if subsegment = 0 then + vout <= "11100000"; + elsif subsegment = 1 then + vout <= "00011100"; + elsif subsegment = 2 then + vout <= "00000011"; + else + vout <= "11111111"; + end if; + else + vout <= "11111111"; + end if; + else + vout <= "00000000"; + end if; + end process; +end behavioral; + diff --git a/src/single_debouncer.vhd b/src/single_debouncer.vhd new file mode 100644 index 0000000..4f8ba59 --- /dev/null +++ b/src/single_debouncer.vhd @@ -0,0 +1,45 @@ +---------------------------------------------------------------------------------- +-- Author: Osowski Marcin +-- Create Date: 15:03:57 05/24/2011 +---------------------------------------------------------------------------------- +library ieee; +use ieee.std_logic_1164.all; +use ieee.numeric_std.all; + + +entity single_debouncer is + generic ( + n : natural := 5000 + ); + port ( + nrst : in std_logic; + clk : in std_logic; + input : in std_logic; + output : out std_logic + ); +end single_debouncer; + +architecture behavioral of single_debouncer is + signal counter: natural range 0 to n := 0; + signal output2: std_logic := '0'; +begin + output <= output2; + process (clk, nrst) is + begin + if nrst = '0' then + counter <= 0; + output2 <= '0'; + elsif rising_edge (clk) then + if counter >= n then + if output2 /= input then + output2 <= input; + counter <= 0; + end if; + else + counter <= counter + 1; + end if; + end if; + end process; +end behavioral; + + diff --git a/src/tests/test_bits_aggregator.vhd b/src/tests/test_bits_aggregator.vhd new file mode 100644 index 0000000..2c77bfd --- /dev/null +++ b/src/tests/test_bits_aggregator.vhd @@ -0,0 +1,171 @@ +-------------------------------------------------------------------------------- +-- Company: +-- Engineer: +-- +-- Create Date: 20:19:19 05/27/2011 +-- Design Name: +-- Module Name: /home/xiadz/prog/fpga/oscilloscope/test_bits_aggregator.vhd +-- Project Name: oscilloscope +-- Target Device: +-- Tool versions: +-- Description: +-- +-- VHDL Test Bench Created by ISE for module: bits_aggregator +-- +-- Dependencies: +-- +-- Revision: +-- Revision 0.01 - File Created +-- Additional Comments: +-- +-- Notes: +-- This testbench has been automatically generated using types std_logic and +-- std_logic_vector for the ports of the unit under test. Xilinx recommends +-- that these types always be used for the top-level I/O of a design in order +-- to guarantee that the testbench will bind correctly to the post-implementation +-- simulation model. +-------------------------------------------------------------------------------- +LIBRARY ieee; +USE ieee.std_logic_1164.ALL; + USE ieee.std_logic_unsigned.ALL; +USE ieee.numeric_std.ALL; + +ENTITY test_bits_aggregator IS +END test_bits_aggregator; + +ARCHITECTURE behavior OF test_bits_aggregator IS + + -- Component Declaration for the Unit Under Test (UUT) + + COMPONENT bits_aggregator + PORT( + nrst : IN std_logic; + clk108 : IN std_logic; + flush_and_return_to_zero : IN std_logic; + write_enable : IN std_logic; + red_value : IN std_logic; + green_value : IN std_logic; + blue_value : IN std_logic; + wea : OUT std_logic; + addra : OUT std_logic_vector(12 downto 0); + dina : OUT std_logic_vector(8 downto 0) + ); + END COMPONENT; + + + --Inputs + signal nrst : std_logic := '0'; + signal clk108 : std_logic := '0'; + signal flush_and_return_to_zero : std_logic := '0'; + signal write_enable : std_logic := '0'; + signal red_value : std_logic := '0'; + signal green_value : std_logic := '0'; + signal blue_value : std_logic := '0'; + + --Outputs + signal wea : std_logic; + signal addra : std_logic_vector(12 downto 0); + signal dina : std_logic_vector(8 downto 0); + + + signal rgb : std_logic_vector (2 downto 0) := (others => '0'); + + -- Clock period definitions + constant clk108_period : time := 10 ns; + +BEGIN + + -- Instantiate the Unit Under Test (UUT) + uut: bits_aggregator PORT MAP ( + nrst => nrst, + clk108 => clk108, + flush_and_return_to_zero => flush_and_return_to_zero, + write_enable => write_enable, + red_value => red_value, + green_value => green_value, + blue_value => blue_value, + wea => wea, + addra => addra, + dina => dina + ); + + -- Clock process definitions + clk108_process :process + begin + clk108 <= '0'; + wait for clk108_period/2; + clk108 <= '1'; + wait for clk108_period/2; + end process; + + + -- Stimulus process + stim_proc: process + variable mod3 : integer range 0 to 3 := 0; + variable sent_row : std_logic_vector (8 downto 0) := (others => '0'); + begin + -- hold reset state for 100 ns. + nrst <= '0'; + wait for 100 ns; + nrst <= '1'; + + wait for clk108_period*10; + + + while true loop + assert mod3 = 0 report "Unit-test internal error"; + for i in 1 to 99 loop + wait for clk108_period; + red_value <= rgb (0); + green_value <= rgb (1); + blue_value <= rgb (2); + sent_row ((mod3 * 3) + 2 downto mod3 * 3) := rgb; + wait for clk108_period; + write_enable <= '1'; + wait for clk108_period; + write_enable <= '0'; + wait for clk108_period; + rgb <= rgb + 1; + + mod3 := mod3 + 1; + if mod3 = 3 then + mod3 := 0; + assert sent_row = dina report "Entity generated improper memory input"; + end if; + end loop; + + assert mod3 = 0 report "Unit-test internal error"; + + -- Testing flush_and_return_to_zero + wait for clk108_period * 10; + write_enable <= '1'; + flush_and_return_to_zero <= '1'; + wait for clk108_period; + write_enable <= '0'; + flush_and_return_to_zero <= '0'; + wait for clk108_period; + assert "000000" & (rgb - 1) = dina report "Entity generated improper memory input after flushing"; + + + -- Now writing 3 bytes. After successbul flush they should be sent to memory row 0 + write_enable <= '1'; + wait for clk108_period; + assert addra /= "0000000000000" report "Address after flushing went to zero too fast"; + wait for clk108_period; + assert addra /= "0000000000000" report "Address after flushing went to zero too fast"; + wait for clk108_period; + write_enable <= '0'; + assert addra = "0000000000000" report "Address after flushing didn't go to zero."; + assert dina = (rgb - 1) & (rgb - 1) & (rgb - 1) report "Improper dina signal after flushing and writing full word."; + + + --assert addra = "0000000000000" report "Address after flushing is not zero"; + + + end loop; + + + wait; + end process; + +END; diff --git a/src/tests/test_char_rom_mux.vhd b/src/tests/test_char_rom_mux.vhd new file mode 100644 index 0000000..393c38d --- /dev/null +++ b/src/tests/test_char_rom_mux.vhd @@ -0,0 +1,160 @@ +-------------------------------------------------------------------------------- +-- Company: +-- Engineer: +-- +-- Create Date: 19:31:59 05/28/2011 +-- Design Name: +-- Module Name: /home/xiadz/prog/fpga/oscilloscope/test_char_rom_mux.vhd +-- Project Name: oscilloscope +-- Target Device: +-- Tool versions: +-- Description: +-- +-- VHDL Test Bench Created by ISE for module: char_rom_mux +-- +-- Dependencies: +-- +-- Revision: +-- Revision 0.01 - File Created +-- Additional Comments: +-- +-- Notes: +-- This testbench has been automatically generated using types std_logic and +-- std_logic_vector for the ports of the unit under test. Xilinx recommends +-- that these types always be used for the top-level I/O of a design in order +-- to guarantee that the testbench will bind correctly to the post-implementation +-- simulation model. +-------------------------------------------------------------------------------- +library ieee; +use ieee.std_logic_1164.all; +use ieee.numeric_std.all; +use work.types.all; + +ENTITY test_char_rom_mux IS +END test_char_rom_mux; + +ARCHITECTURE behavior OF test_char_rom_mux IS + + -- Component Declaration for the Unit Under Test (UUT) + + COMPONENT char_rom_mux + PORT( + nrst : IN std_logic; + clk108 : IN std_logic; + active_pixgen_source : IN PIXGEN_SOURCE_T; + time_base_char : IN short_character; + time_base_char_pos_x : IN integer range 0 to 7; + time_base_char_pos_y : IN integer range 0 to 15; + settings_char : IN short_character; + settings_char_pos_x : IN integer range 0 to 7; + settings_char_pos_y : IN integer range 0 to 15; + char_pixel : OUT std_logic + ); + END COMPONENT; + + + --Inputs + signal nrst : std_logic := '0'; + signal clk108 : std_logic := '0'; + signal active_pixgen_source : PIXGEN_SOURCE_T := BLANK_PIXGEN_T; + signal time_base_char : short_character := short_character'val (0); + signal time_base_char_pos_x : integer range 0 to 7 := 0; + signal time_base_char_pos_y : integer range 0 to 15 := 0; + signal settings_char : short_character := short_character'val (0); + signal settings_char_pos_x : integer range 0 to 7 := 0; + signal settings_char_pos_y : integer range 0 to 15 := 0; + + --Outputs + signal char_pixel : std_logic; + + -- Clock period definitions + constant clk108_period : time := 10 ns; + + type chars_8 is array (0 to 7) of character; + + type letter is array (0 to 15) of chars_8; + constant a_letter : letter := + ( "--------", + "--------", + "---X----", + "--XXX---", + "-XX-XX--", + "XX---XX-", + "XX---XX-", + "XXXXXXX-", + "XX---XX-", + "XX---XX-", + "XX---XX-", + "XX---XX-", + "--------", + "--------", + "--------", + "--------" ); + + + +BEGIN + + -- Instantiate the Unit Under Test (UUT) + uut: char_rom_mux PORT MAP ( + nrst => nrst, + clk108 => clk108, + active_pixgen_source => active_pixgen_source, + time_base_char => time_base_char, + time_base_char_pos_x => time_base_char_pos_x, + time_base_char_pos_y => time_base_char_pos_y, + settings_char => settings_char, + settings_char_pos_x => settings_char_pos_x, + settings_char_pos_y => settings_char_pos_y, + char_pixel => char_pixel + ); + + -- Clock process definitions + clk108_process :process + begin + clk108 <= '0'; + wait for clk108_period/2; + clk108 <= '1'; + wait for clk108_period/2; + end process; + + + -- Stimulus process + stim_proc: process + begin + -- hold reset state for 100 ns. + nrst <= '0'; + wait for 100 ns; + nrst <= '1'; + wait for clk108_period*10; + + -- Testing memory against some random character: 'A' + active_pixgen_source <= TIME_BASE_PIXGEN_T; + time_base_char <= 'A'; + time_base_char_pos_y <= 0; + for y in 0 to 15 loop + time_base_char_pos_x <= 0; + for x in 0 to 7 loop + wait for clk108_period; + if char_pixel = '1' then + assert a_letter (y)(x) = 'X' report "char_pixel should be '1', but is not"; + else + assert a_letter (y)(x) = '-' report "char_pixel should be '0', but is not"; + end if; + + if time_base_char_pos_x = 7 then + time_base_char_pos_x <= 0; + else + time_base_char_pos_x <= time_base_char_pos_x + 1; + end if; + end loop; + if time_base_char_pos_y = 15 then + time_base_char_pos_y <= 0; + else + time_base_char_pos_y <= time_base_char_pos_y + 1; + end if; + end loop; + wait; + end process; + +END; diff --git a/src/tests/test_clock_divider.vhd b/src/tests/test_clock_divider.vhd new file mode 100644 index 0000000..3ed4e9b --- /dev/null +++ b/src/tests/test_clock_divider.vhd @@ -0,0 +1,97 @@ +-------------------------------------------------------------------------------- +-- Company: +-- Engineer: +-- +-- Create Date: 15:15:48 05/28/2011 +-- Design Name: +-- Module Name: /home/xiadz/prog/fpga/oscilloscope/test_clock_divider.vhd +-- Project Name: oscilloscope +-- Target Device: +-- Tool versions: +-- Description: +-- +-- VHDL Test Bench Created by ISE for module: divider +-- +-- Dependencies: +-- +-- Revision: +-- Revision 0.01 - File Created +-- Additional Comments: +-- +-- Notes: +-- This testbench has been automatically generated using types std_logic and +-- std_logic_vector for the ports of the unit under test. Xilinx recommends +-- that these types always be used for the top-level I/O of a design in order +-- to guarantee that the testbench will bind correctly to the post-implementation +-- simulation model. +-------------------------------------------------------------------------------- +LIBRARY ieee; +USE ieee.std_logic_1164.ALL; + +-- Uncomment the following library declaration if using +-- arithmetic functions with Signed or Unsigned values +--USE ieee.numeric_std.ALL; + +ENTITY test_clock_divider IS +END test_clock_divider; + +ARCHITECTURE behavior OF test_clock_divider IS + + -- Component Declaration for the Unit Under Test (UUT) + + COMPONENT divider + GENERIC (n: natural range 1 to 2147483647 := 5); + PORT( + clk_in : IN std_logic; + nrst : IN std_logic; + clk_out : OUT std_logic + ); + END COMPONENT; + + + --Inputs + signal clk_in : std_logic := '0'; + signal nrst : std_logic := '0'; + + --Output + signal clk_out : std_logic; + + -- Clock period definitions + constant clk_in_period : time := 10 ns; + + constant c : character := character'val(0); + +BEGIN + + -- Instantiate the Unit Under Test (UUT) + uut: divider PORT MAP ( + clk_in => clk_in, + nrst => nrst, + clk_out => clk_out + ); + + -- Clock process definitions + clk_in_process :process + begin + clk_in <= '0'; + wait for clk_in_period/2; + clk_in <= '1'; + wait for clk_in_period/2; + end process; + + -- Stimulus process + stim_proc: process + begin + -- hold reset state for 100 ns. + nrst <= '0'; + wait for 100 ns; + nrst <= '1'; + wait for clk_in_period*10; + + + -- insert stimulus here + + wait; + end process; + +END; diff --git a/src/tests/test_compiler_error.vhd b/src/tests/test_compiler_error.vhd new file mode 100644 index 0000000..bbb85d5 --- /dev/null +++ b/src/tests/test_compiler_error.vhd @@ -0,0 +1,28 @@ +LIBRARY ieee; +USE ieee.std_logic_1164.ALL; +USE ieee.std_logic_unsigned.ALL; + +ENTITY test_compiler_error IS +END test_compiler_error; + +ARCHITECTURE behavior OF test_compiler_error IS + signal output : std_logic_vector(7 downto 0); +BEGIN + stim_proc: process + variable i:integer; + begin + -- Release version : ISE 13.1 lin64 + -- Application Version: O.40d + -- Behavioral simulation + -- + -- Uncomment the below two lines to get an Internal Compiler Error + --for i in 0 to 9 loop + --end loop; + + assert output = (others => '1') report "Should be equal '1', but is not"; + end process; +END; + + +-- Compiler complains: +-- FATAL_ERROR:Simulator:CompilerAssert.h:40:1.65 - Internal Compiler Error in file ../src/VhdlExpr.cpp at line 5262 Process will terminate. For technical support on this issue, please open a WebCase with this project attached at http://www.xilinx.com/support. diff --git a/src/tests/test_debouncer.vhd b/src/tests/test_debouncer.vhd new file mode 100644 index 0000000..5cc3e6a --- /dev/null +++ b/src/tests/test_debouncer.vhd @@ -0,0 +1,132 @@ +-------------------------------------------------------------------------------- +-- Company: +-- Engineer: +-- +-- Create Date: 15:28:48 05/24/2011 +-- Design Name: +-- Module Name: /home/xiadz/prog/fpga/oscilloscope/test_debouncer.vhd +-- Project Name: oscilloscope +-- Target Device: +-- Tool versions: +-- Description: +-- +-- VHDL Test Bench Created by ISE for module: debouncer +-- +-- Dependencies: +-- +-- Revision: +-- Revision 0.01 - File Created +-- Additional Comments: +-- +-- Notes: +-- This testbench has been automatically generated using types std_logic and +-- std_logic_vector for the ports of the unit under test. Xilinx recommends +-- that these types always be used for the top-level I/O of a design in order +-- to guarantee that the testbench will bind correctly to the post-implementation +-- simulation model. +-------------------------------------------------------------------------------- +LIBRARY ieee; +USE ieee.std_logic_1164.ALL; +USE ieee.std_logic_unsigned.ALL; + +-- Uncomment the following library declaration if using +-- arithmetic functions with Signed or Unsigned values +--USE ieee.numeric_std.ALL; + +ENTITY test_debouncer IS +END test_debouncer; + +ARCHITECTURE behavior OF test_debouncer IS + + -- Component Declaration for the Unit Under Test (UUT) + constant n : natural := 5; + constant signal_width : natural := 8; + + COMPONENT debouncer + GENERIC ( + n : natural := n; + signal_width : natural := signal_width + ); + PORT( + nrst : IN std_logic; + clk : IN std_logic; + input : IN std_logic_vector(signal_width - 1 downto 0); + output : OUT std_logic_vector(signal_width - 1 downto 0) + ); + END COMPONENT; + + + --Inputs + signal nrst : std_logic := '0'; + signal clk : std_logic := '0'; + signal input : std_logic_vector(signal_width - 1 downto 0) := (others => '0'); + + --Outputs + signal output : std_logic_vector(signal_width - 1 downto 0); + signal ones : std_logic_vector(signal_width - 1 downto 0) := (others => '1'); + signal zeros : std_logic_vector(signal_width - 1 downto 0) := (others => '0'); + + + -- Clock period definitions + constant clk_period : time := 10 ns; + +BEGIN + + -- Instantiate the Unit Under Test (UUT) + uut: debouncer PORT MAP ( + nrst => nrst, + clk => clk, + input => input, + output => output + ); + + -- Clock process definitions + clk_process :process + begin + clk <= '0'; + wait for clk_period/2; + clk <= '1'; + wait for clk_period/2; + end process; + + + -- Stimulus process + stim_proc: process + variable i:integer; + begin + -- hold reset state for 100 ns. + nrst <= '0'; + wait for 100 ns; + nrst <= '1'; + + wait for clk_period * 10; + + while true loop + for i in 0 to 9 loop + input <= not input; + wait for clk_period; + assert output = input report "Should be equal, but is not"; + wait for clk_period * (n + 1); + end loop; + + input <= zeros; + wait for clk_period * (n + 1); + input <= ones; + wait for clk_period; + for i in 1 to n loop + input <= zeros; + wait for clk_period / 2; + assert output = ones report "Should be equal '1', but is not"; + input <= ones; + wait for clk_period / 2; + assert output = ones report "Should be equal '1', but is not"; + end loop; + + wait for clk_period * (n + 1); + + end loop; + + wait; + end process; + +END; diff --git a/src/tests/test_n_cycles_delayer.vhd b/src/tests/test_n_cycles_delayer.vhd new file mode 100644 index 0000000..382fc0c --- /dev/null +++ b/src/tests/test_n_cycles_delayer.vhd @@ -0,0 +1,114 @@ +-------------------------------------------------------------------------------- +-- Company: +-- Engineer: +-- +-- Create Date: 17:45:56 05/22/2011 +-- Design Name: +-- Module Name: /home/xiadz/prog/fpga/oscilloscope/test_n_cycles_delayer.vhd +-- Project Name: oscilloscope +-- Target Device: +-- Tool versions: +-- Description: +-- +-- VHDL Test Bench Created by ISE for module: n_cycles_delayer +-- +-- Dependencies: +-- +-- Revision: +-- Revision 0.01 - File Created +-- Additional Comments: +-- +-- Notes: +-- This testbench has been automatically generated using types std_logic and +-- std_logic_vector for the ports of the unit under test. Xilinx recommends +-- that these types always be used for the top-level I/O of a design in order +-- to guarantee that the testbench will bind correctly to the post-implementation +-- simulation model. +-------------------------------------------------------------------------------- +LIBRARY ieee; +USE ieee.std_logic_1164.ALL; +USE ieee.std_logic_unsigned.ALL; + +-- Uncomment the following library declaration if using +-- arithmetic functions with Signed or Unsigned values +--USE ieee.numeric_std.ALL; + +ENTITY test_n_cycles_delayer IS +END test_n_cycles_delayer; + +ARCHITECTURE behavior OF test_n_cycles_delayer IS + + -- Component Declaration for the Unit Under Test (UUT) + + COMPONENT n_cycles_delayer + GENERIC ( + n : integer range 1 to 1024 := 5; + signal_width : integer range 1 to 1024 := 8 + ); + PORT( + nrst : IN std_logic; + clk : IN std_logic; + input : IN std_logic_vector(7 downto 0); + output : OUT std_logic_vector(7 downto 0) + ); + END COMPONENT; + + + --Inputs + signal nrst : std_logic := '0'; + signal clk : std_logic := '0'; + signal input : std_logic_vector(7 downto 0) := (others => '0'); + + --Outputs + signal output : std_logic_vector(7 downto 0); + + -- Clock period definitions + constant clk_period : time := 10 ns; + +BEGIN + + -- Instantiate the Unit Under Test (UUT) + uut: n_cycles_delayer + + PORT MAP ( + nrst => nrst, + clk => clk, + input => input, + output => output + ); + + -- Clock process definitions + clk_process :process + begin + clk <= '0'; + wait for clk_period/2; + clk <= '1'; + wait for clk_period/2; + end process; + + + -- Stimulus process + stim_proc: process is + variable i, j : std_logic_vector (7 downto 0); + begin + -- hold reset state for 105 ns. + nrst <= '0'; + wait for clk_period * 10; + nrst <= '1'; + wait for clk_period * 10; + + i := (others => '0'); + while true loop + i := i + 1; + input <= i; + for j in 0 to 3 loop + wait for clk_period; + assert output /= input report "Should not match"; + end loop; + wait for clk_period * 2; + assert output = input report "Should match"; + end loop; + wait; + end process; + +END; diff --git a/src/tests/test_oscilloscope_display.vhd b/src/tests/test_oscilloscope_display.vhd new file mode 100644 index 0000000..9fa1674 --- /dev/null +++ b/src/tests/test_oscilloscope_display.vhd @@ -0,0 +1,141 @@ +-------------------------------------------------------------------------------- +-- Company: +-- Engineer: +-- +-- Create Date: 12:01:11 05/24/2011 +-- Design Name: +-- Module Name: /home/xiadz/prog/fpga/oscilloscope/test_oscilloscope_display.vhd +-- Project Name: oscilloscope +-- Target Device: +-- Tool versions: +-- Description: +-- +-- VHDL Test Bench Created by ISE for module: oscilloscope_display +-- +-- Dependencies: +-- +-- Revision: +-- Revision 0.01 - File Created +-- Additional Comments: +-- +-- Notes: +-- This testbench has been automatically generated using types std_logic and +-- std_logic_vector for the ports of the unit under test. Xilinx recommends +-- that these types always be used for the top-level I/O of a design in order +-- to guarantee that the testbench will bind correctly to the post-implementation +-- simulation model. +-------------------------------------------------------------------------------- +LIBRARY ieee; +USE ieee.std_logic_1164.ALL; +USE ieee.std_logic_unsigned.ALL; +USE ieee.numeric_std.ALL; +USE work.types.ALL; + +-- Uncomment the following library declaration if using +-- arithmetic functions with Signed or Unsigned values +--USE ieee.numeric_std.ALL; + +ENTITY test_oscilloscope_display IS +END test_oscilloscope_display; + +ARCHITECTURE behavior OF test_oscilloscope_display IS + + -- Component Declaration for the Unit Under Test (UUT) + + COMPONENT oscilloscope_display + PORT( + nrst : IN std_logic; + clk108 : IN std_logic; + is_reading_active : in std_logic; + trigger_event : in TRIGGER_EVENT_T; + red_enable : in std_logic; + green_enable : in std_logic; + blue_enable : in std_logic; + continue_after_reading : in std_logic; + time_resolution : in integer range 0 to 15; + addrb : OUT std_logic_vector(12 downto 0); + doutb : IN std_logic_vector(8 downto 0); + vout : OUT std_logic_vector(7 downto 0); + vsync : OUT std_logic; + hsync : OUT std_logic + ); + END COMPONENT; + + + --Inputs + signal nrst : std_logic := '0'; + signal clk108 : std_logic := '0'; + signal doutb : std_logic_vector(8 downto 0) := (others => '0'); + + + + signal is_reading_active : std_logic := '0'; + signal trigger_event : TRIGGER_EVENT_T := BUTTON_TRIGGER_T; + signal red_enable : std_logic := '1'; + signal green_enable : std_logic := '1'; + signal blue_enable : std_logic := '1'; + signal continue_after_reading : std_logic := '0'; + signal time_resolution : integer range 0 to 15; + + + --Outputs + signal addrb : std_logic_vector(12 downto 0); + signal vout : std_logic_vector(7 downto 0); + signal vsync : std_logic; + signal hsync : std_logic; + + -- Clock period definitions + constant clk108_period : time := 10 ns; + + -- Locals + signal clock_periods : std_logic_vector (15 downto 0) := (others => '0'); + +BEGIN + + -- Instantiate the Unit Under Test (UUT) + uut: oscilloscope_display PORT MAP ( + nrst => nrst, + clk108 => clk108, + is_reading_active => is_reading_active, + trigger_event => trigger_event, + red_enable => red_enable, + green_enable => green_enable, + blue_enable => blue_enable, + continue_after_reading => continue_after_reading, + time_resolution => time_resolution, + addrb => addrb, + doutb => doutb, + vout => vout, + vsync => vsync, + hsync => hsync + ); + + -- Clock process definitions + clk108_process :process + begin + clk108 <= '0'; + wait for clk108_period/2; + clk108 <= '1'; + if nrst = '1' then + clock_periods <= clock_periods + 1; + end if; + wait for clk108_period/2; + end process; + + + -- Stimulus process + stim_proc: process + begin + -- hold reset state for 100 ns. + nrst <= '0'; + wait for clk108_period * 10; + nrst <= '1'; + + wait for clk108_period * 10; + + -- insert stimulus here + + wait; + end process; + +END; diff --git a/src/tests/test_reader.vhd b/src/tests/test_reader.vhd new file mode 100644 index 0000000..851c3cf --- /dev/null +++ b/src/tests/test_reader.vhd @@ -0,0 +1,178 @@ +-------------------------------------------------------------------------------- +-- Company: +-- Engineer: +-- +-- Create Date: 16:54:34 05/24/2011 +-- Design Name: +-- Module Name: /home/xiadz/prog/fpga/oscilloscope/test_reader.vhd +-- Project Name: oscilloscope +-- Target Device: +-- Tool versions: +-- Description: +-- +-- VHDL Test Bench Created by ISE for module: reader +-- +-- Dependencies: +-- +-- Revision: +-- Revision 0.01 - File Created +-- Additional Comments: +-- +-- Notes: +-- This testbench has been automatically generated using types std_logic and +-- std_logic_vector for the ports of the unit under test. Xilinx recommends +-- that these types always be used for the top-level I/O of a design in order +-- to guarantee that the testbench will bind correctly to the post-implementation +-- simulation model. +-------------------------------------------------------------------------------- +LIBRARY ieee; +USE ieee.std_logic_1164.ALL; +USE ieee.numeric_std.ALL; + +ENTITY test_reader IS +END test_reader; + +ARCHITECTURE behavior OF test_reader IS + + -- Component Declaration for the Unit Under Test (UUT) + + COMPONENT reader + PORT( + nrst : IN std_logic; + clk108 : IN std_logic; + input_red : IN std_logic; + input_green : IN std_logic; + input_blue : IN std_logic; + is_reading_active : IN std_logic; + time_resolution : IN integer range 0 to 15; + overflow_indicator : OUT std_logic; + flush_and_return_to_zero : OUT std_logic; + write_enable : OUT std_logic; + red_value : OUT std_logic; + green_value : OUT std_logic; + blue_value : OUT std_logic + ); + END COMPONENT; + + + --Inputs + signal nrst : std_logic := '0'; + signal clk108 : std_logic := '0'; + signal input_red : std_logic := '0'; + signal input_green : std_logic := '0'; + signal input_blue : std_logic := '0'; + signal is_reading_active : std_logic := '0'; + signal time_resolution : integer range 0 to 15 := 0; + + --Outputs + signal overflow_indicator : std_logic; + signal flush_and_return_to_zero : std_logic; + signal write_enable : std_logic; + signal red_value : std_logic; + signal green_value : std_logic; + signal blue_value : std_logic; + + -- Clock period definitions + constant clk108_period : time := 10 ns; + + signal was_there_an_overflow : std_logic := '0'; + signal please_reset_overflow : std_logic := '0'; + signal currently_doing_nothing : std_logic := '0'; + + signal write_enable_count_between_flushes : natural := 0; + +BEGIN + + -- Instantiate the Unit Under Test (UUT) + uut: reader PORT MAP ( + nrst => nrst, + clk108 => clk108, + input_red => input_red, + input_green => input_green, + input_blue => input_blue, + is_reading_active => is_reading_active, + time_resolution => time_resolution, + overflow_indicator => overflow_indicator, + flush_and_return_to_zero => flush_and_return_to_zero, + write_enable => write_enable, + red_value => red_value, + green_value => green_value, + blue_value => blue_value + ); + + -- Clock process definitions + clk108_process :process + begin + clk108 <= '0'; + wait for clk108_period/2; + clk108 <= '1'; + wait for clk108_period/2; + end process; + + simulate_trigger : process (nrst, clk108) is + begin + if nrst = '0' then + is_reading_active <= '1'; + elsif rising_edge (clk108) then + if please_reset_overflow = '1' then + was_there_an_overflow <= '0'; + is_reading_active <= '1'; + time_resolution <= (time_resolution + 1) mod 16; + elsif was_there_an_overflow = '0' then + if overflow_indicator = '1' then + was_there_an_overflow <= '1'; + is_reading_active <= '0'; + end if; + end if; + end if; + end process; + + restart_was_there_an_overflow: process is + begin + while true loop + if was_there_an_overflow = '1' then + wait for clk108_period * 25; + currently_doing_nothing <= '1'; + wait for clk108_period; + currently_doing_nothing <= '0'; + wait for clk108_period * 25; + please_reset_overflow <= '1'; + end if; + wait for clk108_period; + please_reset_overflow <= '0'; + end loop; + end process; + + + write_enable_counter: process (nrst, clk108) is + begin + if nrst = '0' then + write_enable_count_between_flushes <= 0; + elsif rising_edge (clk108) then + if currently_doing_nothing = '1' then + assert write_enable_count_between_flushes = 14 * 1280 report "Improper number of write_enable ones."; + write_enable_count_between_flushes <= 0; + elsif write_enable = '1' then + write_enable_count_between_flushes <= write_enable_count_between_flushes + 1; + end if; + end if; + end process; + + + -- Stimulus process + stim_proc: process + begin + -- hold reset state for 100 ns. + nrst <= '0'; + wait for 100 ns; + nrst <= '1'; + + + wait for clk108_period*10; + + -- insert stimulus here + + wait; + end process; + +END; diff --git a/src/tests/test_screen_position_gen.vhd b/src/tests/test_screen_position_gen.vhd new file mode 100644 index 0000000..1977f78 --- /dev/null +++ b/src/tests/test_screen_position_gen.vhd @@ -0,0 +1,152 @@ +-------------------------------------------------------------------------------- +-- Company: +-- Engineer: +-- +-- Create Date: 12:35:03 05/28/2011 +-- Design Name: +-- Module Name: /home/xiadz/prog/fpga/oscilloscope/test_screen_position_gen.vhd +-- Project Name: oscilloscope +-- Target Device: +-- Tool versions: +-- Description: +-- +-- VHDL Test Bench Created by ISE for module: screen_position_gen +-- +-- Dependencies: +-- +-- Revision: +-- Revision 0.01 - File Created +-- Additional Comments: +-- +-- Notes: +-- This testbench has been automatically generated using types std_logic and +-- std_logic_vector for the ports of the unit under test. Xilinx recommends +-- that these types always be used for the top-level I/O of a design in order +-- to guarantee that the testbench will bind correctly to the post-implementation +-- simulation model. +-------------------------------------------------------------------------------- +LIBRARY ieee; +USE ieee.std_logic_1164.ALL; +USE ieee.numeric_std.ALL; +USE work.types.ALL; + +ENTITY test_screen_position_gen IS +END test_screen_position_gen; + +ARCHITECTURE behavior OF test_screen_position_gen IS + + -- Component Declaration for the Unit Under Test (UUT) + + COMPONENT screen_position_gen + PORT( + nrst : IN std_logic; + clk108 : IN std_logic; + vblank : IN std_logic; + in_line_change : IN std_logic; + in_page_change : IN std_logic; + in_column : IN integer range 0 to 1279; + in_column_change : IN std_logic; + segment : OUT integer range 0 to 15; + segment_change : OUT std_logic; + subsegment : OUT integer range 0 to 3; + subsegment_change : OUT std_logic; + line : OUT integer range 0 to 15; + out_line_change : OUT std_logic; + out_column : OUT integer range 0 to 1279; + out_column_change : OUT std_logic; + out_page_change : OUT std_logic; + active_pixgen_source : OUT PIXGEN_SOURCE_T + ); + END COMPONENT; + + + --Inputs + signal nrst : std_logic := '0'; + signal clk108 : std_logic := '0'; + signal vblank : std_logic := '0'; + signal in_line_change : std_logic := '0'; + signal in_page_change : std_logic := '0'; + signal in_column : integer range 0 to 1279 := 0; + signal in_column_change : std_logic := '0'; + + --Outputs + signal segment : integer range 0 to 15; + signal segment_change : std_logic; + signal subsegment : integer range 0 to 3; + signal subsegment_change : std_logic; + signal line : integer range 0 to 15; + signal out_line_change : std_logic; + signal out_column : integer range 0 to 1279; + signal out_column_change : std_logic; + signal out_page_change : std_logic; + signal active_pixgen_source : PIXGEN_SOURCE_T; + + -- Clock period definitions + constant clk108_period : time := 10 ns; + +BEGIN + + -- Instantiate the Unit Under Test (UUT) + uut: screen_position_gen PORT MAP ( + nrst => nrst, + clk108 => clk108, + vblank => vblank, + in_line_change => in_line_change, + in_page_change => in_page_change, + in_column => in_column, + in_column_change => in_column_change, + segment => segment, + segment_change => segment_change, + subsegment => subsegment, + subsegment_change => subsegment_change, + line => line, + out_line_change => out_line_change, + out_column => out_column, + out_column_change => out_column_change, + out_page_change => out_page_change, + active_pixgen_source => active_pixgen_source + ); + + -- Clock process definitions + clk108_process :process + begin + clk108 <= '0'; + wait for clk108_period/2; + clk108 <= '1'; + wait for clk108_period/2; + end process; + + + -- Stimulus process + stim_proc: process + begin + -- hold reset state for 100 ns. + nrst <= '0'; + wait for 100 ns; + nrst <= '1'; + wait for clk108_period*10; + + while true loop + in_page_change <= '1'; + for x_line in 0 to 1279 loop + vblank <= '0'; + in_line_change <= '1'; + in_column_change <= '1'; + for x_column in 0 to 1279 loop + in_column <= x_column; + wait for clk108_period; + in_line_change <= '0'; + in_page_change <= '0'; + end loop; + in_column_change <= '0'; + vblank <= '1'; + wait for clk108_period * 1000; + end loop; + + wait for clk108_period * 10000; + end loop; + + wait; + end process; + +END; diff --git a/src/tests/test_single_debouncer.vhd b/src/tests/test_single_debouncer.vhd new file mode 100644 index 0000000..1ceb37a --- /dev/null +++ b/src/tests/test_single_debouncer.vhd @@ -0,0 +1,126 @@ +-------------------------------------------------------------------------------- +-- Company: +-- Engineer: +-- +-- Create Date: 15:08:56 05/24/2011 +-- Design Name: +-- Module Name: /home/xiadz/prog/fpga/oscilloscope/test_single_debouncer.vhd +-- Project Name: oscilloscope +-- Target Device: +-- Tool versions: +-- Description: +-- +-- VHDL Test Bench Created by ISE for module: single_debouncer +-- +-- Dependencies: +-- +-- Revision: +-- Revision 0.01 - File Created +-- Additional Comments: +-- +-- Notes: +-- This testbench has been automatically generated using types std_logic and +-- std_logic_vector for the ports of the unit under test. Xilinx recommends +-- that these types always be used for the top-level I/O of a design in order +-- to guarantee that the testbench will bind correctly to the post-implementation +-- simulation model. +-------------------------------------------------------------------------------- +LIBRARY ieee; +USE ieee.std_logic_1164.ALL; + +-- Uncomment the following library declaration if using +-- arithmetic functions with Signed or Unsigned values +--USE ieee.numeric_std.ALL; + +ENTITY test_single_debouncer IS +END test_single_debouncer; + +ARCHITECTURE behavior OF test_single_debouncer IS + + -- Component Declaration for the Unit Under Test (UUT) + + constant n : integer := 5; + + COMPONENT single_debouncer + GENERIC (n : natural := n); + PORT( + nrst : IN std_logic; + clk : IN std_logic; + input : IN std_logic; + output : OUT std_logic + ); + END COMPONENT; + + + --Inputs + signal nrst : std_logic := '0'; + signal clk : std_logic := '0'; + signal input : std_logic := '0'; + + --Outputs + signal output : std_logic; + + -- Clock period definitions + constant clk_period : time := 10 ns; + +BEGIN + + -- Instantiate the Unit Under Test (UUT) + uut: single_debouncer + PORT MAP ( + nrst => nrst, + clk => clk, + input => input, + output => output + ); + + -- Clock process definitions + clk_process :process + begin + clk <= '0'; + wait for clk_period/2; + clk <= '1'; + wait for clk_period/2; + end process; + + + -- Stimulus process + stim_proc: process + variable i:integer; + begin + -- hold reset state for 100 ns. + nrst <= '0'; + wait for 100 ns; + nrst <= '1'; + + wait for clk_period * 10; + + while true loop + for i in 0 to 9 loop + input <= not input; + wait for clk_period; + assert output = input report "Should be equal, but is not"; + wait for clk_period * (n + 1); + end loop; + + input <= '0'; + wait for clk_period * (n + 1); + input <= '1'; + wait for clk_period; + for i in 1 to n loop + input <= '0'; + wait for clk_period / 2; + assert output = '1' report "Should be equal '1', but is not"; + input <= '1'; + wait for clk_period / 2; + assert output = '1' report "Should be equal '1', but is not"; + end loop; + + wait for clk_period * (n + 1); + + end loop; + + wait; + end process; + +END; diff --git a/src/tests/test_trace_memory.vhd b/src/tests/test_trace_memory.vhd new file mode 100644 index 0000000..88b31aa --- /dev/null +++ b/src/tests/test_trace_memory.vhd @@ -0,0 +1,130 @@ +-------------------------------------------------------------------------------- +-- Company: +-- Engineer: +-- +-- Create Date: 21:28:51 05/22/2011 +-- Design Name: +-- Module Name: /home/xiadz/prog/fpga/oscilloscope/test_trace_memory.vhd +-- Project Name: oscilloscope +-- Target Device: +-- Tool versions: +-- Description: +-- +-- VHDL Test Bench Created by ISE for module: trace_memory +-- +-- Dependencies: +-- +-- Revision: +-- Revision 0.01 - File Created +-- Additional Comments: +-- +-- Notes: +-- This testbench has been automatically generated using types std_logic and +-- std_logic_vector for the ports of the unit under test. Xilinx recommends +-- that these types always be used for the top-level I/O of a design in order +-- to guarantee that the testbench will bind correctly to the post-implementation +-- simulation model. +-------------------------------------------------------------------------------- +LIBRARY ieee; +USE ieee.std_logic_1164.ALL; +USE ieee.std_logic_arith.ALL; + +ENTITY test_trace_memory IS +END test_trace_memory; + +ARCHITECTURE behavior OF test_trace_memory IS + + -- Component Declaration for the Unit Under Test (UUT) + + COMPONENT trace_memory + PORT( + clka : IN std_logic; + wea : IN std_logic_vector(0 downto 0); + addra : IN std_logic_vector(12 downto 0); + dina : IN std_logic_vector(8 downto 0); + clkb : IN std_logic; + rstb : IN std_logic; + addrb : IN std_logic_vector(12 downto 0); + doutb : OUT std_logic_vector(8 downto 0) + ); + END COMPONENT; + + + --Inputs + signal clka : std_logic := '0'; + signal wea : std_logic_vector(0 downto 0) := (others => '0'); + signal addra : std_logic_vector(12 downto 0) := (others => '0'); + signal dina : std_logic_vector(8 downto 0) := (others => '0'); + signal clkb : std_logic := '0'; + signal rstb : std_logic := '0'; + signal addrb : std_logic_vector(12 downto 0) := (others => '0'); + + --Outputs + signal doutb : std_logic_vector(8 downto 0); + + -- Clock period definitions + constant clk_period : time := 10 ns; + +BEGIN + + -- Instantiate the Unit Under Test (UUT) + uut: trace_memory PORT MAP ( + clka => clka, + wea => wea, + addra => addra, + dina => dina, + clkb => clkb, + rstb => rstb, + addrb => addrb, + doutb => doutb + ); + + clk_process :process + begin + clka <= '0'; + clkb <= '0'; + wait for clk_period/2; + clka <= '1'; + clkb <= '1'; + wait for clk_period/2; + end process; + + + + -- Stimulus process + stim_proc: process + variable i: integer; + begin + -- hold reset state for 100 ns. + rstb <= '1'; + wait for 100 ns; + rstb <= '0'; + wait for clk_period * 10; + + addra <= "0000000000000"; + dina <= "010101101"; + wea <= "1"; + wait for clk_period; + wea <= "0"; + + wait for clk_period * 10; + + wea <= "1"; + for i in 0 to 20 loop + dina <= conv_std_logic_vector (i, 9); + addra <= conv_std_logic_vector (i, 13); + wait for clk_period; + end loop; + wea <= "0"; + + wait for clk_period * 10; + + for i in 0 to 20 loop + addrb <= conv_std_logic_vector (i, 13); + wait for clk_period; + end loop; + + wait; + end process; + +END; diff --git a/src/tests/test_trace_pixgen.vhd b/src/tests/test_trace_pixgen.vhd new file mode 100644 index 0000000..921f623 --- /dev/null +++ b/src/tests/test_trace_pixgen.vhd @@ -0,0 +1,185 @@ +-------------------------------------------------------------------------------- +-- Company: +-- Engineer: +-- +-- Create Date: 10:17:19 05/28/2011 +-- Design Name: +-- Module Name: /home/xiadz/prog/fpga/oscilloscope/test_trace_pixgen.vhd +-- Project Name: oscilloscope +-- Target Device: +-- Tool versions: +-- Description: +-- +-- VHDL Test Bench Created by ISE for module: trace_pixgen +-- +-- Dependencies: +-- +-- Revision: +-- Revision 0.01 - File Created +-- Additional Comments: +-- +-- Notes: +-- This testbench has been automatically generated using types std_logic and +-- std_logic_vector for the ports of the unit under test. Xilinx recommends +-- that these types always be used for the top-level I/O of a design in order +-- to guarantee that the testbench will bind correctly to the post-implementation +-- simulation model. +-------------------------------------------------------------------------------- +library ieee; +use ieee.std_logic_1164.all; +use ieee.numeric_std.all; +use work.types.all; + + +ENTITY test_trace_pixgen IS +END test_trace_pixgen; + +ARCHITECTURE behavior OF test_trace_pixgen IS + + -- Component Declaration for the Unit Under Test (UUT) + + COMPONENT trace_pixgen + PORT( + nrst : IN std_logic; + clk108 : IN std_logic; + segment : IN integer range 0 to 15; + segment_change : IN std_logic; + subsegment : IN integer range 0 to 3; + subsegment_change : IN std_logic; + line : IN integer range 0 to 15; + line_change : IN std_logic; + column : IN integer range 0 to 1279; + column_change : IN std_logic; + page_change : IN std_logic; + active_pixgen_source : IN PIXGEN_SOURCE_T; + doutb : IN std_logic_vector(8 downto 0); + addrb : OUT std_logic_vector(12 downto 0); + vout : OUT std_logic_vector(7 downto 0) + ); + END COMPONENT; + + + --Inputs + signal nrst : std_logic := '0'; + signal clk108 : std_logic := '0'; + signal segment : integer range 0 to 15 := 0; + signal segment_change : std_logic := '0'; + signal subsegment : integer range 0 to 3 := 0; + signal subsegment_change : std_logic := '0'; + signal line : integer range 0 to 15 := 0; + signal line_change : std_logic := '0'; + signal column : integer range 0 to 1279 := 0; + signal column_change : std_logic := '0'; + signal page_change : std_logic := '0'; + signal active_pixgen_source : PIXGEN_SOURCE_T := TRACE_PIXGEN_T; + signal doutb : std_logic_vector(8 downto 0) := (others => '0'); + + --Outputs + signal addrb : std_logic_vector(12 downto 0); + signal vout : std_logic_vector(7 downto 0); + + -- Clock period definitions + constant clk108_period : time := 10 ns; + +BEGIN + + -- Instantiate the Unit Under Test (UUT) + uut: trace_pixgen PORT MAP ( + nrst => nrst, + clk108 => clk108, + segment => segment, + segment_change => segment_change, + subsegment => subsegment, + subsegment_change => subsegment_change, + line => line, + line_change => line_change, + column => column, + column_change => column_change, + page_change => page_change, + active_pixgen_source => active_pixgen_source, + doutb => doutb, + addrb => addrb, + vout => vout + ); + + -- Clock process definitions + clk108_process :process + begin + clk108 <= '0'; + wait for clk108_period/2; + clk108 <= '1'; + wait for clk108_period/2; + end process; + + + -- Stimulus process + stim_proc: process + begin + -- hold reset state for 100 ns. + nrst <= '0'; + wait for 100 ns; + nrst <= '1'; + + wait for clk108_period*10; + + while true loop + for x_segment in 0 to 15 loop + for x_subsegment in 0 to 3 loop + for x_line in 0 to 15 loop + if x_segment = 14 or x_segment = 15 then + active_pixgen_source <= SETTINGS_PIXGEN_T; + else + if x_subsegment = 3 then + active_pixgen_source <= TIME_BASE_PIXGEN_T; + else + active_pixgen_source <= TRACE_PIXGEN_T; + end if; + end if; + for x_column in 0 to 1279 loop + column_change <= '1'; + segment <= x_segment; + subsegment <= x_subsegment; + line <= x_line; + column <= x_column; + if x_column = 0 then + line_change <= '1'; + if x_line = 0 then + subsegment_change <= '1'; + if x_subsegment = 0 then + segment_change <= '1'; + if x_segment = 0 then + page_change <= '1'; + else + page_change <= '0'; + end if; + else + segment_change <= '0'; + page_change <= '0'; + end if; + else + subsegment_change <= '0'; + segment_change <= '0'; + page_change <= '0'; + end if; + else + line_change <= '0'; + subsegment_change <= '0'; + segment_change <= '0'; + page_change <= '0'; + end if; + + wait for clk108_period; + + end loop; + column_change <= '0'; + active_pixgen_source <= BLANK_PIXGEN_T; + wait for clk108_period * 1000; + end loop; + end loop; + end loop; + wait for clk108_period * 10000; + end loop; + wait; + end process; + +END; diff --git a/src/tests/test_trigger.vhd b/src/tests/test_trigger.vhd new file mode 100644 index 0000000..ab1e62a --- /dev/null +++ b/src/tests/test_trigger.vhd @@ -0,0 +1,184 @@ +-------------------------------------------------------------------------------- +-- Company: +-- Engineer: +-- +-- Create Date: 19:36:40 05/24/2011 +-- Design Name: +-- Module Name: /home/xiadz/prog/fpga/oscilloscope/test_trigger.vhd +-- Project Name: oscilloscope +-- Target Device: +-- Tool versions: +-- Description: +-- +-- VHDL Test Bench Created by ISE for module: trigger +-- +-- Dependencies: +-- +-- Revision: +-- Revision 0.01 - File Created +-- Additional Comments: +-- +-- Notes: +-- This testbench has been automatically generated using types std_logic and +-- std_logic_vector for the ports of the unit under test. Xilinx recommends +-- that these types always be used for the top-level I/O of a design in order +-- to guarantee that the testbench will bind correctly to the post-implementation +-- simulation model. +-------------------------------------------------------------------------------- +LIBRARY ieee; +USE ieee.std_logic_1164.ALL; +USE work.types.ALL; + +-- Uncomment the following library declaration if using +-- arithmetic functions with Signed or Unsigned values +--USE ieee.numeric_std.ALL; + +ENTITY test_trigger IS +END test_trigger; + +ARCHITECTURE behavior OF test_trigger IS + + -- Component Declaration for the Unit Under Test (UUT) + + COMPONENT trigger + PORT( + nrst : IN std_logic; + clk108 : IN std_logic; + trigger_btn : IN std_logic; + trigger_event : IN TRIGGER_EVENT_T; + red_enable : IN std_logic; + green_enable : IN std_logic; + blue_enable : IN std_logic; + continue_after_reading : IN std_logic; + red_input : IN std_logic; + green_input : IN std_logic; + blue_input : IN std_logic; + overflow_indicator : IN std_logic; + red_output : OUT std_logic; + green_output : OUT std_logic; + blue_output : OUT std_logic; + is_reading_active : OUT std_logic + ); + END COMPONENT; + + + --Inputs + signal nrst : std_logic := '0'; + signal clk108 : std_logic := '0'; + signal trigger_btn : std_logic := '0'; + signal trigger_event : TRIGGER_EVENT_T := BUTTON_TRIGGER_T; + signal red_enable : std_logic := '0'; + signal green_enable : std_logic := '0'; + signal blue_enable : std_logic := '0'; + signal continue_after_reading : std_logic := '0'; + signal red_input : std_logic := '0'; + signal green_input : std_logic := '0'; + signal blue_input : std_logic := '0'; + signal overflow_indicator : std_logic := '0'; + + --Outputs + signal red_output : std_logic; + signal green_output : std_logic; + signal blue_output : std_logic; + signal is_reading_active : std_logic; + + -- Clock period definitions + constant clk108_period : time := 10 ns; + +BEGIN + + -- Instantiate the Unit Under Test (UUT) + uut: trigger PORT MAP ( + nrst => nrst, + clk108 => clk108, + trigger_btn => trigger_btn, + trigger_event => trigger_event, + red_enable => red_enable, + green_enable => green_enable, + blue_enable => blue_enable, + continue_after_reading => continue_after_reading, + red_input => red_input, + green_input => green_input, + blue_input => blue_input, + overflow_indicator => overflow_indicator, + red_output => red_output, + green_output => green_output, + blue_output => blue_output, + is_reading_active => is_reading_active + ); + + -- Clock process definitions + clk108_process :process + begin + clk108 <= '0'; + wait for clk108_period/2; + clk108 <= '1'; + wait for clk108_period/2; + end process; + + + -- Stimulus process + stim_proc: process + begin + -- hold reset state for 100 ns. + nrst <= '0'; + wait for 100 ns; + nrst <= '1'; + + wait for clk108_period; + + + wait for clk108_period * 10; + trigger_btn <= '1'; + wait for clk108_period; + trigger_btn <= '0'; + + assert is_reading_active = '1' report "Reading should be active"; + + + red_enable <= '1'; + green_enable <= '0'; + blue_enable <= '1'; + red_input <= '1'; + green_input <= '1'; + blue_input <= '0'; + + wait for clk108_period; + assert red_output = '1' report "Red should be active"; + assert green_output = '0' report "Green should not be active"; + assert blue_output = '0' report "Blue should not be active"; + wait for clk108_period; + red_input <= '0'; + green_input <= '0'; + blue_input <= '0'; + + + wait for clk108_period * 10; + + continue_after_reading <= '0'; + overflow_indicator <= '1'; + wait for clk108_period; + assert is_reading_active = '0' report "Reading should not be active; issued an overflow"; + overflow_indicator <= '0'; + + wait for clk108_period * 10; + + trigger_event <= GREEN_TRIGGER_T; + green_input <= '1'; + wait for clk108_period; + green_input <= '0'; + wait for clk108_period; + assert is_reading_active = '1' report "Reading should be active; trigger on rising edge at green"; + + + wait for clk108_period * 10; + trigger_btn <= '1'; + wait for clk108_period; + trigger_btn <= '0'; + assert is_reading_active = '0' report "Reading should not be active; stopped it with button"; + + + wait; + end process; + +END; diff --git a/src/tests/test_types.vhd b/src/tests/test_types.vhd new file mode 100644 index 0000000..0d05029 --- /dev/null +++ b/src/tests/test_types.vhd @@ -0,0 +1,31 @@ + +LIBRARY ieee; +USE ieee.std_logic_1164.ALL; +USE ieee.numeric_std.ALL; +USE work.types.all; + +ENTITY test_types IS +END test_types; + +ARCHITECTURE behavior OF test_types IS + + signal tested_num : integer range 0 to 127; + signal tested_num2 : integer range 0 to 127; + signal tested_short_char : short_character; + +BEGIN + stim_proc: process + begin + for i in 0 to 127 loop + tested_num <= i; + tested_short_char <= character_conv_table (i); + wait for 1 ns; + tested_num2 <= short_character'pos (tested_short_char); + wait for 1 ns; + assert tested_num = tested_num2; + assert tested_short_char = short_character'val (i); + end loop; + wait; + end process; + +END; diff --git a/src/tests/test_vga_controller_1280_1024.vhd b/src/tests/test_vga_controller_1280_1024.vhd new file mode 100644 index 0000000..2fb98a0 --- /dev/null +++ b/src/tests/test_vga_controller_1280_1024.vhd @@ -0,0 +1,101 @@ +-------------------------------------------------------------------------------- +-- Company: +-- Engineer: +-- +-- Create Date: 17:00:31 05/17/2011 +-- Design Name: +-- Module Name: /home/xiadz/prog/fpga/oscilloscope/test_vga_controller_1280_1024.vhd +-- Project Name: oscilloscope +-- Target Device: +-- Tool versions: +-- Description: +-- +-- VHDL Test Bench Created by ISE for module: vga_controller_1280_1024 +-- +-- Dependencies: +-- +-- Revision: +-- Revision 0.01 - File Created +-- Additional Comments: +-- +-- Notes: +-- This testbench has been automatically generated using types std_logic and +-- std_logic_vector for the ports of the unit under test. Xilinx recommends +-- that these types always be used for the top-level I/O of a design in order +-- to guarantee that the testbench will bind correctly to the post-implementation +-- simulation model. +-------------------------------------------------------------------------------- +LIBRARY ieee; +USE ieee.std_logic_1164.ALL; +USE ieee.std_logic_unsigned.ALL; +use ieee.numeric_std.all; + + +ENTITY test_vga_controller_1280_1024 IS +END test_vga_controller_1280_1024; + +ARCHITECTURE behavior OF test_vga_controller_1280_1024 IS + + -- Component Declaration for the Unit Under Test (UUT) + + COMPONENT vga_controller_1280_1024 + PORT( + nrst : IN std_logic; + clk108 : IN std_logic; + hsync : OUT std_logic; + vsync : OUT std_logic; + vblank : OUT std_logic; + line_change : OUT std_logic; + page_change : OUT std_logic; + column : out integer range 0 to 1279; + column_change : out std_logic + ); + END COMPONENT; + + + --Inputs + signal nrst : std_logic := '1'; + signal clk108 : std_logic := '0'; + + --Outputs + signal hsync : std_logic; + signal vsync : std_logic; + signal vblank : std_logic; + signal line_change : std_logic; + signal page_change : std_logic; + signal column : integer range 0 to 1279; + signal column_change : std_logic; + + + + signal clock_periods : std_logic_vector (31 downto 0) := (others => '0'); + + -- Clock period definitions + constant clk108_period : time := 9.25925926 ns; + +BEGIN + + -- Instantiate the Unit Under Test (UUT) + uut: vga_controller_1280_1024 PORT MAP ( + nrst => nrst, + clk108 => clk108, + hsync => hsync, + vsync => vsync, + vblank => vblank, + line_change => line_change, + page_change => page_change, + column => column, + column_change => column_change + ); + + -- Clock process definitions + clk108_process : process + begin + clk108 <= '1'; + wait for clk108_period/2; + clk108 <= '0'; + wait for clk108_period/2; + clock_periods <= clock_periods + 1; + end process; + +END; diff --git a/src/time_base_pixgen.vhd b/src/time_base_pixgen.vhd new file mode 100644 index 0000000..5d3865c --- /dev/null +++ b/src/time_base_pixgen.vhd @@ -0,0 +1,75 @@ +---------------------------------------------------------------------------------- +-- Author: Osowski Marcin +-- Create Date: 20:16:43 05/22/2011 +---------------------------------------------------------------------------------- +library ieee; +use ieee.std_logic_1164.all; +use ieee.numeric_std.all; +use work.types.all; + +entity time_base_pixgen is + port ( + nrst : in std_logic; + clk108 : in std_logic; + segment : in integer range 0 to 15; + segment_change : in std_logic; + subsegment : in integer range 0 to 3; + subsegment_change : in std_logic; + line : in integer range 0 to 15; + line_change : in std_logic; + column : in integer range 0 to 1279; + column_change : in std_logic; + page_change : in std_logic; + active_pixgen_source : in PIXGEN_SOURCE_T; + char : out short_character; + char_pixel : in std_logic; + vout : out std_logic_vector (7 downto 0) + ); +end time_base_pixgen; + +architecture behavioral of time_base_pixgen is + signal output : std_logic; +begin + char <= to_short_character (NUL); + process (clk108, nrst) is + begin + if nrst = '0' then + output <= '0'; + elsif rising_edge (clk108) then + if line = 2 or line = 3 or line = 4 or line = 11 or line = 12 or line = 13 then + if column mod 128 = 127 then + output <= '1'; + else + output <= '0'; + end if; + elsif line = 5 or line = 10 then + if column mod 64 = 63 then + output <= '1'; + else + output <= '0'; + end if; + elsif line = 6 or line = 7 or line = 8 or line = 9 then + if column mod 16 = 15 then + output <= '1'; + else + output <= '0'; + end if; + else + output <= '1'; + end if; + end if; + end process; + + process (clk108, nrst) is + begin + if nrst = '0' then + vout <= "00000000"; + elsif rising_edge (clk108) then + if output = '1' then + vout <= "11111111"; + else + vout <= "00000000"; + end if; + end if; + end process; +end behavioral; diff --git a/src/trace_pixgen.vhd b/src/trace_pixgen.vhd new file mode 100644 index 0000000..a744a99 --- /dev/null +++ b/src/trace_pixgen.vhd @@ -0,0 +1,162 @@ +---------------------------------------------------------------------------------- +-- Author: Osowski Marcin +-- Create Date: 20:16:43 05/22/2011 +---------------------------------------------------------------------------------- +library ieee; +use ieee.std_logic_1164.all; +use ieee.numeric_std.all; +use work.types.all; + +entity trace_pixgen is + port ( + nrst : in std_logic; + clk108 : in std_logic; + segment : in integer range 0 to 15; + segment_change : in std_logic; + subsegment : in integer range 0 to 3; + subsegment_change : in std_logic; + line : in integer range 0 to 15; + line_change : in std_logic; + column : in integer range 0 to 1279; + column_change : in std_logic; + page_change : in std_logic; + active_pixgen_source : in PIXGEN_SOURCE_T; + currently_read_screen_segment : in natural range 0 to 13; + currently_read_screen_column : in natural range 0 to 1279; + time_resolution : in integer range 0 to 15; + is_reading_active : in std_logic; + doutb : in std_logic_vector (8 downto 0); + addrb : out std_logic_vector (12 downto 0); + vout : out std_logic_vector (7 downto 0) + ); +end trace_pixgen; + +architecture behavioral of trace_pixgen is + signal position_div_3 : integer range 0 to 5973; + signal position_mod_3 : integer range 0 to 2; + + signal delayed_active_pixgen_source : PIXGEN_SOURCE_T; + signal delayed_subsegment : integer range 0 to 3; + signal delayed_position_mod_3 : integer range 0 to 2; + signal delayed_line : integer range 0 to 15; + + + signal position_div_3_on_beginning_segment : integer range 0 to 5973; + signal position_mod_3_on_beginning_segment : integer range 0 to 2; + + + signal currently_inside_reading_zone : std_logic; + +begin + -- Computing current position + process (nrst, clk108, position_mod_3, position_div_3) is + variable incremented_position_div_3 : integer range 0 to 5973; + variable incremented_position_mod_3 : integer range 0 to 2; + begin + if position_mod_3 = 2 then + incremented_position_div_3 := position_div_3 + 1; + incremented_position_mod_3 := 0; + else + incremented_position_div_3 := position_div_3; + incremented_position_mod_3 := position_mod_3 + 1; + end if; + + + if nrst = '0' then + position_div_3 <= 0; + position_mod_3 <= 0; + currently_inside_reading_zone <= '0'; + elsif rising_edge (clk108) then + if currently_read_screen_segment = 0 and currently_read_screen_column = 0 then + currently_inside_reading_zone <= '0'; + else + if time_resolution >= 10 or is_reading_active = '0' then + if segment = currently_read_screen_segment and + column - currently_read_screen_column < 6 and + column - currently_read_screen_column >= 0 then + currently_inside_reading_zone <= '1'; + else + currently_inside_reading_zone <= '0'; + end if; + elsif time_resolution >= 7 then + if segment = currently_read_screen_segment then + currently_inside_reading_zone <= '1'; + else + currently_inside_reading_zone <= '0'; + end if; + else + currently_inside_reading_zone <= '0'; + end if; + end if; + if active_pixgen_source = TRACE_PIXGEN_T then + if page_change = '1' then + position_div_3 <= 0; + position_mod_3 <= 0; + position_div_3_on_beginning_segment <= 0; + position_mod_3_on_beginning_segment <= 0; + elsif segment_change = '1' then + position_div_3 <= incremented_position_div_3; + position_mod_3 <= incremented_position_mod_3; + position_div_3_on_beginning_segment <= incremented_position_div_3; + position_mod_3_on_beginning_segment <= incremented_position_mod_3; + elsif line_change = '1' then + position_div_3 <= position_div_3_on_beginning_segment; + position_mod_3 <= position_mod_3_on_beginning_segment; + else + position_div_3 <= incremented_position_div_3; + position_mod_3 <= incremented_position_mod_3; + end if; + end if; + end if; + end process; + + addrb <= std_logic_vector (to_unsigned (position_div_3, 13)); + + delayed_active_pixgen_source <= active_pixgen_source when rising_edge (clk108); + delayed_subsegment <= subsegment when rising_edge (clk108); + delayed_position_mod_3 <= position_mod_3 when rising_edge (clk108); + delayed_line <= line when rising_edge (clk108); + + + process (nrst, delayed_active_pixgen_source, delayed_subsegment, delayed_position_mod_3, delayed_line, currently_inside_reading_zone) is + begin + if nrst = '0' or delayed_active_pixgen_source /= TRACE_PIXGEN_T then + vout <= "00000000"; + else + if currently_inside_reading_zone = '1' then + vout <= "10010010"; + elsif delayed_subsegment = 0 then + -- red + if delayed_line = 15 then + vout <= "11100000"; + elsif doutb (3 * delayed_position_mod_3) = '1' then + vout <= "11100000"; + else + vout <= "00000000"; + end if; + elsif delayed_subsegment = 1 then + -- green + if delayed_line = 15 then + vout <= "00011100"; + elsif doutb (3 * delayed_position_mod_3 + 1) = '1' then + vout <= "00011100"; + else + vout <= "00000000"; + end if; + elsif delayed_subsegment = 2 then + -- blue + if delayed_line = 15 then + vout <= "00000011"; + elsif doutb (3 * delayed_position_mod_3 + 2) = '1' then + vout <= "00000011"; + else + vout <= "00000000"; + end if; + else + vout <= "00000000"; + end if; + end if; + end process; + +end behavioral; + diff --git a/src/trigger.vhd b/src/trigger.vhd new file mode 100644 index 0000000..842b44a --- /dev/null +++ b/src/trigger.vhd @@ -0,0 +1,106 @@ +---------------------------------------------------------------------------------- +-- Author: Osowski Marcin +-- Create Date: 19:12:14 05/24/2011 +---------------------------------------------------------------------------------- +library ieee; +use ieee.std_logic_1164.all; +use work.types.all; + +entity trigger is + port ( + -- Inputs + nrst : in std_logic; + clk108 : in std_logic; + trigger_btn : in std_logic; + trigger_event : in TRIGGER_EVENT_T; + red_enable : in std_logic; + green_enable : in std_logic; + blue_enable : in std_logic; + continue_after_reading : in std_logic; + red_input : in std_logic; + green_input : in std_logic; + blue_input : in std_logic; + overflow_indicator : in std_logic; + + -- Outputs + red_output : out std_logic; + green_output : out std_logic; + blue_output : out std_logic; + is_reading_active : out std_logic + ); +end trigger; + +architecture behavioral of trigger is + signal internal_is_reading_active : std_logic := '0'; + signal previous_trigger_btn : std_logic := '0'; + signal previous_red_input : std_logic := '0'; + signal previous_green_input : std_logic := '0'; + signal previous_blue_input : std_logic := '0'; + +begin + is_reading_active <= internal_is_reading_active; + + process (nrst, clk108) is + begin + if nrst = '0' then + red_output <= '0'; + green_output <= '0'; + blue_output <= '0'; + internal_is_reading_active <= '0'; + previous_trigger_btn <= '0'; + previous_red_input <= '0'; + previous_green_input <= '0'; + previous_blue_input <= '0'; + elsif rising_edge (clk108) then + red_output <= red_input and red_enable; + green_output <= green_input and green_enable; + blue_output <= blue_input and blue_enable; + + previous_trigger_btn <= trigger_btn; + previous_red_input <= red_input; + previous_green_input <= green_input; + previous_blue_input <= blue_input; + + if internal_is_reading_active = '0' then + -- reading is currently not active + + if trigger_event = BUTTON_TRIGGER_T and + previous_trigger_btn = '0' and + trigger_btn = '1' then + -- Rising edge on trigger button. + internal_is_reading_active <= '1'; + + elsif trigger_event = RED_TRIGGER_T and + previous_red_input = '0' and + red_input = '1' then + -- Rising edge on red input. + internal_is_reading_active <= '1'; + + elsif trigger_event = GREEN_TRIGGER_T and + previous_green_input = '0' and + green_input = '1' then + -- Rising edge on green input. + internal_is_reading_active <= '1'; + + elsif trigger_event = BLUE_TRIGGER_T and + previous_blue_input = '0' and + blue_input = '1' then + -- Rising edge on blue input. + internal_is_reading_active <= '1'; + + end if; + else + -- reading is currently active + + if previous_trigger_btn = '0' and trigger_btn = '1' then + internal_is_reading_active <= '0'; + elsif overflow_indicator = '1' and continue_after_reading = '0' then + internal_is_reading_active <= '0'; + end if; + + end if; + end if; + end process; + +end behavioral; + diff --git a/src/types.vhd b/src/types.vhd new file mode 100644 index 0000000..4577242 --- /dev/null +++ b/src/types.vhd @@ -0,0 +1,70 @@ + +package types is + + type PIXGEN_SOURCE_T is ( + TRACE_PIXGEN_T, + TIME_BASE_PIXGEN_T, + SETTINGS_PIXGEN_T, + BLANK_PIXGEN_T + ); + + type TRIGGER_EVENT_T is ( + RED_TRIGGER_T, + GREEN_TRIGGER_T, + BLUE_TRIGGER_T, + BUTTON_TRIGGER_T + ); + + + + -- This stupid thing is workaround a bug in ISE 13.1 XST synthesis tool + -- It does not understand character'val(...) statements. + type character_array_128 is array (0 to 127) of character; + constant character_conv_table : character_array_128 := + ( + NUL, SOH, STX, ETX, EOT, ENQ, ACK, BEL, BS, HT, LF, VT, FF, CR, SO, + SI, DLE, DC1, DC2, DC3, DC4, NAK, SYN, ETB, CAN, EM, SUB, ESC, FSP, GSP, + RSP, USP, ' ', '!', '"', '#', '$', '%', '&', ''', '(', ')', '*', '+', ',', + '-', '.', '/', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', ':', ';', + '<', '=', '>', '?', '@', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', + 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', + 'Z', '[', '\', ']', '^', '_', '`', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', + 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', + 'x', 'y', 'z', '{', '|', '}', '~', DEL + ); + + -- short_character differs from character only by its range. + -- It has 128 first characters. + subtype short_character is character range character_conv_table (0) to character_conv_table (127); + + -- short_string differs from string by: + -- o it's built of short_character's + -- o it's indexed from 0 + type short_string is array (natural range <>) of short_character; + + function to_short_character ( c : character ) return short_character; + function to_short_string ( s : string ) return short_string; + +end types; + +package body types is + + function to_short_character ( c : character ) return short_character is + begin + return character_conv_table (character'pos (c) mod 128); + end function to_short_character; + + + function to_short_string ( s: string ) return short_string is + variable out_s : short_string (s'length - 1 downto 0); + begin + for i in s'length downto 1 loop + out_s (i - 1) := to_short_character (s (i)); + end loop; + return out_s; + end function to_short_string; + + + + +end types; diff --git a/src/vga_controller_1280_1024.vhd b/src/vga_controller_1280_1024.vhd new file mode 100644 index 0000000..0cf01da --- /dev/null +++ b/src/vga_controller_1280_1024.vhd @@ -0,0 +1,162 @@ +---------------------------------------------------------------------------------- +-- Author: Osowski Marcin +-- +-- Description: +-- o Entity generates impulses required for managing +-- vga port in 1280x1024@60hz mode +-- +-- o It requires 108 Mhz input clock +-- +-- o It generates vblank signal. Whenever it's active, +-- vga color output should be set to "00000000" (all black). +-- It indicates an off-the-screen position. +-- +-- o Sync pulses schema: +-- +-- timing diagram for the horizontal synch signal (HS) +-- 0 1328 1440 1680 (pixels) +-- -------------------------|______|------------------- +-- timing diagram for the vertical synch signal (VS) +-- 0 1025 1028 1066 (lines) +-- -----------------------------------|______|--------- +-- +-- +-- +-- o For "next entities" (video signal generators), it generates signals line_change +-- and page_change. They are set to '1' for one clock cycle just before +-- there's a change in (appropriately) current line or current page. +-- +---------------------------------------------------------------------------------- +library ieee; +use ieee.std_logic_1164.all; +use ieee.std_logic_unsigned.all; + + +entity vga_controller_1280_1024 is + port ( + nrst : in std_logic; + clk108 : in std_logic; + hsync : out std_logic; + vsync : out std_logic; + vblank : out std_logic; + line_change : out std_logic; + page_change : out std_logic; + column : out integer range 0 to 1279; + column_change : out std_logic + ); +end vga_controller_1280_1024; + +architecture behavioral of vga_controller_1280_1024 is + + + constant HFrontPorch : integer := 1280; + constant HSyncPulse : integer := 1328; + constant HBackPorch : integer := 1440; + constant HTotal : integer := 1688; + + constant VFrontPorch : integer := 1024; + constant VSyncPulse : integer := 1025; + constant VBackPorch : integer := 1028; + constant VTotal : integer := 1066; + + signal hcount: integer range 0 to 1687 := 0; + signal vcount: integer range 0 to 1065 := 0; + + signal next_hcount: integer range 0 to 1687; + signal next_vcount: integer range 0 to 1065; + + signal internal_column : integer range 0 to 1279; + signal next_column : integer range 0 to 1279; + signal next_column_change : std_logic; + +begin + + -- Generating next_hcount. + next_hcount <= hcount + 1 when hcount < (HTotal - 1) else 0; + + -- Generating next_vcount. + process (vcount, next_hcount) is + begin + if next_hcount = 0 then + if vcount < (VTotal - 1) then + next_vcount <= vcount + 1; + else + next_vcount <= 0; + end if; + else + next_vcount <= vcount; + end if; + end process; + + -- Generating next_column and next_column_change. + process (next_hcount, internal_column, next_column) is + begin + if (next_hcount >= 1280) then + next_column <= 1279; + else + next_column <= next_hcount; + end if; + + if next_column /= internal_column then + next_column_change <= '1'; + else + next_column_change <= '0'; + end if; + end process; + + column <= internal_column; + + + -- Generating sync pulses and line_change, page_change signals. + process (nrst, clk108) is + begin + if nrst = '0' then + line_change <= '0'; + page_change <= '0'; + hsync <= '0'; + vsync <= '0'; + vblank <= '0'; + internal_column <= 0; + column_change <= '0'; + elsif rising_edge (clk108) then + if vcount /= next_vcount then + line_change <= '1'; + else + line_change <= '0'; + end if; + if vcount /= next_vcount and next_vcount = 0 then + page_change <= '1'; + else + page_change <= '0'; + end if; + + hcount <= next_hcount; + if (next_hcount >= 1280) then + internal_column <= 1279; + else + internal_column <= next_hcount; + end if; + column_change <= next_column_change; + vcount <= next_vcount; + + if next_hcount < HFrontPorch and next_vcount < VFrontPorch then + vblank <= '0'; + else + vblank <= '1'; + end if; + + if next_hcount >= HSyncPulse and next_hcount < HBackPorch then + hsync <= '1'; + else + hsync <= '0'; + end if; + + if next_vcount >= VSyncPulse and next_vcount < VBackPorch then + vsync <= '1'; + else + vsync <= '0'; + end if; + end if; + end process; + +end architecture behavioral;