summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--misc/arm7/src/arm7pkg.vhd60
-rw-r--r--misc/arm7/src/arm7wb.vhd472
-rw-r--r--misc/ddrsdram/simsrc/ddr_tb.vhd602
-rw-r--r--misc/ddrsdram/src/ddr_pkg.vhd212
-rw-r--r--misc/ddrsdram/src/ddr_top.vhd1486
-rw-r--r--misc/ddrsdram/src/mt46v16m16.vhd2640
-rw-r--r--misc/wishbone/src/atomic32_access.vhd262
-rw-r--r--misc/wishbone/src/wishbone_pkg.vhd104
-rw-r--r--zpu/hdl/example/bram_dmips.vhd6712
-rw-r--r--zpu/hdl/example/helloworld.vhd6308
-rw-r--r--zpu/hdl/example/interrupt.vhd6312
-rw-r--r--zpu/hdl/example/sim_small_fpga_top.vhd414
-rw-r--r--zpu/hdl/example/sim_small_fpga_top_noint.vhd386
-rw-r--r--zpu/hdl/example/zpu_config.vhd112
-rw-r--r--zpu/hdl/example_medium/dram_dmips.vhd6616
-rw-r--r--zpu/hdl/example_medium/dram_hello.vhd6214
-rw-r--r--zpu/hdl/example_medium/sim_fpga_top.vhd370
-rw-r--r--zpu/hdl/example_medium/zpu_config_trace.vhd34
-rw-r--r--zpu/hdl/wishbone/wishbone_pkg.vhd172
-rw-r--r--zpu/hdl/wishbone/zpu_system.vhd208
-rw-r--r--zpu/hdl/wishbone/zpu_wb_bridge.vhd166
-rw-r--r--zpu/hdl/zpu4/core/zpu_config.vhd84
-rw-r--r--zpu/hdl/zpu4/core/zpu_core.vhd154
-rw-r--r--zpu/hdl/zpu4/core/zpu_core_small.vhd112
-rw-r--r--zpu/hdl/zpu4/core/zpupkg.vhd86
-rw-r--r--zpu/hdl/zpu4/src/clocks.vhd490
-rw-r--r--zpu/hdl/zpu4/src/io.vhd224
-rw-r--r--zpu/hdl/zpu4/src/timer.vhd122
-rw-r--r--zpu/hdl/zpu4/src/trace.vhd234
-rw-r--r--zpu/hdl/zpu4/src/txt_util.vhd1242
-rw-r--r--zpu/hdl/zpu4/src/zpuio.vhd464
-rw-r--r--zpu/hdl/zy2000/timer.vhd274
-rw-r--r--zpu/hdl/zy2000/trace.vhd168
-rw-r--r--zpu/hdl/zy2000/txt_util.vhd1174
-rw-r--r--zpu/hdl/zy2000/zpu_config.vhd40
-rw-r--r--zpu/hdl/zy2000/zpu_config_fast.vhd40
-rw-r--r--zpu/hdl/zy2000/zpupkg.vhd336
37 files changed, 22553 insertions, 22553 deletions
diff --git a/misc/arm7/src/arm7pkg.vhd b/misc/arm7/src/arm7pkg.vhd
index 855fbdb..4dcbb9c 100644
--- a/misc/arm7/src/arm7pkg.vhd
+++ b/misc/arm7/src/arm7pkg.vhd
@@ -1,31 +1,31 @@
-library IEEE;
-use IEEE.STD_LOGIC_1164.all;
-use IEEE.STD_LOGIC_UNSIGNED.ALL;
-library work;
-use work.wishbone_pkg.all;
-
-package arm7 is
-
- component arm7wb
- generic(
- simulate_io_time : boolean := false);
- port ( areset : in std_logic;
- cpu_clk : in std_logic;
- cpu_clk_2x : in std_logic;
- cpu_a_p : in std_logic_vector(23 downto 1);
- cpu_wr_n_p : in std_logic_vector(1 downto 0);
- cpu_cs_n_p : in std_logic_vector(3 downto 1);
- cpu_oe_n_p : in std_logic;
- cpu_d_p : inout std_logic_vector(15 downto 0);
- cpu_wait_n_p : out std_logic;
-
- arm7_debug : out std_logic;
- arm7_debug2 : out std_logic;
-
- wb_o : out wishbone_bus_in;
- wb_i : in wishbone_bus_out);
- end component;
-
-end arm7;
-
+library IEEE;
+use IEEE.STD_LOGIC_1164.all;
+use IEEE.STD_LOGIC_UNSIGNED.ALL;
+library work;
+use work.wishbone_pkg.all;
+
+package arm7 is
+
+ component arm7wb
+ generic(
+ simulate_io_time : boolean := false);
+ port ( areset : in std_logic;
+ cpu_clk : in std_logic;
+ cpu_clk_2x : in std_logic;
+ cpu_a_p : in std_logic_vector(23 downto 1);
+ cpu_wr_n_p : in std_logic_vector(1 downto 0);
+ cpu_cs_n_p : in std_logic_vector(3 downto 1);
+ cpu_oe_n_p : in std_logic;
+ cpu_d_p : inout std_logic_vector(15 downto 0);
+ cpu_wait_n_p : out std_logic;
+
+ arm7_debug : out std_logic;
+ arm7_debug2 : out std_logic;
+
+ wb_o : out wishbone_bus_in;
+ wb_i : in wishbone_bus_out);
+ end component;
+
+end arm7;
+
\ No newline at end of file
diff --git a/misc/arm7/src/arm7wb.vhd b/misc/arm7/src/arm7wb.vhd
index 3366352..85f0ef7 100644
--- a/misc/arm7/src/arm7wb.vhd
+++ b/misc/arm7/src/arm7wb.vhd
@@ -1,236 +1,236 @@
-library IEEE;
-use IEEE.STD_LOGIC_1164.all;
-use IEEE.STD_LOGIC_UNSIGNED.ALL;
-library work;
-use work.phi_config.all;
-use work.wishbone_pkg.all;
-
-entity arm7wb is
- generic(
- simulate_io_time : boolean := false);
- port ( areset : in std_logic;
- cpu_clk : in std_logic;
- cpu_clk_2x : in std_logic;
- cpu_a_p : in std_logic_vector(23 downto 1);
- cpu_wr_n_p : in std_logic_vector(1 downto 0);
- cpu_cs_n_p : in std_logic_vector(3 downto 1);
- cpu_oe_n_p : in std_logic;
- cpu_d_p : inout std_logic_vector(15 downto 0);
- cpu_wait_n_p : out std_logic;
-
- arm7_debug : out std_logic;
- arm7_debug2 : out std_logic;
-
- wb_o : out wishbone_bus_in;
- wb_i : in wishbone_bus_out);
-end arm7wb;
-
-architecture behave of arm7wb is
-
-type cpu_state_type is (cpu_idle, cpu_cs, cpu_end);
-
--- Input simulated delay
-signal cpu_wr_n_p_del : std_logic_vector(1 downto 0);
-signal cpu_a_p_del : std_logic_vector(23 downto 1);
-signal cpu_d_p_del : std_logic_vector(15 downto 0);
-signal cpu_cs_n_p_del : std_logic_vector(3 downto 1);
-signal cpu_oe_n_p_del : std_logic;
-
--- Clock phase detect signals
-signal cpu_clk_toggle : std_logic;
-signal cpu_clk_smp1 : std_logic;
-signal cpu_clk_smp2 : std_logic;
-signal cpu_clk_phase : std_logic;
-
--- Internal version of control signal (for feedback)
-signal arm7_din_int : std_logic_vector(15 downto 0);
-signal arm7_dout_int : std_logic_vector(15 downto 0);
-signal arm7_a_int : std_logic_vector(23 downto 1);
-signal arm7_we_int : std_logic_vector(1 downto 0);
-signal cyc_int : std_logic;
-signal we_int : std_logic;
-signal adr_reg : std_logic_vector(25 downto 24);
-
--- Input sampled
-signal cpu_a_smp : std_logic_vector(23 downto 1);
-signal cpu_d_smp : std_logic_vector(15 downto 0);
-signal cpu_cs_n : std_logic_vector(3 downto 1);
-signal cpu_oe_n : std_logic;
-signal cpu_wr_n : std_logic_vector(1 downto 0);
-
--- Main FSM
-signal cpu_state : cpu_state_type;
-
-constant Clock_2_Out : time := 5.5 ns;
-constant Input_Setup : time := 2.5 ns;
-
-begin
-
- arm7_dout_int <= wb_i.dat(15 downto 0) when (arm7_a_int(1) = '0') else wb_i.dat(31 downto 16);
- arm7_debug <= cpu_oe_n;
- arm7_debug2 <= cpu_wr_n(0);
-
- -- Generate 64 MBytes address based on 3 CS_N signals from CPU
- -- Memory map FPGA internal
- -- 0x00000000 DDR 32 MBytes (CS_N2 and CS_N3)
- -- 0x00200000 FPGA/Ethernet (CS_N1)
- wb_o.adr(31 downto 26) <= "000000";
- wb_o.adr(25 downto 24) <= adr_reg;
- wb_o.adr(23 downto 1) <= arm7_a_int(23 downto 1);
- wb_o.adr(0) <= '0';
-
- wb_o.dat <= (x"0000" & arm7_din_int) when (arm7_a_int(1) = '0') else (arm7_din_int & x"0000");
- wb_o.sel <= ("00" & arm7_we_int) when (arm7_a_int(1) = '0') else (arm7_we_int & "00");
-
- wb_o.cyc <= cyc_int;
- wb_o.stb <= cyc_int;
- wb_o.we <= cpu_oe_n;
-
- iotimingon:
- if simulate_io_time generate
- begin
- cpu_wr_n_p_del <= transport "XX" after 0 ns, cpu_wr_n_p after Input_Setup;
- cpu_a_p_del <= transport "XXXXXXXXXXXXXXXXXXXXXXX" after 0 ns, cpu_a_p after Input_Setup;
- cpu_d_p_del <= transport "XXXXXXXXXXXXXXXX" after 0 ns, cpu_d_p after Input_Setup;
- cpu_cs_n_p_del <= transport "XXX" after 0 ns, cpu_cs_n_p after Input_Setup;
- cpu_oe_n_p_del <= transport 'X' after 0 ns, cpu_oe_n_p after Input_Setup;
- end generate;
-
- iotimingoff:
- if not simulate_io_time generate
- begin
- cpu_wr_n_p_del <= cpu_wr_n_p;
- cpu_a_p_del <= cpu_a_p;
- cpu_d_p_del <= cpu_d_p;
- cpu_cs_n_p_del <= cpu_cs_n_p;
- cpu_oe_n_p_del <= cpu_oe_n_p;
- end generate;
-
- process(cpu_clk, areset) -- Toggle FF with 1x clock to find phase
- begin
- if areset = '1' then
- cpu_clk_toggle <= '0';
- elsif (cpu_clk'event and cpu_clk = '1') then
- cpu_clk_toggle <= not(cpu_clk_toggle);
- end if;
- end process;
-
- process(cpu_clk_2x, areset) -- Find phase relationsship between 1x and 2x clock
- begin
- if areset = '1' then
- cpu_clk_smp1 <= '0';
- cpu_clk_smp2 <= '1';
- cpu_clk_phase <= '0';
- elsif (cpu_clk_2x'event and cpu_clk_2x = '1') then
- cpu_clk_smp1 <= cpu_clk_toggle;
- cpu_clk_smp2 <= cpu_clk_smp1;
- if cpu_clk_smp1 = '1' and cpu_clk_smp2 = '0' then
- cpu_clk_phase <= '0';
- else
- cpu_clk_phase <= not(cpu_clk_phase);
- end if;
- end if;
- end process;
-
- process(cpu_clk_2x, areset) -- Sample input signals on 2x clock
- begin
- if areset = '1' then
- cpu_d_smp <= "0000000000000000";
- cpu_cs_n <= "111";
- elsif (cpu_clk_2x = '1' and cpu_clk_2x'event) then
- cpu_d_smp <= cpu_d_p_del;
- cpu_cs_n <= cpu_cs_n_p_del;
- end if;
- end process;
-
- process(cpu_clk, areset) -- Sample input signals on 1x clock
- begin
- if areset = '1' then
- cpu_a_smp <= "00000000000000000000000";
- cpu_oe_n <= '1';
- cpu_wr_n <= "11";
- elsif (cpu_clk = '1' and cpu_clk'event) then
- cpu_a_smp <= cpu_a_p_del;
- cpu_oe_n <= cpu_oe_n_p_del;
- cpu_wr_n <= cpu_wr_n_p_del;
- end if;
- end process;
-
- arm7_din_int <= cpu_d_smp;
- arm7_a_int <= cpu_a_smp;
- arm7_we_int <= not(cpu_wr_n);
-
- process(cpu_clk, areset)
- begin
- if areset = '1' then
- cpu_state <= cpu_idle;
- cyc_int <= '0';
- we_int <= '0';
- adr_reg <= "00";
- cpu_d_p <= (others => 'Z');
- elsif (cpu_clk'event and cpu_clk = '1') then
-
- cyc_int <= '0';
- we_int <= '0';
- cpu_d_p <= (others => 'Z') after Clock_2_Out;
-
-
- case cpu_state is
-
- when cpu_idle =>
- if cpu_oe_n = '1' then
- we_int <= '1';
- end if;
- if cpu_cs_n(1) = '0' then
- cyc_int <= '1';
- adr_reg <= "10";
- cpu_state <= cpu_cs;
- end if;
- if cpu_cs_n(2) = '0' then
- cyc_int <= '1';
- adr_reg <= "00";
- cpu_state <= cpu_cs;
- end if;
- if cpu_cs_n(3) = '0' then
- cyc_int <= '1';
- adr_reg <= "01";
- cpu_state <= cpu_cs;
- end if;
-
- when cpu_cs =>
- if cpu_oe_n = '0' then
- cpu_d_p <= arm7_dout_int after Clock_2_Out;
- if wb_i.ack = '1' then
- cpu_state <= cpu_end;
- else
- cyc_int <= '1';
- end if;
- else
- if wb_i.ack = '0' then
- cyc_int <= '1';
- we_int <= '1';
- else
- cpu_state <= cpu_end;
- end if;
- end if;
-
- when others =>
- cpu_state <= cpu_idle;
-
- end case;
- end if;
- end process;
-
- process(cpu_clk_2x, areset)
- begin
- if areset = '1' then
- cpu_wait_n_p <= '1';
- elsif (cpu_clk_2x'event and cpu_clk_2x = '1') then
- cpu_wait_n_p <= '1' after Clock_2_Out;
- if (cpu_state = cpu_cs and wb_i.ack = '0') then
- cpu_wait_n_p <= '0' after Clock_2_Out;
- end if;
- end if;
- end process;
-
-end behave;
+library IEEE;
+use IEEE.STD_LOGIC_1164.all;
+use IEEE.STD_LOGIC_UNSIGNED.ALL;
+library work;
+use work.phi_config.all;
+use work.wishbone_pkg.all;
+
+entity arm7wb is
+ generic(
+ simulate_io_time : boolean := false);
+ port ( areset : in std_logic;
+ cpu_clk : in std_logic;
+ cpu_clk_2x : in std_logic;
+ cpu_a_p : in std_logic_vector(23 downto 1);
+ cpu_wr_n_p : in std_logic_vector(1 downto 0);
+ cpu_cs_n_p : in std_logic_vector(3 downto 1);
+ cpu_oe_n_p : in std_logic;
+ cpu_d_p : inout std_logic_vector(15 downto 0);
+ cpu_wait_n_p : out std_logic;
+
+ arm7_debug : out std_logic;
+ arm7_debug2 : out std_logic;
+
+ wb_o : out wishbone_bus_in;
+ wb_i : in wishbone_bus_out);
+end arm7wb;
+
+architecture behave of arm7wb is
+
+type cpu_state_type is (cpu_idle, cpu_cs, cpu_end);
+
+-- Input simulated delay
+signal cpu_wr_n_p_del : std_logic_vector(1 downto 0);
+signal cpu_a_p_del : std_logic_vector(23 downto 1);
+signal cpu_d_p_del : std_logic_vector(15 downto 0);
+signal cpu_cs_n_p_del : std_logic_vector(3 downto 1);
+signal cpu_oe_n_p_del : std_logic;
+
+-- Clock phase detect signals
+signal cpu_clk_toggle : std_logic;
+signal cpu_clk_smp1 : std_logic;
+signal cpu_clk_smp2 : std_logic;
+signal cpu_clk_phase : std_logic;
+
+-- Internal version of control signal (for feedback)
+signal arm7_din_int : std_logic_vector(15 downto 0);
+signal arm7_dout_int : std_logic_vector(15 downto 0);
+signal arm7_a_int : std_logic_vector(23 downto 1);
+signal arm7_we_int : std_logic_vector(1 downto 0);
+signal cyc_int : std_logic;
+signal we_int : std_logic;
+signal adr_reg : std_logic_vector(25 downto 24);
+
+-- Input sampled
+signal cpu_a_smp : std_logic_vector(23 downto 1);
+signal cpu_d_smp : std_logic_vector(15 downto 0);
+signal cpu_cs_n : std_logic_vector(3 downto 1);
+signal cpu_oe_n : std_logic;
+signal cpu_wr_n : std_logic_vector(1 downto 0);
+
+-- Main FSM
+signal cpu_state : cpu_state_type;
+
+constant Clock_2_Out : time := 5.5 ns;
+constant Input_Setup : time := 2.5 ns;
+
+begin
+
+ arm7_dout_int <= wb_i.dat(15 downto 0) when (arm7_a_int(1) = '0') else wb_i.dat(31 downto 16);
+ arm7_debug <= cpu_oe_n;
+ arm7_debug2 <= cpu_wr_n(0);
+
+ -- Generate 64 MBytes address based on 3 CS_N signals from CPU
+ -- Memory map FPGA internal
+ -- 0x00000000 DDR 32 MBytes (CS_N2 and CS_N3)
+ -- 0x00200000 FPGA/Ethernet (CS_N1)
+ wb_o.adr(31 downto 26) <= "000000";
+ wb_o.adr(25 downto 24) <= adr_reg;
+ wb_o.adr(23 downto 1) <= arm7_a_int(23 downto 1);
+ wb_o.adr(0) <= '0';
+
+ wb_o.dat <= (x"0000" & arm7_din_int) when (arm7_a_int(1) = '0') else (arm7_din_int & x"0000");
+ wb_o.sel <= ("00" & arm7_we_int) when (arm7_a_int(1) = '0') else (arm7_we_int & "00");
+
+ wb_o.cyc <= cyc_int;
+ wb_o.stb <= cyc_int;
+ wb_o.we <= cpu_oe_n;
+
+ iotimingon:
+ if simulate_io_time generate
+ begin
+ cpu_wr_n_p_del <= transport "XX" after 0 ns, cpu_wr_n_p after Input_Setup;
+ cpu_a_p_del <= transport "XXXXXXXXXXXXXXXXXXXXXXX" after 0 ns, cpu_a_p after Input_Setup;
+ cpu_d_p_del <= transport "XXXXXXXXXXXXXXXX" after 0 ns, cpu_d_p after Input_Setup;
+ cpu_cs_n_p_del <= transport "XXX" after 0 ns, cpu_cs_n_p after Input_Setup;
+ cpu_oe_n_p_del <= transport 'X' after 0 ns, cpu_oe_n_p after Input_Setup;
+ end generate;
+
+ iotimingoff:
+ if not simulate_io_time generate
+ begin
+ cpu_wr_n_p_del <= cpu_wr_n_p;
+ cpu_a_p_del <= cpu_a_p;
+ cpu_d_p_del <= cpu_d_p;
+ cpu_cs_n_p_del <= cpu_cs_n_p;
+ cpu_oe_n_p_del <= cpu_oe_n_p;
+ end generate;
+
+ process(cpu_clk, areset) -- Toggle FF with 1x clock to find phase
+ begin
+ if areset = '1' then
+ cpu_clk_toggle <= '0';
+ elsif (cpu_clk'event and cpu_clk = '1') then
+ cpu_clk_toggle <= not(cpu_clk_toggle);
+ end if;
+ end process;
+
+ process(cpu_clk_2x, areset) -- Find phase relationsship between 1x and 2x clock
+ begin
+ if areset = '1' then
+ cpu_clk_smp1 <= '0';
+ cpu_clk_smp2 <= '1';
+ cpu_clk_phase <= '0';
+ elsif (cpu_clk_2x'event and cpu_clk_2x = '1') then
+ cpu_clk_smp1 <= cpu_clk_toggle;
+ cpu_clk_smp2 <= cpu_clk_smp1;
+ if cpu_clk_smp1 = '1' and cpu_clk_smp2 = '0' then
+ cpu_clk_phase <= '0';
+ else
+ cpu_clk_phase <= not(cpu_clk_phase);
+ end if;
+ end if;
+ end process;
+
+ process(cpu_clk_2x, areset) -- Sample input signals on 2x clock
+ begin
+ if areset = '1' then
+ cpu_d_smp <= "0000000000000000";
+ cpu_cs_n <= "111";
+ elsif (cpu_clk_2x = '1' and cpu_clk_2x'event) then
+ cpu_d_smp <= cpu_d_p_del;
+ cpu_cs_n <= cpu_cs_n_p_del;
+ end if;
+ end process;
+
+ process(cpu_clk, areset) -- Sample input signals on 1x clock
+ begin
+ if areset = '1' then
+ cpu_a_smp <= "00000000000000000000000";
+ cpu_oe_n <= '1';
+ cpu_wr_n <= "11";
+ elsif (cpu_clk = '1' and cpu_clk'event) then
+ cpu_a_smp <= cpu_a_p_del;
+ cpu_oe_n <= cpu_oe_n_p_del;
+ cpu_wr_n <= cpu_wr_n_p_del;
+ end if;
+ end process;
+
+ arm7_din_int <= cpu_d_smp;
+ arm7_a_int <= cpu_a_smp;
+ arm7_we_int <= not(cpu_wr_n);
+
+ process(cpu_clk, areset)
+ begin
+ if areset = '1' then
+ cpu_state <= cpu_idle;
+ cyc_int <= '0';
+ we_int <= '0';
+ adr_reg <= "00";
+ cpu_d_p <= (others => 'Z');
+ elsif (cpu_clk'event and cpu_clk = '1') then
+
+ cyc_int <= '0';
+ we_int <= '0';
+ cpu_d_p <= (others => 'Z') after Clock_2_Out;
+
+
+ case cpu_state is
+
+ when cpu_idle =>
+ if cpu_oe_n = '1' then
+ we_int <= '1';
+ end if;
+ if cpu_cs_n(1) = '0' then
+ cyc_int <= '1';
+ adr_reg <= "10";
+ cpu_state <= cpu_cs;
+ end if;
+ if cpu_cs_n(2) = '0' then
+ cyc_int <= '1';
+ adr_reg <= "00";
+ cpu_state <= cpu_cs;
+ end if;
+ if cpu_cs_n(3) = '0' then
+ cyc_int <= '1';
+ adr_reg <= "01";
+ cpu_state <= cpu_cs;
+ end if;
+
+ when cpu_cs =>
+ if cpu_oe_n = '0' then
+ cpu_d_p <= arm7_dout_int after Clock_2_Out;
+ if wb_i.ack = '1' then
+ cpu_state <= cpu_end;
+ else
+ cyc_int <= '1';
+ end if;
+ else
+ if wb_i.ack = '0' then
+ cyc_int <= '1';
+ we_int <= '1';
+ else
+ cpu_state <= cpu_end;
+ end if;
+ end if;
+
+ when others =>
+ cpu_state <= cpu_idle;
+
+ end case;
+ end if;
+ end process;
+
+ process(cpu_clk_2x, areset)
+ begin
+ if areset = '1' then
+ cpu_wait_n_p <= '1';
+ elsif (cpu_clk_2x'event and cpu_clk_2x = '1') then
+ cpu_wait_n_p <= '1' after Clock_2_Out;
+ if (cpu_state = cpu_cs and wb_i.ack = '0') then
+ cpu_wait_n_p <= '0' after Clock_2_Out;
+ end if;
+ end if;
+ end process;
+
+end behave;
diff --git a/misc/ddrsdram/simsrc/ddr_tb.vhd b/misc/ddrsdram/simsrc/ddr_tb.vhd
index 249dffb..92d1e4b 100644
--- a/misc/ddrsdram/simsrc/ddr_tb.vhd
+++ b/misc/ddrsdram/simsrc/ddr_tb.vhd
@@ -1,301 +1,301 @@
-library IEEE;
-use IEEE.STD_LOGIC_1164.all;
-use IEEE.STD_LOGIC_UNSIGNED.ALL;
-library work;
-use work.ddr.all;
-
-entity ddr_tb is
- port ( areset : in std_logic;
- break_out : out std_logic);
-end ddr_tb;
-
-architecture behave of ddr_tb is
-
-signal cpu_clk : std_logic;
-signal cpu_clk_2x : std_logic;
-signal cpu_clk_4x : std_logic;
-signal ddr_in_clk : std_logic;
-signal ddr_in_clk_2x : std_logic;
-
-signal ddr_command : std_logic_vector(15 downto 0);
-signal ddr_command_we : std_logic;
-
-signal ddr_data_read : std_logic_vector(31 downto 0); -- Data read from DDR SDRAM
-signal ddr_data_write : std_logic_vector(35 downto 0); -- Data to be written to DDR SDRAM
-signal ddr_req_adr : std_logic_vector(23 downto 1); -- Request address
-signal ddr_req : std_logic; -- Request DDR SDRAM access
-signal ddr_req_ack : std_logic; -- Request acknowledge
-signal ddr_busy : std_logic; -- Request acknowledge
-signal ddr_rd_wr_n : std_logic; -- Access type 1=READ, 0=WRITE
-signal ddr_req_len : std_logic; -- Number of 16-bits words to transfer
-signal ddr_read_en : std_logic; -- Enable signal for read data
-signal ddr_write_en : std_logic; -- Enable (read) signal for data write
-signal refresh_en : std_logic;
-
-signal sdr_clk_p : std_logic; -- ddr_sdram_clock
-signal sdr_clk_n_p : std_logic; -- /ddr_sdram_clock
-signal cke_q_p : std_logic; -- clock enable
-signal cs_qn_p : std_logic; -- /chip select
-signal ras_qn_p : std_logic; -- /ras
-signal cas_qn_p : std_logic; -- /cas
-signal we_qn_p : std_logic; -- /write enable
-signal dm_q_p : std_logic_vector(1 downto 0); -- data mask bits, set to "00"
-signal dqs_q_p : std_logic_vector(1 downto 0); -- data strobe, only for write
-signal ba_q_p : std_logic_vector(1 downto 0); -- bank select
-signal sdr_a_p : std_logic_vector(12 downto 0); -- address bus
-signal sdr_d_p : std_logic_vector(15 downto 0); -- bidir data bus
-
-constant min_time : time := 1.875 ns;
-
-begin
-
- clock1:
- process
- begin
- loop
- cpu_clk_4x <= '1';
- wait for min_time;
- cpu_clk_4x <= '0';
- wait for min_time;
- end loop;
- end process;
-
- clock2:
- process
- begin
- loop
- cpu_clk_2x <= '1' after 100 ps;
- wait until rising_edge(cpu_clk_4x);
- cpu_clk_2x <= '0' after 100 ps;
- wait until rising_edge(cpu_clk_4x);
- end loop;
- end process;
-
- clock3:
- process
- begin
- loop
- cpu_clk <= '1' after 100 ps;
- wait until rising_edge(cpu_clk_2x);
- cpu_clk <= '0' after 100 ps;
- wait until rising_edge(cpu_clk_2x);
- end loop;
- end process;
-
- ddr_in_clk_2x <= cpu_clk_4x after 1 ns;
-
- clock4:
- process
- begin
- loop
- ddr_in_clk <= '0' after 100 ps;
- wait until rising_edge(ddr_in_clk_2x);
- ddr_in_clk <= '1' after 100 ps;
- wait until rising_edge(ddr_in_clk_2x);
- end loop;
- end process;
-
- inputdata:
- process
- begin
- -- Wait until global reset released
- loop
- ddr_command <= x"0000";
- ddr_command_we <= '0';
- ddr_data_write <= x"000000000";
- ddr_req <= '0';
- ddr_req_adr <= "00000000000000000000000";
- ddr_rd_wr_n <= '0';
- ddr_req_len <= '0';
- break_out <= '0';
- refresh_en <= '0';
-
- wait until falling_edge(areset);
-
- -- DDR initialization sequence
- -- Wait more than 200 us
- wait for 201000 ns;
-
- -- Send precharge command
- wait until rising_edge(cpu_clk);
- ddr_command <= x"8000";
- ddr_command_we <= '1';
- wait until rising_edge(cpu_clk);
- ddr_command <= x"0000";
- ddr_command_we <= '0';
-
- -- Wait for 1 us
- wait for 1000 ns;
-
- -- Load extended mode register
- -- Enable DLL
- -- Normal drive strength
- wait until rising_edge(cpu_clk);
- ddr_command <= x"2000";
- ddr_command_we <= '1';
- wait until rising_edge(cpu_clk);
- ddr_command <= x"0000";
- ddr_command_we <= '0';
-
- -- Wait for 1 us
- wait for 1000 ns;
-
- -- Load mode register
- -- Burst length: 2
- -- Burst type: Sequential
- -- Cas latency: 2
- -- Reset DLL
- wait until rising_edge(cpu_clk);
- ddr_command <= x"0121";
- ddr_command_we <= '1';
- wait until rising_edge(cpu_clk);
- ddr_command <= x"0000";
- ddr_command_we <= '0';
-
- -- Wait for 1 us
- wait for 1000 ns;
-
- -- Send precharge command
- wait until rising_edge(cpu_clk);
- ddr_command <= x"8000";
- ddr_command_we <= '1';
- wait until rising_edge(cpu_clk);
- ddr_command <= x"0000";
- ddr_command_we <= '0';
-
- -- Enable refresh
- refresh_en <= '1';
-
- -- Wait 30 us (minimum 2 autorefresh cycles)
- wait for 30000 ns;
-
- -- Load mode register
- -- Burst length: 2
- -- Burst type: Sequential
- -- Cas latency: 2
- -- Deactivate Reset DLL
- wait until rising_edge(cpu_clk);
- ddr_command <= x"0021";
- ddr_command_we <= '1';
- wait until rising_edge(cpu_clk);
- ddr_command <= x"0000";
- ddr_command_we <= '0';
-
- -- Wait for 2 us (DLL stable)
- wait for 2000 ns;
-
- -- Write data to DDR
- wait until rising_edge(cpu_clk_2x);
- ddr_data_write <= x"312345678";
- ddr_req <= '1';
- ddr_req_adr <= "00000000000000000000000";
- ddr_rd_wr_n <= '0';
- ddr_req_len <= '0';
- wait until rising_edge(ddr_write_en);
- wait until rising_edge(cpu_clk_2x);
- ddr_req <= '0';
- ddr_req_adr <= "00000000000000000000000";
- ddr_rd_wr_n <= '0';
- ddr_req_len <= '0';
- ddr_data_write <= x"000000000";
- wait for 100 ns;
-
- -- Read data from DDR
- wait until rising_edge(cpu_clk_2x);
- ddr_req <= '1';
- ddr_req_adr <= "00000000000000000000000";
- ddr_rd_wr_n <= '1';
- ddr_req_len <= '0';
- wait until rising_edge(ddr_req_ack);
- wait until rising_edge(cpu_clk_2x);
- ddr_req <= '0';
- ddr_req_adr <= "00000000000000000000000";
- ddr_rd_wr_n <= '0';
- ddr_req_len <= '0';
- ddr_data_write <= x"000000000";
-
-
-
- wait for 100 ns;
- break_out <= '1';
- wait for 100 ns;
-
- end loop;
-
- end process;
-
- ddr_ctrl:
- ddr_top port map(
- areset => areset,
- cpu_clk => cpu_clk,
- cpu_clk_2x => cpu_clk_2x,
- cpu_clk_4x => cpu_clk_4x,
- ddr_in_clk => ddr_in_clk,
- ddr_in_clk_2x => ddr_in_clk_2x,
-
- -- Command interface
- ddr_command => ddr_command,
- ddr_command_we => ddr_command_we,
- refresh_en => refresh_en,
-
- -- Data interface signals
- ddr_data_read => ddr_data_read,
- ddr_data_write => ddr_data_write,
- ddr_req_adr => ddr_req_adr,
- ddr_req => ddr_req,
- ddr_req_ack => ddr_req_ack,
- ddr_busy => ddr_busy,
- ddr_rd_wr_n => ddr_rd_wr_n,
- ddr_req_len => ddr_req_len,
- ddr_read_en => ddr_read_en,
- ddr_write_en => ddr_write_en,
- -- DDR SDRAM Signals
- sdr_clk_p => sdr_clk_p,
- sdr_clk_n_p => sdr_clk_n_p,
- cke_q_p => cke_q_p,
- cs_qn_p => cs_qn_p,
- ras_qn_p => ras_qn_p,
- cas_qn_p => cas_qn_p,
- we_qn_p => we_qn_p,
- dm_q_p => dm_q_p,
- dqs_q_p => dqs_q_p,
- ba_q_p => ba_q_p,
- sdr_a_p => sdr_a_p,
- sdr_d_p => sdr_d_p);
-
- myram:
- MT46V16M16 generic map(
- tCK => 7.500 ns,
- tCH => 3.375 ns, -- 0.45*tCK
- tCL => 3.375 ns, -- 0.45*tCK
- tDH => 0.500 ns,
- tDS => 0.500 ns,
- tIH => 0.900 ns,
- tIS => 0.900 ns,
- tMRD => 15.000 ns,
- tRAS => 40.000 ns,
- tRAP => 20.000 ns,
- tRC => 65.000 ns,
- tRFC => 75.000 ns,
- tRCD => 20.000 ns,
- tRP => 20.000 ns,
- tRRD => 15.000 ns,
- tWR => 15.000 ns,
- addr_bits => 13,
- data_bits => 16,
- cols_bits => 9)
- port map(
- Dq => sdr_d_p,
- Dqs => dqs_q_p,
- Addr => sdr_a_p,
- Ba => ba_q_p,
- Clk => sdr_clk_p,
- Clk_n => sdr_clk_n_p,
- Cke => cke_q_p,
- Cs_n => cs_qn_p,
- Ras_n => ras_qn_p,
- Cas_n => cas_qn_p,
- We_n => we_qn_p,
- Dm => dm_q_p);
-
-end behave;
+library IEEE;
+use IEEE.STD_LOGIC_1164.all;
+use IEEE.STD_LOGIC_UNSIGNED.ALL;
+library work;
+use work.ddr.all;
+
+entity ddr_tb is
+ port ( areset : in std_logic;
+ break_out : out std_logic);
+end ddr_tb;
+
+architecture behave of ddr_tb is
+
+signal cpu_clk : std_logic;
+signal cpu_clk_2x : std_logic;
+signal cpu_clk_4x : std_logic;
+signal ddr_in_clk : std_logic;
+signal ddr_in_clk_2x : std_logic;
+
+signal ddr_command : std_logic_vector(15 downto 0);
+signal ddr_command_we : std_logic;
+
+signal ddr_data_read : std_logic_vector(31 downto 0); -- Data read from DDR SDRAM
+signal ddr_data_write : std_logic_vector(35 downto 0); -- Data to be written to DDR SDRAM
+signal ddr_req_adr : std_logic_vector(23 downto 1); -- Request address
+signal ddr_req : std_logic; -- Request DDR SDRAM access
+signal ddr_req_ack : std_logic; -- Request acknowledge
+signal ddr_busy : std_logic; -- Request acknowledge
+signal ddr_rd_wr_n : std_logic; -- Access type 1=READ, 0=WRITE
+signal ddr_req_len : std_logic; -- Number of 16-bits words to transfer
+signal ddr_read_en : std_logic; -- Enable signal for read data
+signal ddr_write_en : std_logic; -- Enable (read) signal for data write
+signal refresh_en : std_logic;
+
+signal sdr_clk_p : std_logic; -- ddr_sdram_clock
+signal sdr_clk_n_p : std_logic; -- /ddr_sdram_clock
+signal cke_q_p : std_logic; -- clock enable
+signal cs_qn_p : std_logic; -- /chip select
+signal ras_qn_p : std_logic; -- /ras
+signal cas_qn_p : std_logic; -- /cas
+signal we_qn_p : std_logic; -- /write enable
+signal dm_q_p : std_logic_vector(1 downto 0); -- data mask bits, set to "00"
+signal dqs_q_p : std_logic_vector(1 downto 0); -- data strobe, only for write
+signal ba_q_p : std_logic_vector(1 downto 0); -- bank select
+signal sdr_a_p : std_logic_vector(12 downto 0); -- address bus
+signal sdr_d_p : std_logic_vector(15 downto 0); -- bidir data bus
+
+constant min_time : time := 1.875 ns;
+
+begin
+
+ clock1:
+ process
+ begin
+ loop
+ cpu_clk_4x <= '1';
+ wait for min_time;
+ cpu_clk_4x <= '0';
+ wait for min_time;
+ end loop;
+ end process;
+
+ clock2:
+ process
+ begin
+ loop
+ cpu_clk_2x <= '1' after 100 ps;
+ wait until rising_edge(cpu_clk_4x);
+ cpu_clk_2x <= '0' after 100 ps;
+ wait until rising_edge(cpu_clk_4x);
+ end loop;
+ end process;
+
+ clock3:
+ process
+ begin
+ loop
+ cpu_clk <= '1' after 100 ps;
+ wait until rising_edge(cpu_clk_2x);
+ cpu_clk <= '0' after 100 ps;
+ wait until rising_edge(cpu_clk_2x);
+ end loop;
+ end process;
+
+ ddr_in_clk_2x <= cpu_clk_4x after 1 ns;
+
+ clock4:
+ process
+ begin
+ loop
+ ddr_in_clk <= '0' after 100 ps;
+ wait until rising_edge(ddr_in_clk_2x);
+ ddr_in_clk <= '1' after 100 ps;
+ wait until rising_edge(ddr_in_clk_2x);
+ end loop;
+ end process;
+
+ inputdata:
+ process
+ begin
+ -- Wait until global reset released
+ loop
+ ddr_command <= x"0000";
+ ddr_command_we <= '0';
+ ddr_data_write <= x"000000000";
+ ddr_req <= '0';
+ ddr_req_adr <= "00000000000000000000000";
+ ddr_rd_wr_n <= '0';
+ ddr_req_len <= '0';
+ break_out <= '0';
+ refresh_en <= '0';
+
+ wait until falling_edge(areset);
+
+ -- DDR initialization sequence
+ -- Wait more than 200 us
+ wait for 201000 ns;
+
+ -- Send precharge command
+ wait until rising_edge(cpu_clk);
+ ddr_command <= x"8000";
+ ddr_command_we <= '1';
+ wait until rising_edge(cpu_clk);
+ ddr_command <= x"0000";
+ ddr_command_we <= '0';
+
+ -- Wait for 1 us
+ wait for 1000 ns;
+
+ -- Load extended mode register
+ -- Enable DLL
+ -- Normal drive strength
+ wait until rising_edge(cpu_clk);
+ ddr_command <= x"2000";
+ ddr_command_we <= '1';
+ wait until rising_edge(cpu_clk);
+ ddr_command <= x"0000";
+ ddr_command_we <= '0';
+
+ -- Wait for 1 us
+ wait for 1000 ns;
+
+ -- Load mode register
+ -- Burst length: 2
+ -- Burst type: Sequential
+ -- Cas latency: 2
+ -- Reset DLL
+ wait until rising_edge(cpu_clk);
+ ddr_command <= x"0121";
+ ddr_command_we <= '1';
+ wait until rising_edge(cpu_clk);
+ ddr_command <= x"0000";
+ ddr_command_we <= '0';
+
+ -- Wait for 1 us
+ wait for 1000 ns;
+
+ -- Send precharge command
+ wait until rising_edge(cpu_clk);
+ ddr_command <= x"8000";
+ ddr_command_we <= '1';
+ wait until rising_edge(cpu_clk);
+ ddr_command <= x"0000";
+ ddr_command_we <= '0';
+
+ -- Enable refresh
+ refresh_en <= '1';
+
+ -- Wait 30 us (minimum 2 autorefresh cycles)
+ wait for 30000 ns;
+
+ -- Load mode register
+ -- Burst length: 2
+ -- Burst type: Sequential
+ -- Cas latency: 2
+ -- Deactivate Reset DLL
+ wait until rising_edge(cpu_clk);
+ ddr_command <= x"0021";
+ ddr_command_we <= '1';
+ wait until rising_edge(cpu_clk);
+ ddr_command <= x"0000";
+ ddr_command_we <= '0';
+
+ -- Wait for 2 us (DLL stable)
+ wait for 2000 ns;
+
+ -- Write data to DDR
+ wait until rising_edge(cpu_clk_2x);
+ ddr_data_write <= x"312345678";
+ ddr_req <= '1';
+ ddr_req_adr <= "00000000000000000000000";
+ ddr_rd_wr_n <= '0';
+ ddr_req_len <= '0';
+ wait until rising_edge(ddr_write_en);
+ wait until rising_edge(cpu_clk_2x);
+ ddr_req <= '0';
+ ddr_req_adr <= "00000000000000000000000";
+ ddr_rd_wr_n <= '0';
+ ddr_req_len <= '0';
+ ddr_data_write <= x"000000000";
+ wait for 100 ns;
+
+ -- Read data from DDR
+ wait until rising_edge(cpu_clk_2x);
+ ddr_req <= '1';
+ ddr_req_adr <= "00000000000000000000000";
+ ddr_rd_wr_n <= '1';
+ ddr_req_len <= '0';
+ wait until rising_edge(ddr_req_ack);
+ wait until rising_edge(cpu_clk_2x);
+ ddr_req <= '0';
+ ddr_req_adr <= "00000000000000000000000";
+ ddr_rd_wr_n <= '0';
+ ddr_req_len <= '0';
+ ddr_data_write <= x"000000000";
+
+
+
+ wait for 100 ns;
+ break_out <= '1';
+ wait for 100 ns;
+
+ end loop;
+
+ end process;
+
+ ddr_ctrl:
+ ddr_top port map(
+ areset => areset,
+ cpu_clk => cpu_clk,
+ cpu_clk_2x => cpu_clk_2x,
+ cpu_clk_4x => cpu_clk_4x,
+ ddr_in_clk => ddr_in_clk,
+ ddr_in_clk_2x => ddr_in_clk_2x,
+
+ -- Command interface
+ ddr_command => ddr_command,
+ ddr_command_we => ddr_command_we,
+ refresh_en => refresh_en,
+
+ -- Data interface signals
+ ddr_data_read => ddr_data_read,
+ ddr_data_write => ddr_data_write,
+ ddr_req_adr => ddr_req_adr,
+ ddr_req => ddr_req,
+ ddr_req_ack => ddr_req_ack,
+ ddr_busy => ddr_busy,
+ ddr_rd_wr_n => ddr_rd_wr_n,
+ ddr_req_len => ddr_req_len,
+ ddr_read_en => ddr_read_en,
+ ddr_write_en => ddr_write_en,
+ -- DDR SDRAM Signals
+ sdr_clk_p => sdr_clk_p,
+ sdr_clk_n_p => sdr_clk_n_p,
+ cke_q_p => cke_q_p,
+ cs_qn_p => cs_qn_p,
+ ras_qn_p => ras_qn_p,
+ cas_qn_p => cas_qn_p,
+ we_qn_p => we_qn_p,
+ dm_q_p => dm_q_p,
+ dqs_q_p => dqs_q_p,
+ ba_q_p => ba_q_p,
+ sdr_a_p => sdr_a_p,
+ sdr_d_p => sdr_d_p);
+
+ myram:
+ MT46V16M16 generic map(
+ tCK => 7.500 ns,
+ tCH => 3.375 ns, -- 0.45*tCK
+ tCL => 3.375 ns, -- 0.45*tCK
+ tDH => 0.500 ns,
+ tDS => 0.500 ns,
+ tIH => 0.900 ns,
+ tIS => 0.900 ns,
+ tMRD => 15.000 ns,
+ tRAS => 40.000 ns,
+ tRAP => 20.000 ns,
+ tRC => 65.000 ns,
+ tRFC => 75.000 ns,
+ tRCD => 20.000 ns,
+ tRP => 20.000 ns,
+ tRRD => 15.000 ns,
+ tWR => 15.000 ns,
+ addr_bits => 13,
+ data_bits => 16,
+ cols_bits => 9)
+ port map(
+ Dq => sdr_d_p,
+ Dqs => dqs_q_p,
+ Addr => sdr_a_p,
+ Ba => ba_q_p,
+ Clk => sdr_clk_p,
+ Clk_n => sdr_clk_n_p,
+ Cke => cke_q_p,
+ Cs_n => cs_qn_p,
+ Ras_n => ras_qn_p,
+ Cas_n => cas_qn_p,
+ We_n => we_qn_p,
+ Dm => dm_q_p);
+
+end behave;
diff --git a/misc/ddrsdram/src/ddr_pkg.vhd b/misc/ddrsdram/src/ddr_pkg.vhd
index 0e41a88..af4a705 100644
--- a/misc/ddrsdram/src/ddr_pkg.vhd
+++ b/misc/ddrsdram/src/ddr_pkg.vhd
@@ -1,107 +1,107 @@
-library IEEE;
-use IEEE.STD_LOGIC_1164.all;
-use IEEE.STD_LOGIC_UNSIGNED.ALL;
-
-package ddr is
-
- function mirror_bus32 ( org_sig : std_logic_vector) return std_logic_vector;
- function mirror_bus4 ( org_sig : std_logic_vector) return std_logic_vector;
-
- component ddr_top
- generic(
- simulate_io_time : boolean := false);
- port ( -- Asyncronous reset and clocks
- areset : in std_logic;
- cpu_clk : in std_logic;
- cpu_clk_2x : in std_logic;
- cpu_clk_4x : in std_logic;
- ddr_in_clk : in std_logic;
- ddr_in_clk_2x : in std_logic;
-
- -- Command interface
- ddr_command : in std_logic_vector(15 downto 0);
- ddr_command_we : in std_logic;
- refresh_en : in std_logic;
-
-
- -- Data interface signals
- ddr_data_read : out std_logic_vector(31 downto 0); -- Data read from DDR SDRAM
- ddr_data_write : in std_logic_vector(35 downto 0); -- Data to be written to DDR SDRAM
- ddr_req_adr : in std_logic_vector(25 downto 1); -- Request address
- ddr_req : in std_logic; -- Request DDR SDRAM access
- ddr_busy : out std_logic; -- Request acknowledge
- ddr_rd_wr_n : in std_logic; -- Access type 1=READ, 0=WRITE
- ddr_req_len : in std_logic; -- Number of 16-bits words to transfer (0=2, 1=8)
- ddr_read_en : out std_logic; -- Enable signal for read data
- ddr_write_en : out std_logic; -- Enable (read) signal for data write
-
- -- DDR SDRAM Signals
- sdr_clk_p : out std_logic; -- ddr_sdram_clock
- sdr_clk_n_p : out std_logic; -- /ddr_sdram_clock
- cke_q_p : out std_logic; -- clock enable
- cs_qn_p : out std_logic; -- /chip select
- ras_qn_p : inout std_logic; -- /ras
- cas_qn_p : inout std_logic; -- /cas
- we_qn_p : inout std_logic; -- /write enable
- dm_q_p : out std_logic_vector(1 downto 0); -- data mask bits, set to "00"
- dqs_q_p : out std_logic_vector(1 downto 0); -- data strobe, only for write
- ba_q_p : out std_logic_vector(1 downto 0); -- bank select
- sdr_a_p : out std_logic_vector(12 downto 0); -- address bus
- sdr_d_p : inout std_logic_vector(15 downto 0)); -- bidir data bus
- end component;
-
- component MT46V16M16
- GENERIC ( -- Timing for -75Z CL2
- tCK : TIME := 7.500 ns;
- tCH : TIME := 3.375 ns; -- 0.45*tCK
- tCL : TIME := 3.375 ns; -- 0.45*tCK
- tDH : TIME := 0.500 ns;
- tDS : TIME := 0.500 ns;
- tIH : TIME := 0.900 ns;
- tIS : TIME := 0.900 ns;
- tMRD : TIME := 15.000 ns;
- tRAS : TIME := 40.000 ns;
- tRAP : TIME := 20.000 ns;
- tRC : TIME := 65.000 ns;
- tRFC : TIME := 75.000 ns;
- tRCD : TIME := 20.000 ns;
- tRP : TIME := 20.000 ns;
- tRRD : TIME := 15.000 ns;
- tWR : TIME := 15.000 ns;
- addr_bits : INTEGER := 13;
- data_bits : INTEGER := 16;
- cols_bits : INTEGER := 9
- );
- PORT (
- Dq : INOUT STD_LOGIC_VECTOR (data_bits - 1 DOWNTO 0) := (OTHERS => 'Z');
- Dqs : INOUT STD_LOGIC_VECTOR (1 DOWNTO 0) := "ZZ";
- Addr : IN STD_LOGIC_VECTOR (addr_bits - 1 DOWNTO 0);
- Ba : IN STD_LOGIC_VECTOR (1 DOWNTO 0);
- Clk : IN STD_LOGIC;
- Clk_n : IN STD_LOGIC;
- Cke : IN STD_LOGIC;
- Cs_n : IN STD_LOGIC;
- Ras_n : IN STD_LOGIC;
- Cas_n : IN STD_LOGIC;
- We_n : IN STD_LOGIC;
- Dm : IN STD_LOGIC_VECTOR (1 DOWNTO 0)
- );
- end component;
-
-end;
-
-package body ddr is
-
- function mirror_bus32 ( org_sig : std_logic_vector) return std_logic_vector is
- begin
- return (org_sig(7 downto 0) & org_sig(15 downto 8) & org_sig(23 downto 16) & org_sig(31 downto 24));
- end function mirror_bus32;
-
- function mirror_bus4 ( org_sig : std_logic_vector) return std_logic_vector is
- begin
- return (org_sig(0) & org_sig(1) & org_sig(2) & org_sig(3));
- end function mirror_bus4;
-
-end package body;
-
+library IEEE;
+use IEEE.STD_LOGIC_1164.all;
+use IEEE.STD_LOGIC_UNSIGNED.ALL;
+
+package ddr is
+
+ function mirror_bus32 ( org_sig : std_logic_vector) return std_logic_vector;
+ function mirror_bus4 ( org_sig : std_logic_vector) return std_logic_vector;
+
+ component ddr_top
+ generic(
+ simulate_io_time : boolean := false);
+ port ( -- Asyncronous reset and clocks
+ areset : in std_logic;
+ cpu_clk : in std_logic;
+ cpu_clk_2x : in std_logic;
+ cpu_clk_4x : in std_logic;
+ ddr_in_clk : in std_logic;
+ ddr_in_clk_2x : in std_logic;
+
+ -- Command interface
+ ddr_command : in std_logic_vector(15 downto 0);
+ ddr_command_we : in std_logic;
+ refresh_en : in std_logic;
+
+
+ -- Data interface signals
+ ddr_data_read : out std_logic_vector(31 downto 0); -- Data read from DDR SDRAM
+ ddr_data_write : in std_logic_vector(35 downto 0); -- Data to be written to DDR SDRAM
+ ddr_req_adr : in std_logic_vector(25 downto 1); -- Request address
+ ddr_req : in std_logic; -- Request DDR SDRAM access
+ ddr_busy : out std_logic; -- Request acknowledge
+ ddr_rd_wr_n : in std_logic; -- Access type 1=READ, 0=WRITE
+ ddr_req_len : in std_logic; -- Number of 16-bits words to transfer (0=2, 1=8)
+ ddr_read_en : out std_logic; -- Enable signal for read data
+ ddr_write_en : out std_logic; -- Enable (read) signal for data write
+
+ -- DDR SDRAM Signals
+ sdr_clk_p : out std_logic; -- ddr_sdram_clock
+ sdr_clk_n_p : out std_logic; -- /ddr_sdram_clock
+ cke_q_p : out std_logic; -- clock enable
+ cs_qn_p : out std_logic; -- /chip select
+ ras_qn_p : inout std_logic; -- /ras
+ cas_qn_p : inout std_logic; -- /cas
+ we_qn_p : inout std_logic; -- /write enable
+ dm_q_p : out std_logic_vector(1 downto 0); -- data mask bits, set to "00"
+ dqs_q_p : out std_logic_vector(1 downto 0); -- data strobe, only for write
+ ba_q_p : out std_logic_vector(1 downto 0); -- bank select
+ sdr_a_p : out std_logic_vector(12 downto 0); -- address bus
+ sdr_d_p : inout std_logic_vector(15 downto 0)); -- bidir data bus
+ end component;
+
+ component MT46V16M16
+ GENERIC ( -- Timing for -75Z CL2
+ tCK : TIME := 7.500 ns;
+ tCH : TIME := 3.375 ns; -- 0.45*tCK
+ tCL : TIME := 3.375 ns; -- 0.45*tCK
+ tDH : TIME := 0.500 ns;
+ tDS : TIME := 0.500 ns;
+ tIH : TIME := 0.900 ns;
+ tIS : TIME := 0.900 ns;
+ tMRD : TIME := 15.000 ns;
+ tRAS : TIME := 40.000 ns;
+ tRAP : TIME := 20.000 ns;
+ tRC : TIME := 65.000 ns;
+ tRFC : TIME := 75.000 ns;
+ tRCD : TIME := 20.000 ns;
+ tRP : TIME := 20.000 ns;
+ tRRD : TIME := 15.000 ns;
+ tWR : TIME := 15.000 ns;
+ addr_bits : INTEGER := 13;
+ data_bits : INTEGER := 16;
+ cols_bits : INTEGER := 9
+ );
+ PORT (
+ Dq : INOUT STD_LOGIC_VECTOR (data_bits - 1 DOWNTO 0) := (OTHERS => 'Z');
+ Dqs : INOUT STD_LOGIC_VECTOR (1 DOWNTO 0) := "ZZ";
+ Addr : IN STD_LOGIC_VECTOR (addr_bits - 1 DOWNTO 0);
+ Ba : IN STD_LOGIC_VECTOR (1 DOWNTO 0);
+ Clk : IN STD_LOGIC;
+ Clk_n : IN STD_LOGIC;
+ Cke : IN STD_LOGIC;
+ Cs_n : IN STD_LOGIC;
+ Ras_n : IN STD_LOGIC;
+ Cas_n : IN STD_LOGIC;
+ We_n : IN STD_LOGIC;
+ Dm : IN STD_LOGIC_VECTOR (1 DOWNTO 0)
+ );
+ end component;
+
+end;
+
+package body ddr is
+
+ function mirror_bus32 ( org_sig : std_logic_vector) return std_logic_vector is
+ begin
+ return (org_sig(7 downto 0) & org_sig(15 downto 8) & org_sig(23 downto 16) & org_sig(31 downto 24));
+ end function mirror_bus32;
+
+ function mirror_bus4 ( org_sig : std_logic_vector) return std_logic_vector is
+ begin
+ return (org_sig(0) & org_sig(1) & org_sig(2) & org_sig(3));
+ end function mirror_bus4;
+
+end package body;
+
\ No newline at end of file
diff --git a/misc/ddrsdram/src/ddr_top.vhd b/misc/ddrsdram/src/ddr_top.vhd
index 033e9f8..2aceae9 100644
--- a/misc/ddrsdram/src/ddr_top.vhd
+++ b/misc/ddrsdram/src/ddr_top.vhd
@@ -1,743 +1,743 @@
-library IEEE;
-use IEEE.STD_LOGIC_1164.all;
-use IEEE.STD_LOGIC_UNSIGNED.ALL;
-
-library UNISIM;
-use UNISIM.vcomponents.all;
-
-entity ddr_top is
- generic(
- simulate_io_time : boolean := false);
- port ( -- Asyncronous reset and clocks
- areset : in std_logic;
- cpu_clk : in std_logic;
- cpu_clk_2x : in std_logic;
- cpu_clk_4x : in std_logic;
- ddr_in_clk : in std_logic;
- ddr_in_clk_2x : in std_logic;
-
- -- Command interface
- ddr_command : in std_logic_vector(15 downto 0);
- ddr_command_we : in std_logic;
- refresh_en : in std_logic;
-
- -- Data interface signals
- ddr_data_read : out std_logic_vector(31 downto 0); -- Data read from DDR SDRAM
- ddr_data_write : in std_logic_vector(35 downto 0); -- Data to be written to DDR SDRAM
- ddr_req_adr : in std_logic_vector(25 downto 1); -- Request address
- ddr_req : in std_logic; -- Request DDR SDRAM access
- ddr_busy : out std_logic; -- Request acknowledge
- ddr_rd_wr_n : in std_logic; -- Access type 1=READ, 0=WRITE
- ddr_req_len : in std_logic; -- Number of 16-bits words to transfer (0=2, 1=8)
- ddr_read_en : out std_logic; -- Enable signal for read data
- ddr_write_en : out std_logic; -- Enable (read) signal for data write
-
- -- DDR SDRAM Signals
- sdr_clk_p : out std_logic; -- ddr_sdram_clock
- sdr_clk_n_p : out std_logic; -- /ddr_sdram_clock
- cke_q_p : out std_logic; -- clock enable
- cs_qn_p : out std_logic; -- /chip select
- ras_qn_p : inout std_logic; -- /ras
- cas_qn_p : inout std_logic; -- /cas
- we_qn_p : inout std_logic; -- /write enable
- dm_q_p : out std_logic_vector(1 downto 0); -- data mask bits, set to "00"
- dqs_q_p : out std_logic_vector(1 downto 0); -- data strobe, only for write
- ba_q_p : out std_logic_vector(1 downto 0); -- bank select
- sdr_a_p : out std_logic_vector(12 downto 0); -- address bus
- sdr_d_p : inout std_logic_vector(15 downto 0)); -- bidir data bus
-end ddr_top;
-
-architecture behave of ddr_top is
-
-attribute keep : string;
-
-type clk4_type is array(0 to 15) of std_logic_vector(1 downto 0);
-
-signal cpu_clk_tog : std_logic;
-signal ddr_cmd : std_logic_vector(15 downto 0);
-signal ddr_cmd_we_smp : std_logic;
-signal new_command : std_logic;
-
-signal cpu_clk_2x_smp1 : std_logic;
-signal cpu_clk_2x_smp2 : std_logic;
-signal cpu_clk_4x_smp1 : std_logic;
-signal cpu_clk_4x_smp2 : std_logic;
-
-signal clk2_phase : std_logic;
-signal clk4_phase : std_logic_vector(3 downto 0);
-signal clk4_phase_short : clk4_type;
-attribute keep of clk4_phase_short:signal is "true";
-
-signal ddr_clk_tog : std_logic;
-signal ddr_clk_smp1 : std_logic;
-signal ddr_clk_smp2 : std_logic;
-signal ddr_clk_phase : std_logic;
-
-signal smp_req_adr : std_logic_vector(25 downto 1);
-signal smp_req_type : std_logic;
-signal smp_req_len : std_logic;
-signal ddr_write_en_int : std_logic;
-signal ddr_read_en_int : std_logic;
-
-signal dqs_q : std_logic_vector(1 downto 0);
-signal dqs_oe_n : std_logic_vector(1 downto 0);
-attribute keep of dqs_oe_n:signal is "true";
-signal cas_qn : std_logic;
-signal ras_qn : std_logic;
-signal we_qn : std_logic;
-signal ba_q : std_logic_vector(1 downto 0);
-signal sdr_clk : std_logic;
-signal sdr_clk_n : std_logic;
-signal sdr_a : std_logic_vector(12 downto 0);
-signal sdr_d : std_logic_vector(15 downto 0);
-signal sdr_smp : std_logic_vector(35 downto 0);
-signal sdr_oe_n : std_logic_vector(15 downto 0);
-attribute keep of sdr_oe_n:signal is "true";
-signal sdr_oe_ctrl : std_logic_vector(15 downto 0);
-attribute keep of sdr_oe_ctrl:signal is "true";
-signal sdr_wr_msw : std_logic_vector(17 downto 0);
-attribute keep of sdr_wr_msw:signal is "true";
-signal dm_q : std_logic_vector(1 downto 0);
-
-signal nowin_idle_dqs : std_logic_vector(1 downto 0);
-signal nowin_wr_nop1_d : std_logic_vector(15 downto 0);
-signal nowin_wr_nop1_dqs : std_logic_vector(1 downto 0);
-signal nowin_wr_nop1_dm : std_logic_vector(1 downto 0);
-signal nowin_wr_nop2_dqs : std_logic_vector(1 downto 0);
-signal nowin_wr_nop3_d : std_logic_vector(15 downto 0);
-signal nowin_wr_nop3_dqs : std_logic_vector(1 downto 0);
-attribute keep of nowin_idle_dqs:signal is "true";
-attribute keep of nowin_wr_nop1_d:signal is "true";
-attribute keep of nowin_wr_nop1_dqs:signal is "true";
-attribute keep of nowin_wr_nop1_dm:signal is "true";
-attribute keep of nowin_wr_nop2_dqs:signal is "true";
-attribute keep of nowin_wr_nop3_d:signal is "true";
-attribute keep of nowin_wr_nop3_dqs:signal is "true";
-
-signal cas_n_smp : std_logic;
-signal ras_n_smp : std_logic;
-signal we_n_smp : std_logic;
-signal read_start_sig : std_logic;
-signal sdr_d_in : std_logic_vector(15 downto 0);
-signal read_time_cnt : std_logic_vector(1 downto 0);
-signal read_input_en : std_logic;
-signal read_input_en_del : std_logic;
-signal ddr_data_read_int : std_logic_vector(31 downto 0);
-
-signal refresh_pend : std_logic;
-signal refresh_end : std_logic;
-signal refresh_cnt : std_logic_vector(9 downto 0);
-signal refresh_wait_cnt : std_logic_vector(3 downto 0);
-signal refresh_wait_end : std_logic;
-
-signal cas_qn_p_del : std_logic;
-signal ras_qn_p_del : std_logic;
-signal we_qn_p_del : std_logic;
-signal sdr_d_p_del : std_logic_vector(15 downto 0);
-
-signal saved_row : std_logic_vector(26 downto 11);
-signal operation : std_logic_vector(1 downto 0);
-
-signal ddr_req_adr_int : std_logic_vector(25 downto 1);
-
-type state_type is (idle, act, act_nop1, act_nop2, rd_wr, rd_nop1,
- rd_nop2,rd_nop3,rd_nop4, rd_nop5,pre, pre_nop1, pre_nop2, wr_nop1, wr_nop2,
- wr_nop3, cmd, cpu_pre, refresh, refresh_wait);
-signal ddr_state : state_type;
-
-constant Clk_to_Output : time := 2.2 ns;
-constant Input_Setup : time := 2.5 ns;
-
-constant Refresh_Interval : std_logic_vector(9 downto 0) := "1111100110";
-
-begin
-
- iotimingon:
- if simulate_io_time generate
- begin
- cas_qn_p_del <= 'X' after 0 ns, cas_qn_p after Input_Setup;
- ras_qn_p_del <= 'X' after 0 ns, ras_qn_p after Input_Setup;
- we_qn_p_del <= 'X' after 0 ns, we_qn_p after Input_Setup;
- sdr_d_p_del <= "XXXXXXXXXXXXXXXX" after 0 ns, sdr_d_p after Input_Setup;
- end generate;
-
- iotimingoff:
- if not simulate_io_time generate
- begin
- cas_qn_p_del <= cas_qn_p;
- ras_qn_p_del <= ras_qn_p;
- we_qn_p_del <= we_qn_p;
- sdr_d_p_del <= sdr_d_p;
- end generate;
-
- ddr_write_en <= ddr_write_en_int;
- ddr_read_en <= ddr_read_en_int;
- ddr_data_read <= ddr_data_read_int;
-
- ddr_req_adr_int <= (ddr_req_adr(24 downto 10) & '0' & ddr_req_adr(9 downto 1)) when (simulate_io_time) else ddr_req_adr;
-
- process(cpu_clk, areset) -- Toggle a flip-flop with cpu_clk, in order
- begin -- to find phase relation with 2x and 4x clocks
- if areset = '1' then
- cpu_clk_tog <= '0';
- elsif (cpu_clk'event and cpu_clk = '1') then
- cpu_clk_tog <= not(cpu_clk_tog);
- end if;
- end process;
-
- process(cpu_clk_2x, areset) -- Find phase relation between cpu_clk and cpu_clk_2x
- begin
- if areset = '1' then
- cpu_clk_2x_smp1 <= '0';
- cpu_clk_2x_smp2 <= '0';
- clk2_phase <= '0';
- elsif (cpu_clk_2x'event and cpu_clk_2x = '1') then
- cpu_clk_2x_smp1 <= cpu_clk_tog;
- cpu_clk_2x_smp2 <= cpu_clk_2x_smp1;
- if (cpu_clk_2x_smp1 = '1' and cpu_clk_2x_smp2 = '0') then
- clk2_phase <= '0';
- else
- clk2_phase <= not(clk2_phase);
- end if;
- end if;
- end process;
-
- process(cpu_clk_4x, areset) -- Find phase relation between cpu_clk and cpu_clk_4x
- begin
- if areset = '1' then
- cpu_clk_4x_smp1 <= '0';
- cpu_clk_4x_smp2 <= '0';
- clk4_phase <= "0000";
- clk4_phase_short(0) <= "00";
- clk4_phase_short(1) <= "00";
- clk4_phase_short(2) <= "00";
- clk4_phase_short(3) <= "00";
- clk4_phase_short(4) <= "00";
- clk4_phase_short(5) <= "00";
- clk4_phase_short(6) <= "00";
- clk4_phase_short(7) <= "00";
- clk4_phase_short(8) <= "00";
- clk4_phase_short(9) <= "00";
- clk4_phase_short(10) <= "00";
- clk4_phase_short(11) <= "00";
- clk4_phase_short(12) <= "00";
- clk4_phase_short(13) <= "00";
- clk4_phase_short(14) <= "00";
- clk4_phase_short(15) <= "00";
- elsif (cpu_clk_4x'event and cpu_clk_4x = '1') then
- cpu_clk_4x_smp1 <= cpu_clk_tog;
- cpu_clk_4x_smp2 <= cpu_clk_4x_smp1;
- for i in 0 to 15 loop
- if (cpu_clk_4x_smp1 = '1' and cpu_clk_4x_smp2 = '0') then
- clk4_phase <= "0100";
- clk4_phase_short(i) <= "01";
- else
- clk4_phase <= (clk4_phase(2 downto 0) & clk4_phase(3));
- clk4_phase_short(i) <= clk4_phase_short(i)(0) & clk4_phase_short(i)(1);
- end if;
- end loop;
- end if;
- end process;
-
- process(cpu_clk_4x, areset) --
- begin
- if areset = '1' then
- sdr_clk <= '0';
- sdr_clk_n <= '0';
- elsif (cpu_clk_4x'event and cpu_clk_4x = '1') then
- if clk4_phase_short(0)(0) = '1' then
- sdr_clk <= '1';
- else
- sdr_clk <= '0';
- end if;
- if clk4_phase_short(0)(1) = '1' then
- sdr_clk_n <= '1';
- else
- sdr_clk_n <= '0';
- end if;
- end if;
- end process;
-
- cke_q_p <= '1' after Clk_to_Output;
- cs_qn_p <= '0' after Clk_to_Output;
-
- process(cpu_clk_4x, areset) --
- begin
- if areset = '1' then
- ras_qn_p <= '1';
- cas_qn_p <= '1';
- we_qn_p <= '1';
- dqs_q_p <= "ZZ";
- sdr_a_p <= "0000000000000";
- ba_q_p <= "00";
- sdr_clk_p <= '0';
- sdr_clk_n_p <= '1';
- elsif (cpu_clk_4x'event and cpu_clk_4x = '1') then
- ras_qn_p <= transport ras_qn after Clk_to_Output;
- cas_qn_p <= transport cas_qn after Clk_to_Output;
- we_qn_p <= transport we_qn after Clk_to_Output;
- if dqs_oe_n(0) = '0' then
- dqs_q_p(0) <= transport dqs_q(0) after Clk_to_Output;
- else
- dqs_q_p(0) <= transport 'Z' after Clk_to_Output;
- end if;
- if dqs_oe_n(1) = '0' then
- dqs_q_p(1) <= transport dqs_q(1) after Clk_to_Output;
- else
- dqs_q_p(1) <= transport 'Z' after Clk_to_Output;
- end if;
- sdr_a_p <= transport sdr_a after Clk_to_Output;
- ba_q_p <= transport ba_q after Clk_to_Output;
- sdr_clk_p <= transport sdr_clk after Clk_to_Output;
- sdr_clk_n_p <= transport sdr_clk_n after Clk_to_Output;
- end if;
- end process;
-
- process(cpu_clk_2x, areset) --
- begin
- if areset = '1' then
- ddr_state <= idle;
- ras_qn <= '1';
- cas_qn <= '1';
- we_qn <= '1';
- smp_req_adr <= (others => '0');
- smp_req_type <= '0';
- smp_req_len <= '0';
- sdr_a <= "XXXXXXXXXXXXX";
- ba_q <= "00";
- ddr_busy <= '1';
- saved_row <= "1000000000000000";
- ddr_write_en_int <= '0';
- ddr_read_en_int <= '0';
- nowin_idle_dqs <= "11";
- nowin_wr_nop1_d <= "0000000000000000";
- nowin_wr_nop1_dqs <= "00";
- nowin_wr_nop1_dm <= "00";
- nowin_wr_nop2_dqs <= "00";
- nowin_wr_nop3_d <= "0000000000000000";
- nowin_wr_nop3_dqs <= "00";
- elsif (cpu_clk_2x'event and cpu_clk_2x = '1') then
-
- -- Default values
- ras_qn <= '1';
- cas_qn <= '1';
- we_qn <= '1';
- sdr_a <= "XXXXXXXXXXXXX";
- ddr_busy <= '1';
- ddr_write_en_int <= '0';
- ddr_read_en_int <= '0';
-
- nowin_idle_dqs <= "00";
- nowin_wr_nop1_d <= "0000000000000000";
- nowin_wr_nop1_dqs <= "00";
- nowin_wr_nop1_dm <= "00";
- nowin_wr_nop2_dqs <= "00";
- nowin_wr_nop3_d <= "0000000000000000";
- nowin_wr_nop3_dqs <= "00";
-
- case ddr_state is
- when idle =>
- smp_req_adr <= ddr_req_adr_int;
- smp_req_type <= ddr_rd_wr_n;
- smp_req_len <= ddr_req_len;
- ddr_busy <= '0';
- operation <= "00";
- if refresh_pend = '1' then
- operation <= "01";
- ddr_state <= pre;
- elsif new_command = '1' then
- if ddr_cmd(15) = '1' then
- operation <= "10";
- ddr_state <= cpu_pre;
- else
- ddr_state <= cmd;
- end if;
- elsif (ddr_req = '1' and ddr_req_adr_int(25 downto 11) = saved_row(25 downto 11) and saved_row(26) = '0') then
- operation <= "11";
- ddr_write_en_int <= not(ddr_rd_wr_n);
- ddr_state <= rd_wr;
- elsif ddr_req = '1' then
- operation <= "11";
- ddr_state <= pre;
- else
- ddr_state <= idle;
- nowin_idle_dqs <= "11";
- end if;
- when act =>
- sdr_a <= smp_req_adr(23 downto 11);
- ba_q <= smp_req_adr(25 downto 24);
- ras_qn <= '0';
- ddr_write_en_int <= not(smp_req_type);
- ddr_state <= act_nop1;
- when act_nop1 =>
- ddr_state <= act_nop2;
- when act_nop2 =>
- ddr_state <= rd_wr;
- when rd_wr =>
- sdr_a(10) <= '0'; -- Disable auto precharge
- sdr_a(9 downto 0) <= smp_req_adr(10 downto 1);
- ba_q <= smp_req_adr(25 downto 24);
- saved_row <= '0' & smp_req_adr(25 downto 11);
- cas_qn <= '0';
- we_qn <= smp_req_type;
- if smp_req_type = '1' then
- ddr_state <= rd_nop1;
- else
- ddr_state <= wr_nop1;
- nowin_wr_nop1_d <= "1111111111111111";
- nowin_wr_nop1_dqs <= "11";
- nowin_wr_nop1_dm <= "11";
- end if;
- when wr_nop1 =>
- ddr_state <= wr_nop2;
- nowin_wr_nop2_dqs <= "11";
- when wr_nop2 =>
- ddr_state <= wr_nop3;
- nowin_wr_nop3_d <= "1111111111111111";
- nowin_wr_nop3_dqs <= "11";
- when wr_nop3 =>
- nowin_idle_dqs <= "11";
- ddr_state <= idle;
- when rd_nop1 =>
- ddr_state <= rd_nop2;
- when rd_nop2 =>
- if operation /= "11" then
- nowin_idle_dqs <= "11";
- ddr_state <= idle;
- else
- ddr_state <= rd_nop3;
- end if;
- when rd_nop3 =>
- ddr_state <= rd_nop4;
- when rd_nop4 =>
- ddr_read_en_int <= '1';
- ddr_state <= rd_nop5;
- when rd_nop5 =>
- nowin_idle_dqs <= "11";
- ddr_state <= idle;
- when pre =>
- ras_qn <= '0';
- we_qn <= '0';
- sdr_a(10) <= '1'; -- Precharge all banks
- ba_q <= smp_req_adr(25 downto 24);
- ddr_state <= pre_nop1;
- when pre_nop1 =>
- ddr_state <= pre_nop2;
- when cmd =>
- cas_qn <= '0';
- ras_qn <= '0';
- we_qn <= '0';
- ba_q <= ddr_cmd(14 downto 13);
- sdr_a <= ddr_cmd(12 downto 0);
- nowin_idle_dqs <= "11";
- ddr_state <= idle;
- when cpu_pre =>
- ddr_state <= pre;
- when refresh =>
- cas_qn <= '0';
- ras_qn <= '0';
- saved_row(26) <= '1';
- ddr_state <= refresh_wait;
- when refresh_wait =>
- if refresh_wait_end = '1' then
- ddr_state <= pre_nop2;
- end if;
- when pre_nop2 =>
- if operation = "01" then
- operation <= "10";
- ddr_state <= refresh;
- elsif operation = "10" then
- nowin_idle_dqs <= "11";
- ddr_state <= idle;
- else
- ddr_state <= act;
- end if;
- when others =>
- ddr_state <= idle;
- nowin_idle_dqs <= "11";
- end case;
- end if;
- end process;
-
- process(cpu_clk, areset) --
- begin
- if areset = '1' then
- ddr_cmd <= "0000000000000000";
- elsif (cpu_clk'event and cpu_clk = '1') then
- if ddr_command_we = '1' then
- ddr_cmd <= ddr_command;
- else
- ddr_cmd <= ddr_cmd;
- end if;
- end if;
- end process;
-
- process(cpu_clk_2x, areset) --
- begin
- if areset = '1' then
- ddr_cmd_we_smp <= '0';
- new_command <= '0';
- sdr_smp <= "000000000000000000000000000000000000";
- elsif (cpu_clk_2x'event and cpu_clk_2x = '1') then
- ddr_cmd_we_smp <= ddr_command_we;
- if ddr_command_we = '0' and ddr_cmd_we_smp = '1' then
- new_command <= '1';
- elsif ddr_state = cmd or ddr_state = cpu_pre then
- new_command <= '0';
- else
- new_command <= new_command;
- end if;
-
- if ddr_write_en_int = '1' then
- sdr_smp <= ddr_data_write;
- else
- sdr_smp <= sdr_smp;
- end if;
-
- end if;
- end process;
-
- process(cpu_clk_4x, areset) --
- begin
- if areset = '1' then
- dqs_q <= "00";
- dqs_oe_n <= "11";
- sdr_oe_ctrl <= "1111111111111111";
- sdr_wr_msw <= "000000000000000000";
- elsif (cpu_clk_4x'event and cpu_clk_4x = '1') then
-
- for i in 0 to 15 loop
- if nowin_wr_nop1_d(i) = '1' and clk4_phase_short(i)(0) = '1' then
- sdr_oe_ctrl(i) <= '0';
- elsif nowin_wr_nop3_d(i) = '1' and clk4_phase_short(i)(0) = '1' then
- sdr_oe_ctrl(i) <= '1';
- end if;
- end loop;
-
- for i in 0 to 1 loop
- if nowin_idle_dqs(i) = '1' or nowin_wr_nop3_dqs(i) = '1' then
- dqs_oe_n(i) <= '1';
- elsif nowin_wr_nop1_dqs(i) = '1' then
- dqs_oe_n(i) <= '0';
- end if;
- end loop;
-
- for i in 0 to 1 loop
- if (nowin_wr_nop2_dqs(i) = '1' and clk4_phase_short(i)(0) = '1') then
- dqs_q(i) <= '1';
- else
- dqs_q(i) <= '0';
- end if;
- end loop;
-
- for i in 0 to 15 loop
- if nowin_wr_nop1_d(i) = '1' and clk4_phase_short(i)(1) = '1' then
- sdr_wr_msw(i) <= '1';
- else
- sdr_wr_msw(i) <= '0';
- end if;
- end loop;
-
- for i in 0 to 1 loop
- if nowin_wr_nop1_dm(i) = '1' and clk4_phase_short(i)(1) = '1' then
- sdr_wr_msw(i+16) <= '1';
- else
- sdr_wr_msw(i+16) <= '0';
- end if;
- end loop;
-
- end if;
- end process;
-
- -- NOTE! DATA OUTPUT PATH. CLOCKED ON FALLING 4X CLOCK
- process(cpu_clk_4x, areset) --
- begin
- if areset = '1' then
- sdr_d_p <= "ZZZZZZZZZZZZZZZZ";
- dm_q_p <= "11";
- sdr_oe_n <= "1111111111111111";
- sdr_d <= "0000000000000000";
- dm_q <= "11";
- elsif (cpu_clk_4x'event and cpu_clk_4x = '0') then
-
- for i in 0 to 15 loop
- if sdr_oe_n(i) = '0' then
- sdr_d_p(i) <= transport sdr_d(i) after Clk_to_Output;
- else
- sdr_d_p(i) <= transport 'Z' after Clk_to_Output;
- end if;
- end loop;
-
- dm_q_p <= transport dm_q after Clk_to_Output;
-
- for i in 0 to 15 loop
- if sdr_oe_ctrl(i) = '0' then
- sdr_oe_n(i) <= '0';
- else
- sdr_oe_n(i) <= '1';
- end if;
- end loop;
-
- for i in 0 to 15 loop
- if sdr_wr_msw(i) = '1' then
- sdr_d(i) <= sdr_smp(i);
- else
- sdr_d(i) <= sdr_smp(i+16);
- end if;
- end loop;
-
- for i in 0 to 1 loop
- if sdr_wr_msw(i+16) = '1' then
- dm_q(i) <= sdr_smp(i+32);
- else
- dm_q(i) <= sdr_smp(i+34);
- end if;
- end loop;
-
- end if;
- end process;
-
- process(cpu_clk_2x, areset) --
- begin
- if areset = '1' then
- refresh_cnt <= "0000000000";
- refresh_pend <= '0';
- refresh_end <= '0';
- refresh_wait_cnt <= "0000";
- refresh_wait_end <= '0';
- elsif (cpu_clk_2x'event and cpu_clk_2x = '1') then
-
- if refresh_cnt = Refresh_Interval then
- refresh_end <= '1';
- else
- refresh_end <= '0';
- end if;
-
- if refresh_end = '1' then
- refresh_cnt <= "0000000000";
- else
- refresh_cnt <= refresh_cnt + '1';
- end if;
-
- if refresh_end = '1' and refresh_en = '1' then
- refresh_pend <= '1';
- elsif ddr_state = refresh then
- refresh_pend <= '0';
- else
- refresh_pend <= refresh_pend;
- end if;
-
- if ddr_state = refresh_wait then
- refresh_wait_cnt <= refresh_wait_cnt + '1';
- else
- refresh_wait_cnt <= "0000";
- end if;
-
- if refresh_wait_cnt = "1011" then
- refresh_wait_end <= '1';
- else
- refresh_wait_end <= '0';
- end if;
-
- end if;
- end process;
-
- -- 911. THIS IS A DUMMY FOR FGPA IMPEMENTATION TESTING
-
- process(ddr_in_clk, areset)
- begin
- if areset = '1' then
- ddr_clk_tog <= '0';
- elsif (ddr_in_clk'event and ddr_in_clk = '1') then
- ddr_clk_tog <= not(ddr_clk_tog);
- end if;
- end process;
-
- process(ddr_in_clk_2x, areset)
- begin
- if areset = '1' then
- ddr_clk_smp1 <= '0';
- ddr_clk_smp2 <= '0';
- ddr_clk_phase <= '0';
- elsif (ddr_in_clk_2x'event and ddr_in_clk_2x = '1') then
- ddr_clk_smp1 <= ddr_clk_tog;
- ddr_clk_smp2 <= ddr_clk_smp1;
- if ddr_clk_smp1 = '1' and ddr_clk_smp2 = '0' then
- ddr_clk_phase <= '0';
- else
- ddr_clk_phase <= not(ddr_clk_phase);
- end if;
- end if;
- end process;
-
- process(ddr_in_clk_2x, areset)
- begin
- if areset = '1' then
- cas_n_smp <= '0';
- ras_n_smp <= '0';
- we_n_smp <= '0';
- read_start_sig <= '0';
- elsif (ddr_in_clk_2x'event and ddr_in_clk_2x = '1') then
- cas_n_smp <= cas_qn_p_del;
- ras_n_smp <= ras_qn_p_del;
- we_n_smp <= we_qn_p_del;
- if ras_n_smp = '1' and cas_n_smp = '0' and we_n_smp = '1' and ddr_clk_phase = '1' then
- read_start_sig <= '1';
- else
- read_start_sig <= '0';
- end if;
- end if;
- end process;
-
- process(ddr_in_clk_2x, areset)
- begin
- if areset = '1' then
- sdr_d_in <= "0000000000000000";
- elsif (ddr_in_clk_2x'event and ddr_in_clk_2x = '1') then
- sdr_d_in <= sdr_d_p_del;
- end if;
- end process;
-
- process(ddr_in_clk_2x, areset)
- begin
- if areset = '1' then
- read_time_cnt <= "00";
- read_input_en <= '0';
- elsif (ddr_in_clk_2x'event and ddr_in_clk_2x = '1') then
-
- if read_start_sig = '1' then
- read_time_cnt <= "01";
- elsif read_time_cnt = "00" then
- read_time_cnt <= read_time_cnt;
- else
- read_time_cnt <= read_time_cnt + '1';
- end if;
-
- if read_time_cnt = "11" then
- read_input_en <= '1';
- else
- read_input_en <= '0';
- end if;
-
- read_input_en_del <= read_input_en;
-
- end if;
- end process;
-
- process(ddr_in_clk_2x, areset)
- begin
- if areset = '1' then
- ddr_data_read_int <= "00000000000000000000000000000000";
- elsif (ddr_in_clk_2x'event and ddr_in_clk_2x = '1') then
- if read_input_en = '1' then
- ddr_data_read_int(15 downto 0) <= sdr_d_in;
- end if;
- if read_input_en_del = '1' then
- ddr_data_read_int(31 downto 16) <= sdr_d_in;
- end if;
- end if;
- end process;
-
-end behave;
-
-
+library IEEE;
+use IEEE.STD_LOGIC_1164.all;
+use IEEE.STD_LOGIC_UNSIGNED.ALL;
+
+library UNISIM;
+use UNISIM.vcomponents.all;
+
+entity ddr_top is
+ generic(
+ simulate_io_time : boolean := false);
+ port ( -- Asyncronous reset and clocks
+ areset : in std_logic;
+ cpu_clk : in std_logic;
+ cpu_clk_2x : in std_logic;
+ cpu_clk_4x : in std_logic;
+ ddr_in_clk : in std_logic;
+ ddr_in_clk_2x : in std_logic;
+
+ -- Command interface
+ ddr_command : in std_logic_vector(15 downto 0);
+ ddr_command_we : in std_logic;
+ refresh_en : in std_logic;
+
+ -- Data interface signals
+ ddr_data_read : out std_logic_vector(31 downto 0); -- Data read from DDR SDRAM
+ ddr_data_write : in std_logic_vector(35 downto 0); -- Data to be written to DDR SDRAM
+ ddr_req_adr : in std_logic_vector(25 downto 1); -- Request address
+ ddr_req : in std_logic; -- Request DDR SDRAM access
+ ddr_busy : out std_logic; -- Request acknowledge
+ ddr_rd_wr_n : in std_logic; -- Access type 1=READ, 0=WRITE
+ ddr_req_len : in std_logic; -- Number of 16-bits words to transfer (0=2, 1=8)
+ ddr_read_en : out std_logic; -- Enable signal for read data
+ ddr_write_en : out std_logic; -- Enable (read) signal for data write
+
+ -- DDR SDRAM Signals
+ sdr_clk_p : out std_logic; -- ddr_sdram_clock
+ sdr_clk_n_p : out std_logic; -- /ddr_sdram_clock
+ cke_q_p : out std_logic; -- clock enable
+ cs_qn_p : out std_logic; -- /chip select
+ ras_qn_p : inout std_logic; -- /ras
+ cas_qn_p : inout std_logic; -- /cas
+ we_qn_p : inout std_logic; -- /write enable
+ dm_q_p : out std_logic_vector(1 downto 0); -- data mask bits, set to "00"
+ dqs_q_p : out std_logic_vector(1 downto 0); -- data strobe, only for write
+ ba_q_p : out std_logic_vector(1 downto 0); -- bank select
+ sdr_a_p : out std_logic_vector(12 downto 0); -- address bus
+ sdr_d_p : inout std_logic_vector(15 downto 0)); -- bidir data bus
+end ddr_top;
+
+architecture behave of ddr_top is
+
+attribute keep : string;
+
+type clk4_type is array(0 to 15) of std_logic_vector(1 downto 0);
+
+signal cpu_clk_tog : std_logic;
+signal ddr_cmd : std_logic_vector(15 downto 0);
+signal ddr_cmd_we_smp : std_logic;
+signal new_command : std_logic;
+
+signal cpu_clk_2x_smp1 : std_logic;
+signal cpu_clk_2x_smp2 : std_logic;
+signal cpu_clk_4x_smp1 : std_logic;
+signal cpu_clk_4x_smp2 : std_logic;
+
+signal clk2_phase : std_logic;
+signal clk4_phase : std_logic_vector(3 downto 0);
+signal clk4_phase_short : clk4_type;
+attribute keep of clk4_phase_short:signal is "true";
+
+signal ddr_clk_tog : std_logic;
+signal ddr_clk_smp1 : std_logic;
+signal ddr_clk_smp2 : std_logic;
+signal ddr_clk_phase : std_logic;
+
+signal smp_req_adr : std_logic_vector(25 downto 1);
+signal smp_req_type : std_logic;
+signal smp_req_len : std_logic;
+signal ddr_write_en_int : std_logic;
+signal ddr_read_en_int : std_logic;
+
+signal dqs_q : std_logic_vector(1 downto 0);
+signal dqs_oe_n : std_logic_vector(1 downto 0);
+attribute keep of dqs_oe_n:signal is "true";
+signal cas_qn : std_logic;
+signal ras_qn : std_logic;
+signal we_qn : std_logic;
+signal ba_q : std_logic_vector(1 downto 0);
+signal sdr_clk : std_logic;
+signal sdr_clk_n : std_logic;
+signal sdr_a : std_logic_vector(12 downto 0);
+signal sdr_d : std_logic_vector(15 downto 0);
+signal sdr_smp : std_logic_vector(35 downto 0);
+signal sdr_oe_n : std_logic_vector(15 downto 0);
+attribute keep of sdr_oe_n:signal is "true";
+signal sdr_oe_ctrl : std_logic_vector(15 downto 0);
+attribute keep of sdr_oe_ctrl:signal is "true";
+signal sdr_wr_msw : std_logic_vector(17 downto 0);
+attribute keep of sdr_wr_msw:signal is "true";
+signal dm_q : std_logic_vector(1 downto 0);
+
+signal nowin_idle_dqs : std_logic_vector(1 downto 0);
+signal nowin_wr_nop1_d : std_logic_vector(15 downto 0);
+signal nowin_wr_nop1_dqs : std_logic_vector(1 downto 0);
+signal nowin_wr_nop1_dm : std_logic_vector(1 downto 0);
+signal nowin_wr_nop2_dqs : std_logic_vector(1 downto 0);
+signal nowin_wr_nop3_d : std_logic_vector(15 downto 0);
+signal nowin_wr_nop3_dqs : std_logic_vector(1 downto 0);
+attribute keep of nowin_idle_dqs:signal is "true";
+attribute keep of nowin_wr_nop1_d:signal is "true";
+attribute keep of nowin_wr_nop1_dqs:signal is "true";
+attribute keep of nowin_wr_nop1_dm:signal is "true";
+attribute keep of nowin_wr_nop2_dqs:signal is "true";
+attribute keep of nowin_wr_nop3_d:signal is "true";
+attribute keep of nowin_wr_nop3_dqs:signal is "true";
+
+signal cas_n_smp : std_logic;
+signal ras_n_smp : std_logic;
+signal we_n_smp : std_logic;
+signal read_start_sig : std_logic;
+signal sdr_d_in : std_logic_vector(15 downto 0);
+signal read_time_cnt : std_logic_vector(1 downto 0);
+signal read_input_en : std_logic;
+signal read_input_en_del : std_logic;
+signal ddr_data_read_int : std_logic_vector(31 downto 0);
+
+signal refresh_pend : std_logic;
+signal refresh_end : std_logic;
+signal refresh_cnt : std_logic_vector(9 downto 0);
+signal refresh_wait_cnt : std_logic_vector(3 downto 0);
+signal refresh_wait_end : std_logic;
+
+signal cas_qn_p_del : std_logic;
+signal ras_qn_p_del : std_logic;
+signal we_qn_p_del : std_logic;
+signal sdr_d_p_del : std_logic_vector(15 downto 0);
+
+signal saved_row : std_logic_vector(26 downto 11);
+signal operation : std_logic_vector(1 downto 0);
+
+signal ddr_req_adr_int : std_logic_vector(25 downto 1);
+
+type state_type is (idle, act, act_nop1, act_nop2, rd_wr, rd_nop1,
+ rd_nop2,rd_nop3,rd_nop4, rd_nop5,pre, pre_nop1, pre_nop2, wr_nop1, wr_nop2,
+ wr_nop3, cmd, cpu_pre, refresh, refresh_wait);
+signal ddr_state : state_type;
+
+constant Clk_to_Output : time := 2.2 ns;
+constant Input_Setup : time := 2.5 ns;
+
+constant Refresh_Interval : std_logic_vector(9 downto 0) := "1111100110";
+
+begin
+
+ iotimingon:
+ if simulate_io_time generate
+ begin
+ cas_qn_p_del <= 'X' after 0 ns, cas_qn_p after Input_Setup;
+ ras_qn_p_del <= 'X' after 0 ns, ras_qn_p after Input_Setup;
+ we_qn_p_del <= 'X' after 0 ns, we_qn_p after Input_Setup;
+ sdr_d_p_del <= "XXXXXXXXXXXXXXXX" after 0 ns, sdr_d_p after Input_Setup;
+ end generate;
+
+ iotimingoff:
+ if not simulate_io_time generate
+ begin
+ cas_qn_p_del <= cas_qn_p;
+ ras_qn_p_del <= ras_qn_p;
+ we_qn_p_del <= we_qn_p;
+ sdr_d_p_del <= sdr_d_p;
+ end generate;
+
+ ddr_write_en <= ddr_write_en_int;
+ ddr_read_en <= ddr_read_en_int;
+ ddr_data_read <= ddr_data_read_int;
+
+ ddr_req_adr_int <= (ddr_req_adr(24 downto 10) & '0' & ddr_req_adr(9 downto 1)) when (simulate_io_time) else ddr_req_adr;
+
+ process(cpu_clk, areset) -- Toggle a flip-flop with cpu_clk, in order
+ begin -- to find phase relation with 2x and 4x clocks
+ if areset = '1' then
+ cpu_clk_tog <= '0';
+ elsif (cpu_clk'event and cpu_clk = '1') then
+ cpu_clk_tog <= not(cpu_clk_tog);
+ end if;
+ end process;
+
+ process(cpu_clk_2x, areset) -- Find phase relation between cpu_clk and cpu_clk_2x
+ begin
+ if areset = '1' then
+ cpu_clk_2x_smp1 <= '0';
+ cpu_clk_2x_smp2 <= '0';
+ clk2_phase <= '0';
+ elsif (cpu_clk_2x'event and cpu_clk_2x = '1') then
+ cpu_clk_2x_smp1 <= cpu_clk_tog;
+ cpu_clk_2x_smp2 <= cpu_clk_2x_smp1;
+ if (cpu_clk_2x_smp1 = '1' and cpu_clk_2x_smp2 = '0') then
+ clk2_phase <= '0';
+ else
+ clk2_phase <= not(clk2_phase);
+ end if;
+ end if;
+ end process;
+
+ process(cpu_clk_4x, areset) -- Find phase relation between cpu_clk and cpu_clk_4x
+ begin
+ if areset = '1' then
+ cpu_clk_4x_smp1 <= '0';
+ cpu_clk_4x_smp2 <= '0';
+ clk4_phase <= "0000";
+ clk4_phase_short(0) <= "00";
+ clk4_phase_short(1) <= "00";
+ clk4_phase_short(2) <= "00";
+ clk4_phase_short(3) <= "00";
+ clk4_phase_short(4) <= "00";
+ clk4_phase_short(5) <= "00";
+ clk4_phase_short(6) <= "00";
+ clk4_phase_short(7) <= "00";
+ clk4_phase_short(8) <= "00";
+ clk4_phase_short(9) <= "00";
+ clk4_phase_short(10) <= "00";
+ clk4_phase_short(11) <= "00";
+ clk4_phase_short(12) <= "00";
+ clk4_phase_short(13) <= "00";
+ clk4_phase_short(14) <= "00";
+ clk4_phase_short(15) <= "00";
+ elsif (cpu_clk_4x'event and cpu_clk_4x = '1') then
+ cpu_clk_4x_smp1 <= cpu_clk_tog;
+ cpu_clk_4x_smp2 <= cpu_clk_4x_smp1;
+ for i in 0 to 15 loop
+ if (cpu_clk_4x_smp1 = '1' and cpu_clk_4x_smp2 = '0') then
+ clk4_phase <= "0100";
+ clk4_phase_short(i) <= "01";
+ else
+ clk4_phase <= (clk4_phase(2 downto 0) & clk4_phase(3));
+ clk4_phase_short(i) <= clk4_phase_short(i)(0) & clk4_phase_short(i)(1);
+ end if;
+ end loop;
+ end if;
+ end process;
+
+ process(cpu_clk_4x, areset) --
+ begin
+ if areset = '1' then
+ sdr_clk <= '0';
+ sdr_clk_n <= '0';
+ elsif (cpu_clk_4x'event and cpu_clk_4x = '1') then
+ if clk4_phase_short(0)(0) = '1' then
+ sdr_clk <= '1';
+ else
+ sdr_clk <= '0';
+ end if;
+ if clk4_phase_short(0)(1) = '1' then
+ sdr_clk_n <= '1';
+ else
+ sdr_clk_n <= '0';
+ end if;
+ end if;
+ end process;
+
+ cke_q_p <= '1' after Clk_to_Output;
+ cs_qn_p <= '0' after Clk_to_Output;
+
+ process(cpu_clk_4x, areset) --
+ begin
+ if areset = '1' then
+ ras_qn_p <= '1';
+ cas_qn_p <= '1';
+ we_qn_p <= '1';
+ dqs_q_p <= "ZZ";
+ sdr_a_p <= "0000000000000";
+ ba_q_p <= "00";
+ sdr_clk_p <= '0';
+ sdr_clk_n_p <= '1';
+ elsif (cpu_clk_4x'event and cpu_clk_4x = '1') then
+ ras_qn_p <= transport ras_qn after Clk_to_Output;
+ cas_qn_p <= transport cas_qn after Clk_to_Output;
+ we_qn_p <= transport we_qn after Clk_to_Output;
+ if dqs_oe_n(0) = '0' then
+ dqs_q_p(0) <= transport dqs_q(0) after Clk_to_Output;
+ else
+ dqs_q_p(0) <= transport 'Z' after Clk_to_Output;
+ end if;
+ if dqs_oe_n(1) = '0' then
+ dqs_q_p(1) <= transport dqs_q(1) after Clk_to_Output;
+ else
+ dqs_q_p(1) <= transport 'Z' after Clk_to_Output;
+ end if;
+ sdr_a_p <= transport sdr_a after Clk_to_Output;
+ ba_q_p <= transport ba_q after Clk_to_Output;
+ sdr_clk_p <= transport sdr_clk after Clk_to_Output;
+ sdr_clk_n_p <= transport sdr_clk_n after Clk_to_Output;
+ end if;
+ end process;
+
+ process(cpu_clk_2x, areset) --
+ begin
+ if areset = '1' then
+ ddr_state <= idle;
+ ras_qn <= '1';
+ cas_qn <= '1';
+ we_qn <= '1';
+ smp_req_adr <= (others => '0');
+ smp_req_type <= '0';
+ smp_req_len <= '0';
+ sdr_a <= "XXXXXXXXXXXXX";
+ ba_q <= "00";
+ ddr_busy <= '1';
+ saved_row <= "1000000000000000";
+ ddr_write_en_int <= '0';
+ ddr_read_en_int <= '0';
+ nowin_idle_dqs <= "11";
+ nowin_wr_nop1_d <= "0000000000000000";
+ nowin_wr_nop1_dqs <= "00";
+ nowin_wr_nop1_dm <= "00";
+ nowin_wr_nop2_dqs <= "00";
+ nowin_wr_nop3_d <= "0000000000000000";
+ nowin_wr_nop3_dqs <= "00";
+ elsif (cpu_clk_2x'event and cpu_clk_2x = '1') then
+
+ -- Default values
+ ras_qn <= '1';
+ cas_qn <= '1';
+ we_qn <= '1';
+ sdr_a <= "XXXXXXXXXXXXX";
+ ddr_busy <= '1';
+ ddr_write_en_int <= '0';
+ ddr_read_en_int <= '0';
+
+ nowin_idle_dqs <= "00";
+ nowin_wr_nop1_d <= "0000000000000000";
+ nowin_wr_nop1_dqs <= "00";
+ nowin_wr_nop1_dm <= "00";
+ nowin_wr_nop2_dqs <= "00";
+ nowin_wr_nop3_d <= "0000000000000000";
+ nowin_wr_nop3_dqs <= "00";
+
+ case ddr_state is
+ when idle =>
+ smp_req_adr <= ddr_req_adr_int;
+ smp_req_type <= ddr_rd_wr_n;
+ smp_req_len <= ddr_req_len;
+ ddr_busy <= '0';
+ operation <= "00";
+ if refresh_pend = '1' then
+ operation <= "01";
+ ddr_state <= pre;
+ elsif new_command = '1' then
+ if ddr_cmd(15) = '1' then
+ operation <= "10";
+ ddr_state <= cpu_pre;
+ else
+ ddr_state <= cmd;
+ end if;
+ elsif (ddr_req = '1' and ddr_req_adr_int(25 downto 11) = saved_row(25 downto 11) and saved_row(26) = '0') then
+ operation <= "11";
+ ddr_write_en_int <= not(ddr_rd_wr_n);
+ ddr_state <= rd_wr;
+ elsif ddr_req = '1' then
+ operation <= "11";
+ ddr_state <= pre;
+ else
+ ddr_state <= idle;
+ nowin_idle_dqs <= "11";
+ end if;
+ when act =>
+ sdr_a <= smp_req_adr(23 downto 11);
+ ba_q <= smp_req_adr(25 downto 24);
+ ras_qn <= '0';
+ ddr_write_en_int <= not(smp_req_type);
+ ddr_state <= act_nop1;
+ when act_nop1 =>
+ ddr_state <= act_nop2;
+ when act_nop2 =>
+ ddr_state <= rd_wr;
+ when rd_wr =>
+ sdr_a(10) <= '0'; -- Disable auto precharge
+ sdr_a(9 downto 0) <= smp_req_adr(10 downto 1);
+ ba_q <= smp_req_adr(25 downto 24);
+ saved_row <= '0' & smp_req_adr(25 downto 11);
+ cas_qn <= '0';
+ we_qn <= smp_req_type;
+ if smp_req_type = '1' then
+ ddr_state <= rd_nop1;
+ else
+ ddr_state <= wr_nop1;
+ nowin_wr_nop1_d <= "1111111111111111";
+ nowin_wr_nop1_dqs <= "11";
+ nowin_wr_nop1_dm <= "11";
+ end if;
+ when wr_nop1 =>
+ ddr_state <= wr_nop2;
+ nowin_wr_nop2_dqs <= "11";
+ when wr_nop2 =>
+ ddr_state <= wr_nop3;
+ nowin_wr_nop3_d <= "1111111111111111";
+ nowin_wr_nop3_dqs <= "11";
+ when wr_nop3 =>
+ nowin_idle_dqs <= "11";
+ ddr_state <= idle;
+ when rd_nop1 =>
+ ddr_state <= rd_nop2;
+ when rd_nop2 =>
+ if operation /= "11" then
+ nowin_idle_dqs <= "11";
+ ddr_state <= idle;
+ else
+ ddr_state <= rd_nop3;
+ end if;
+ when rd_nop3 =>
+ ddr_state <= rd_nop4;
+ when rd_nop4 =>
+ ddr_read_en_int <= '1';
+ ddr_state <= rd_nop5;
+ when rd_nop5 =>
+ nowin_idle_dqs <= "11";
+ ddr_state <= idle;
+ when pre =>
+ ras_qn <= '0';
+ we_qn <= '0';
+ sdr_a(10) <= '1'; -- Precharge all banks
+ ba_q <= smp_req_adr(25 downto 24);
+ ddr_state <= pre_nop1;
+ when pre_nop1 =>
+ ddr_state <= pre_nop2;
+ when cmd =>
+ cas_qn <= '0';
+ ras_qn <= '0';
+ we_qn <= '0';
+ ba_q <= ddr_cmd(14 downto 13);
+ sdr_a <= ddr_cmd(12 downto 0);
+ nowin_idle_dqs <= "11";
+ ddr_state <= idle;
+ when cpu_pre =>
+ ddr_state <= pre;
+ when refresh =>
+ cas_qn <= '0';
+ ras_qn <= '0';
+ saved_row(26) <= '1';
+ ddr_state <= refresh_wait;
+ when refresh_wait =>
+ if refresh_wait_end = '1' then
+ ddr_state <= pre_nop2;
+ end if;
+ when pre_nop2 =>
+ if operation = "01" then
+ operation <= "10";
+ ddr_state <= refresh;
+ elsif operation = "10" then
+ nowin_idle_dqs <= "11";
+ ddr_state <= idle;
+ else
+ ddr_state <= act;
+ end if;
+ when others =>
+ ddr_state <= idle;
+ nowin_idle_dqs <= "11";
+ end case;
+ end if;
+ end process;
+
+ process(cpu_clk, areset) --
+ begin
+ if areset = '1' then
+ ddr_cmd <= "0000000000000000";
+ elsif (cpu_clk'event and cpu_clk = '1') then
+ if ddr_command_we = '1' then
+ ddr_cmd <= ddr_command;
+ else
+ ddr_cmd <= ddr_cmd;
+ end if;
+ end if;
+ end process;
+
+ process(cpu_clk_2x, areset) --
+ begin
+ if areset = '1' then
+ ddr_cmd_we_smp <= '0';
+ new_command <= '0';
+ sdr_smp <= "000000000000000000000000000000000000";
+ elsif (cpu_clk_2x'event and cpu_clk_2x = '1') then
+ ddr_cmd_we_smp <= ddr_command_we;
+ if ddr_command_we = '0' and ddr_cmd_we_smp = '1' then
+ new_command <= '1';
+ elsif ddr_state = cmd or ddr_state = cpu_pre then
+ new_command <= '0';
+ else
+ new_command <= new_command;
+ end if;
+
+ if ddr_write_en_int = '1' then
+ sdr_smp <= ddr_data_write;
+ else
+ sdr_smp <= sdr_smp;
+ end if;
+
+ end if;
+ end process;
+
+ process(cpu_clk_4x, areset) --
+ begin
+ if areset = '1' then
+ dqs_q <= "00";
+ dqs_oe_n <= "11";
+ sdr_oe_ctrl <= "1111111111111111";
+ sdr_wr_msw <= "000000000000000000";
+ elsif (cpu_clk_4x'event and cpu_clk_4x = '1') then
+
+ for i in 0 to 15 loop
+ if nowin_wr_nop1_d(i) = '1' and clk4_phase_short(i)(0) = '1' then
+ sdr_oe_ctrl(i) <= '0';
+ elsif nowin_wr_nop3_d(i) = '1' and clk4_phase_short(i)(0) = '1' then
+ sdr_oe_ctrl(i) <= '1';
+ end if;
+ end loop;
+
+ for i in 0 to 1 loop
+ if nowin_idle_dqs(i) = '1' or nowin_wr_nop3_dqs(i) = '1' then
+ dqs_oe_n(i) <= '1';
+ elsif nowin_wr_nop1_dqs(i) = '1' then
+ dqs_oe_n(i) <= '0';
+ end if;
+ end loop;
+
+ for i in 0 to 1 loop
+ if (nowin_wr_nop2_dqs(i) = '1' and clk4_phase_short(i)(0) = '1') then
+ dqs_q(i) <= '1';
+ else
+ dqs_q(i) <= '0';
+ end if;
+ end loop;
+
+ for i in 0 to 15 loop
+ if nowin_wr_nop1_d(i) = '1' and clk4_phase_short(i)(1) = '1' then
+ sdr_wr_msw(i) <= '1';
+ else
+ sdr_wr_msw(i) <= '0';
+ end if;
+ end loop;
+
+ for i in 0 to 1 loop
+ if nowin_wr_nop1_dm(i) = '1' and clk4_phase_short(i)(1) = '1' then
+ sdr_wr_msw(i+16) <= '1';
+ else
+ sdr_wr_msw(i+16) <= '0';
+ end if;
+ end loop;
+
+ end if;
+ end process;
+
+ -- NOTE! DATA OUTPUT PATH. CLOCKED ON FALLING 4X CLOCK
+ process(cpu_clk_4x, areset) --
+ begin
+ if areset = '1' then
+ sdr_d_p <= "ZZZZZZZZZZZZZZZZ";
+ dm_q_p <= "11";
+ sdr_oe_n <= "1111111111111111";
+ sdr_d <= "0000000000000000";
+ dm_q <= "11";
+ elsif (cpu_clk_4x'event and cpu_clk_4x = '0') then
+
+ for i in 0 to 15 loop
+ if sdr_oe_n(i) = '0' then
+ sdr_d_p(i) <= transport sdr_d(i) after Clk_to_Output;
+ else
+ sdr_d_p(i) <= transport 'Z' after Clk_to_Output;
+ end if;
+ end loop;
+
+ dm_q_p <= transport dm_q after Clk_to_Output;
+
+ for i in 0 to 15 loop
+ if sdr_oe_ctrl(i) = '0' then
+ sdr_oe_n(i) <= '0';
+ else
+ sdr_oe_n(i) <= '1';
+ end if;
+ end loop;
+
+ for i in 0 to 15 loop
+ if sdr_wr_msw(i) = '1' then
+ sdr_d(i) <= sdr_smp(i);
+ else
+ sdr_d(i) <= sdr_smp(i+16);
+ end if;
+ end loop;
+
+ for i in 0 to 1 loop
+ if sdr_wr_msw(i+16) = '1' then
+ dm_q(i) <= sdr_smp(i+32);
+ else
+ dm_q(i) <= sdr_smp(i+34);
+ end if;
+ end loop;
+
+ end if;
+ end process;
+
+ process(cpu_clk_2x, areset) --
+ begin
+ if areset = '1' then
+ refresh_cnt <= "0000000000";
+ refresh_pend <= '0';
+ refresh_end <= '0';
+ refresh_wait_cnt <= "0000";
+ refresh_wait_end <= '0';
+ elsif (cpu_clk_2x'event and cpu_clk_2x = '1') then
+
+ if refresh_cnt = Refresh_Interval then
+ refresh_end <= '1';
+ else
+ refresh_end <= '0';
+ end if;
+
+ if refresh_end = '1' then
+ refresh_cnt <= "0000000000";
+ else
+ refresh_cnt <= refresh_cnt + '1';
+ end if;
+
+ if refresh_end = '1' and refresh_en = '1' then
+ refresh_pend <= '1';
+ elsif ddr_state = refresh then
+ refresh_pend <= '0';
+ else
+ refresh_pend <= refresh_pend;
+ end if;
+
+ if ddr_state = refresh_wait then
+ refresh_wait_cnt <= refresh_wait_cnt + '1';
+ else
+ refresh_wait_cnt <= "0000";
+ end if;
+
+ if refresh_wait_cnt = "1011" then
+ refresh_wait_end <= '1';
+ else
+ refresh_wait_end <= '0';
+ end if;
+
+ end if;
+ end process;
+
+ -- 911. THIS IS A DUMMY FOR FGPA IMPEMENTATION TESTING
+
+ process(ddr_in_clk, areset)
+ begin
+ if areset = '1' then
+ ddr_clk_tog <= '0';
+ elsif (ddr_in_clk'event and ddr_in_clk = '1') then
+ ddr_clk_tog <= not(ddr_clk_tog);
+ end if;
+ end process;
+
+ process(ddr_in_clk_2x, areset)
+ begin
+ if areset = '1' then
+ ddr_clk_smp1 <= '0';
+ ddr_clk_smp2 <= '0';
+ ddr_clk_phase <= '0';
+ elsif (ddr_in_clk_2x'event and ddr_in_clk_2x = '1') then
+ ddr_clk_smp1 <= ddr_clk_tog;
+ ddr_clk_smp2 <= ddr_clk_smp1;
+ if ddr_clk_smp1 = '1' and ddr_clk_smp2 = '0' then
+ ddr_clk_phase <= '0';
+ else
+ ddr_clk_phase <= not(ddr_clk_phase);
+ end if;
+ end if;
+ end process;
+
+ process(ddr_in_clk_2x, areset)
+ begin
+ if areset = '1' then
+ cas_n_smp <= '0';
+ ras_n_smp <= '0';
+ we_n_smp <= '0';
+ read_start_sig <= '0';
+ elsif (ddr_in_clk_2x'event and ddr_in_clk_2x = '1') then
+ cas_n_smp <= cas_qn_p_del;
+ ras_n_smp <= ras_qn_p_del;
+ we_n_smp <= we_qn_p_del;
+ if ras_n_smp = '1' and cas_n_smp = '0' and we_n_smp = '1' and ddr_clk_phase = '1' then
+ read_start_sig <= '1';
+ else
+ read_start_sig <= '0';
+ end if;
+ end if;
+ end process;
+
+ process(ddr_in_clk_2x, areset)
+ begin
+ if areset = '1' then
+ sdr_d_in <= "0000000000000000";
+ elsif (ddr_in_clk_2x'event and ddr_in_clk_2x = '1') then
+ sdr_d_in <= sdr_d_p_del;
+ end if;
+ end process;
+
+ process(ddr_in_clk_2x, areset)
+ begin
+ if areset = '1' then
+ read_time_cnt <= "00";
+ read_input_en <= '0';
+ elsif (ddr_in_clk_2x'event and ddr_in_clk_2x = '1') then
+
+ if read_start_sig = '1' then
+ read_time_cnt <= "01";
+ elsif read_time_cnt = "00" then
+ read_time_cnt <= read_time_cnt;
+ else
+ read_time_cnt <= read_time_cnt + '1';
+ end if;
+
+ if read_time_cnt = "11" then
+ read_input_en <= '1';
+ else
+ read_input_en <= '0';
+ end if;
+
+ read_input_en_del <= read_input_en;
+
+ end if;
+ end process;
+
+ process(ddr_in_clk_2x, areset)
+ begin
+ if areset = '1' then
+ ddr_data_read_int <= "00000000000000000000000000000000";
+ elsif (ddr_in_clk_2x'event and ddr_in_clk_2x = '1') then
+ if read_input_en = '1' then
+ ddr_data_read_int(15 downto 0) <= sdr_d_in;
+ end if;
+ if read_input_en_del = '1' then
+ ddr_data_read_int(31 downto 16) <= sdr_d_in;
+ end if;
+ end if;
+ end process;
+
+end behave;
+
+
diff --git a/misc/ddrsdram/src/mt46v16m16.vhd b/misc/ddrsdram/src/mt46v16m16.vhd
index 6b89345..356bb28 100644
--- a/misc/ddrsdram/src/mt46v16m16.vhd
+++ b/misc/ddrsdram/src/mt46v16m16.vhd
@@ -1,1320 +1,1320 @@
------------------------------------------------------------------------------------------
---
--- File Name: MT46V16M16.VHD
--- Version: 2.1
--- Date: January 14th, 2002
--- Model: Behavioral
--- Simulator: NCDesktop - http://www.cadence.com
--- ModelSim PE - http://www.model.com
---
--- Dependencies: None
---
--- Author: Son P. Huynh
--- Email: sphuynh@micron.com
--- Phone: (208) 368-3825
--- Company: Micron Technology, Inc.
--- Part Number: MT46V16M16 (4 Mb x 16 x 4 Banks)
---
--- Description: Micron 256 Mb SDRAM DDR (Double Data Rate)
---
--- Limitation: Doesn't model internal refresh counter
---
--- Note:
---
--- Disclaimer: THESE DESIGNS ARE PROVIDED "AS IS" WITH NO WARRANTY
--- WHATSOEVER AND MICRON SPECIFICALLY DISCLAIMS ANY
--- IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR
--- A PARTICULAR PURPOSE, OR AGAINST INFRINGEMENT.
---
--- Copyright (c) 1998 Micron Semiconductor Products, Inc.
--- All rights researved
---
--- Rev Author Date Changes
--- --- ---------------------------- ---------- -------------------------------------
--- 2.1 Son P. Huynh 01/14/2002 - Fix Burst_counter
--- Micron Technology, Inc.
---
--- 2.0 Son P. Huynh 11/08/2001 - Second release
--- Micron Technology, Inc. - Rewrote and remove SHARED VARIABLE
---
------------------------------------------------------------------------------------------
-
-LIBRARY IEEE;
- USE IEEE.STD_LOGIC_1164.ALL;
- USE IEEE.STD_LOGIC_UNSIGNED.ALL;
- USE IEEE.STD_LOGIC_ARITH.ALL;
-
-ENTITY MT46V16M16 IS
- GENERIC ( -- Timing for -75Z CL2
- tCK : TIME := 7.500 ns;
- tCH : TIME := 3.375 ns; -- 0.45*tCK
- tCL : TIME := 3.375 ns; -- 0.45*tCK
- tDH : TIME := 0.500 ns;
- tDS : TIME := 0.500 ns;
- tIH : TIME := 0.900 ns;
- tIS : TIME := 0.900 ns;
- tMRD : TIME := 15.000 ns;
- tRAS : TIME := 40.000 ns;
- tRAP : TIME := 20.000 ns;
- tRC : TIME := 65.000 ns;
- tRFC : TIME := 75.000 ns;
- tRCD : TIME := 20.000 ns;
- tRP : TIME := 20.000 ns;
- tRRD : TIME := 15.000 ns;
- tWR : TIME := 15.000 ns;
- addr_bits : INTEGER := 13;
- data_bits : INTEGER := 16;
- cols_bits : INTEGER := 9
- );
- PORT (
- Dq : INOUT STD_LOGIC_VECTOR (data_bits - 1 DOWNTO 0) := (OTHERS => 'Z');
- Dqs : INOUT STD_LOGIC_VECTOR (1 DOWNTO 0) := "ZZ";
- Addr : IN STD_LOGIC_VECTOR (addr_bits - 1 DOWNTO 0);
- Ba : IN STD_LOGIC_VECTOR (1 DOWNTO 0);
- Clk : IN STD_LOGIC;
- Clk_n : IN STD_LOGIC;
- Cke : IN STD_LOGIC;
- Cs_n : IN STD_LOGIC;
- Ras_n : IN STD_LOGIC;
- Cas_n : IN STD_LOGIC;
- We_n : IN STD_LOGIC;
- Dm : IN STD_LOGIC_VECTOR (1 DOWNTO 0)
- );
-END MT46V16M16;
-
-ARCHITECTURE behave OF MT46V16M16 IS
- -- Array for Read pipeline
- TYPE Array_Read_cmnd IS ARRAY (8 DOWNTO 0) OF STD_LOGIC;
- TYPE Array_Read_bank IS ARRAY (8 DOWNTO 0) OF STD_LOGIC_VECTOR (1 DOWNTO 0);
- TYPE Array_Read_cols IS ARRAY (8 DOWNTO 0) OF STD_LOGIC_VECTOR (cols_bits - 1 DOWNTO 0);
-
- -- Array for Write pipeline
- TYPE Array_Write_cmnd IS ARRAY (2 DOWNTO 0) OF STD_LOGIC;
- TYPE Array_Write_bank IS ARRAY (2 DOWNTO 0) OF STD_LOGIC_VECTOR (1 DOWNTO 0);
- TYPE Array_Write_cols IS ARRAY (2 DOWNTO 0) OF STD_LOGIC_VECTOR (cols_bits - 1 DOWNTO 0);
-
- -- Array for Auto Precharge
- TYPE Array_Read_precharge IS ARRAY (3 DOWNTO 0) OF STD_LOGIC;
- TYPE Array_Write_precharge IS ARRAY (3 DOWNTO 0) OF STD_LOGIC;
- TYPE Array_Count_precharge IS ARRAY (3 DOWNTO 0) OF INTEGER;
-
- -- Array for Manual Precharge
- TYPE Array_A10_precharge IS ARRAY (8 DOWNTO 0) OF STD_LOGIC;
- TYPE Array_Bank_precharge IS ARRAY (8 DOWNTO 0) OF STD_LOGIC_VECTOR (1 DOWNTO 0);
- TYPE Array_Cmnd_precharge IS ARRAY (8 DOWNTO 0) OF STD_LOGIC;
-
- -- Array for Burst Terminate
- TYPE Array_Cmnd_bst IS ARRAY (8 DOWNTO 0) OF STD_LOGIC;
-
- -- Array for Memory Access
- TYPE Array_ram_type IS ARRAY (2**cols_bits - 1 DOWNTO 0) OF STD_LOGIC_VECTOR (data_bits - 1 DOWNTO 0);
- TYPE Array_ram_pntr IS ACCESS Array_ram_type;
- TYPE Array_ram_stor IS ARRAY (2**addr_bits - 1 DOWNTO 0) OF Array_ram_pntr;
-
- -- Data pair
- SIGNAL Dq_pair : STD_LOGIC_VECTOR (2 * data_bits - 1 DOWNTO 0);
- SIGNAL Dm_pair : STD_LOGIC_VECTOR (3 DOWNTO 0);
-
- -- Mode Register
- SIGNAL Mode_reg : STD_LOGIC_VECTOR (addr_bits - 1 DOWNTO 0) := (OTHERS => '0');
-
- -- Command Decode Variables
- SIGNAL Active_enable, Aref_enable, Burst_term, Ext_mode_enable : STD_LOGIC := '0';
- SIGNAL Mode_reg_enable, Prech_enable, Read_enable, Write_enable : STD_LOGIC := '0';
-
- -- Burst Length Decode Variables
- SIGNAL Burst_length_2, Burst_length_4, Burst_length_8, Burst_length_f : STD_LOGIC := '0';
-
- -- Cas Latency Decode Variables
- SIGNAL Cas_latency_15, Cas_latency_2, Cas_latency_25, Cas_latency_3, Cas_latency_4 : STD_LOGIC := '0';
-
- -- Internal Control Signals
- SIGNAL Cs_in, Ras_in, Cas_in, We_in : STD_LOGIC := '0';
-
- -- System Clock
- SIGNAL Sys_clk : STD_LOGIC := '0';
-
- -- Dqs buffer
- SIGNAL Dqs_out : STD_LOGIC_VECTOR (1 DOWNTO 0) := "ZZ";
-
-BEGIN
- -- Strip the strength
- Cs_in <= To_X01 (Cs_n);
- Ras_in <= To_X01 (Ras_n);
- Cas_in <= To_X01 (Cas_n);
- We_in <= To_X01 (We_n);
-
- -- Commands Decode
- Active_enable <= NOT(Cs_in) AND NOT(Ras_in) AND Cas_in AND We_in;
- Aref_enable <= NOT(Cs_in) AND NOT(Ras_in) AND NOT(Cas_in) AND We_in;
- Burst_term <= NOT(Cs_in) AND Ras_in AND Cas_in AND NOT(We_in);
- Ext_mode_enable <= NOT(Cs_in) AND NOT(Ras_in) AND NOT(Cas_in) AND NOT(We_in) AND Ba(0) AND NOT(Ba(1));
- Mode_reg_enable <= NOT(Cs_in) AND NOT(Ras_in) AND NOT(Cas_in) AND NOT(We_in) AND NOT(Ba(0)) AND NOT(Ba(1));
- Prech_enable <= NOT(Cs_in) AND NOT(Ras_in) AND Cas_in AND NOT(We_in);
- Read_enable <= NOT(Cs_in) AND Ras_in AND NOT(Cas_in) AND We_in;
- Write_enable <= NOT(Cs_in) AND Ras_in AND NOT(Cas_in) AND NOT(We_in);
-
- -- Burst Length Decode
- Burst_length_2 <= NOT(Mode_reg(2)) AND NOT(Mode_reg(1)) AND Mode_reg(0);
- Burst_length_4 <= NOT(Mode_reg(2)) AND Mode_reg(1) AND NOT(Mode_reg(0));
- Burst_length_8 <= NOT(Mode_reg(2)) AND Mode_reg(1) AND Mode_reg(0);
- Burst_length_f <= (Mode_reg(2)) AND Mode_reg(1) AND Mode_reg(0);
-
- -- CAS Latency Decode
- Cas_latency_15 <= Mode_reg(6) AND NOT(Mode_reg(5)) AND (Mode_reg(4));
- Cas_latency_2 <= NOT(Mode_reg(6)) AND Mode_reg(5) AND NOT(Mode_reg(4));
- Cas_latency_25 <= Mode_reg(6) AND Mode_reg(5) AND NOT(Mode_reg(4));
- Cas_latency_3 <= NOT(Mode_reg(6)) AND Mode_reg(5) AND Mode_reg(4);
- Cas_latency_4 <= (Mode_reg(6)) AND NOT(Mode_reg(5)) AND NOT(Mode_reg(4));
-
- -- Dqs buffer
- Dqs <= Dqs_out;
-
- --
- -- System Clock
- --
- int_clk : PROCESS (Clk, Clk_n)
- VARIABLE ClkZ, CkeZ : STD_LOGIC := '0';
- begin
- IF Clk = '1' AND Clk_n = '0' THEN
- ClkZ := '1';
- CkeZ := Cke;
- ELSIF Clk = '0' AND Clk_n = '1' THEN
- ClkZ := '0';
- END IF;
- Sys_clk <= CkeZ AND ClkZ;
- END PROCESS;
-
- --
- -- Main Process
- --
- state_register : PROCESS
- -- Precharge Variables
- VARIABLE Pc_b0, Pc_b1, Pc_b2, Pc_b3 : STD_LOGIC := '0';
-
- -- Activate Variables
- VARIABLE Act_b0, Act_b1, Act_b2, Act_b3 : STD_LOGIC := '1';
-
- -- Data IO variables
- VARIABLE Data_in_enable, Data_out_enable : STD_LOGIC := '0';
-
- -- Internal address mux variables
- VARIABLE Cols_brst : STD_LOGIC_VECTOR (2 DOWNTO 0);
- VARIABLE Prev_bank : STD_LOGIC_VECTOR (1 DOWNTO 0) := "00";
- VARIABLE Bank_addr : STD_LOGIC_VECTOR (1 DOWNTO 0) := "00";
- VARIABLE Cols_addr : STD_LOGIC_VECTOR (cols_bits - 1 DOWNTO 0);
- VARIABLE Rows_addr : STD_LOGIC_VECTOR (addr_bits - 1 DOWNTO 0);
- VARIABLE B0_row_addr : STD_LOGIC_VECTOR (addr_bits - 1 DOWNTO 0);
- VARIABLE B1_row_addr : STD_LOGIC_VECTOR (addr_bits - 1 DOWNTO 0);
- VARIABLE B2_row_addr : STD_LOGIC_VECTOR (addr_bits - 1 DOWNTO 0);
- VARIABLE B3_row_addr : STD_LOGIC_VECTOR (addr_bits - 1 DOWNTO 0);
-
- -- DLL Reset variables
- VARIABLE DLL_enable : STD_LOGIC := '0';
- VARIABLE DLL_reset : STD_LOGIC := '0';
- VARIABLE DLL_done : STD_LOGIC := '0';
- VARIABLE DLL_count : INTEGER := 0;
-
- -- Timing Check
- VARIABLE MRD_chk : TIME := 0 ns;
- VARIABLE RFC_chk : TIME := 0 ns;
- VARIABLE RRD_chk : TIME := 0 ns;
- VARIABLE RAS_chk0, RAS_chk1, RAS_chk2, RAS_chk3 : TIME := 0 ns;
- VARIABLE RAP_chk0, RAP_chk1, RAP_chk2, RAP_chk3 : TIME := 0 ns;
- VARIABLE RC_chk0, RC_chk1, RC_chk2, RC_chk3 : TIME := 0 ns;
- VARIABLE RCD_chk0, RCD_chk1, RCD_chk2, RCD_chk3 : TIME := 0 ns;
- VARIABLE RP_chk0, RP_chk1, RP_chk2, RP_chk3 : TIME := 0 ns;
- VARIABLE WR_chk0, WR_chk1, WR_chk2, WR_chk3 : TIME := 0 ns;
-
- -- Read pipeline variables
- VARIABLE Read_cmnd : Array_Read_cmnd;
- VARIABLE Read_bank : Array_Read_bank;
- VARIABLE Read_cols : Array_Read_cols;
-
- -- Write pipeline variables
- VARIABLE Write_cmnd : Array_Write_cmnd;
- VARIABLE Write_bank : Array_Write_bank;
- VARIABLE Write_cols : Array_Write_cols;
-
- -- Auto Precharge variables
- VARIABLE Read_precharge : Array_Read_precharge := ('0' & '0' & '0' & '0');
- VARIABLE Write_precharge : Array_Write_precharge := ('0' & '0' & '0' & '0');
- VARIABLE Count_precharge : Array_Count_precharge := ( 0 & 0 & 0 & 0 );
-
- -- Manual Precharge variables
- VARIABLE A10_precharge : Array_A10_precharge;
- VARIABLE Bank_precharge : Array_Bank_precharge;
- VARIABLE Cmnd_precharge : Array_Cmnd_precharge;
-
- -- Burst Terminate variable
- VARIABLE Cmnd_bst : Array_Cmnd_bst;
-
- -- Memory Banks
- VARIABLE Bank0 : Array_ram_stor;
- VARIABLE Bank1 : Array_ram_stor;
- VARIABLE Bank2 : Array_ram_stor;
- VARIABLE Bank3 : Array_ram_stor;
-
- -- Burst Counter
- VARIABLE Burst_counter : STD_LOGIC_VECTOR (cols_bits - 1 DOWNTO 0);
-
- -- Internal Dqs initialize
- VARIABLE Dqs_int : STD_LOGIC := '0';
-
- -- Data buffer for DM Mask
- VARIABLE Data_buf : STD_LOGIC_VECTOR (data_bits - 1 DOWNTO 0) := (OTHERS => 'Z');
-
- --
- -- Initialize empty rows
- --
- PROCEDURE Init_mem (Bank : STD_LOGIC_VECTOR; Row_index : INTEGER) IS
- VARIABLE i, j : INTEGER := 0;
- BEGIN
- IF Bank = "00" THEN
- IF Bank0 (Row_index) = NULL THEN -- Check to see if row empty
- Bank0 (Row_index) := NEW Array_ram_type; -- Open new row for access
- FOR i IN (2**cols_bits - 1) DOWNTO 0 LOOP -- Filled row with zeros
- FOR j IN (data_bits - 1) DOWNTO 0 LOOP
- Bank0 (Row_index) (i) (j) := '0';
- END LOOP;
- END LOOP;
- END IF;
- ELSIF Bank = "01" THEN
- IF Bank1 (Row_index) = NULL THEN
- Bank1 (Row_index) := NEW Array_ram_type;
- FOR i IN (2**cols_bits - 1) DOWNTO 0 LOOP
- FOR j IN (data_bits - 1) DOWNTO 0 LOOP
- Bank1 (Row_index) (i) (j) := '0';
- END LOOP;
- END LOOP;
- END IF;
- ELSIF Bank = "10" THEN
- IF Bank2 (Row_index) = NULL THEN
- Bank2 (Row_index) := NEW Array_ram_type;
- FOR i IN (2**cols_bits - 1) DOWNTO 0 LOOP
- FOR j IN (data_bits - 1) DOWNTO 0 LOOP
- Bank2 (Row_index) (i) (j) := '0';
- END LOOP;
- END LOOP;
- END IF;
- ELSIF Bank = "11" THEN
- IF Bank3 (Row_index) = NULL THEN
- Bank3 (Row_index) := NEW Array_ram_type;
- FOR i IN (2**cols_bits - 1) DOWNTO 0 LOOP
- FOR j IN (data_bits - 1) DOWNTO 0 LOOP
- Bank3 (Row_index) (i) (j) := '0';
- END LOOP;
- END LOOP;
- END IF;
- END IF;
- END;
-
- --
- -- Burst Counter
- --
- PROCEDURE Burst_decode IS
- VARIABLE Cols_temp : STD_LOGIC_VECTOR (cols_bits - 1 DOWNTO 0) := (OTHERS => '0');
- BEGIN
- -- Advance burst counter
- Burst_counter := Burst_counter + 1;
-
- -- Burst Type
- IF Mode_reg (3) = '0' THEN
- Cols_temp := Cols_addr + 1;
- ELSIF Mode_reg (3) = '1' THEN
- Cols_temp (2) := Burst_counter (2) XOR Cols_brst (2);
- Cols_temp (1) := Burst_counter (1) XOR Cols_brst (1);
- Cols_temp (0) := Burst_counter (0) XOR Cols_brst (0);
- END IF;
-
- -- Burst Length
- IF Burst_length_2 = '1' THEN
- Cols_addr (0) := Cols_temp (0);
- ELSIF Burst_length_4 = '1' THEN
- Cols_addr (1 DOWNTO 0) := Cols_temp (1 DOWNTO 0);
- ELSIF Burst_length_8 = '1' THEN
- Cols_addr (2 DOWNTO 0) := Cols_temp (2 DOWNTO 0);
- ELSE
- Cols_addr := Cols_temp;
- END IF;
-
- -- Data counter
- IF Burst_length_2 = '1' THEN
- IF Burst_counter >= 2 THEN
- IF Data_in_enable = '1' THEN
- Data_in_enable := '0';
- ELSIF Data_out_enable = '1' THEN
- Data_out_enable := '0';
- END IF;
- END IF;
- ELSIF Burst_length_4 = '1' THEN
- IF Burst_counter >= 4 THEN
- IF Data_in_enable = '1' THEN
- Data_in_enable := '0';
- ELSIF Data_out_enable = '1' THEN
- Data_out_enable := '0';
- END IF;
- END IF;
- ELSIF Burst_length_8 = '1' THEN
- IF Burst_counter >= 8 THEN
- IF Data_in_enable = '1' THEN
- Data_in_enable := '0';
- ELSIF Data_out_enable = '1' THEN
- Data_out_enable := '0';
- END IF;
- END IF;
- END IF;
- END;
-
- BEGIN
- WAIT ON Sys_clk;
-
- --
- -- Manual Precharge Pipeline
- --
- IF ((Sys_clk'EVENT AND Sys_clk = '0') OR (Sys_clk'EVENT AND Sys_clk = '1')) THEN
- -- A10 Precharge Pipeline
- A10_precharge(0) := A10_precharge(1);
- A10_precharge(1) := A10_precharge(2);
- A10_precharge(2) := A10_precharge(3);
- A10_precharge(3) := A10_precharge(4);
- A10_precharge(4) := A10_precharge(5);
- A10_precharge(5) := A10_precharge(6);
- A10_precharge(6) := A10_precharge(7);
- A10_precharge(7) := A10_precharge(8);
- A10_precharge(8) := '0';
-
- -- Bank Precharge Pipeline
- Bank_precharge(0) := Bank_precharge(1);
- Bank_precharge(1) := Bank_precharge(2);
- Bank_precharge(2) := Bank_precharge(3);
- Bank_precharge(3) := Bank_precharge(4);
- Bank_precharge(4) := Bank_precharge(5);
- Bank_precharge(5) := Bank_precharge(6);
- Bank_precharge(6) := Bank_precharge(7);
- Bank_precharge(7) := Bank_precharge(8);
- Bank_precharge(8) := "00";
-
- -- Command Precharge Pipeline
- Cmnd_precharge(0) := Cmnd_precharge(1);
- Cmnd_precharge(1) := Cmnd_precharge(2);
- Cmnd_precharge(2) := Cmnd_precharge(3);
- Cmnd_precharge(3) := Cmnd_precharge(4);
- Cmnd_precharge(4) := Cmnd_precharge(5);
- Cmnd_precharge(5) := Cmnd_precharge(6);
- Cmnd_precharge(6) := Cmnd_precharge(7);
- Cmnd_precharge(7) := Cmnd_precharge(8);
- Cmnd_precharge(8) := '0';
-
- -- Terminate Read if same bank or all banks
- IF ((Cmnd_precharge (0) = '1') AND
- (Bank_precharge (0) = Bank_addr OR A10_precharge (0) = '1') AND
- (Data_out_enable = '1')) THEN
- Data_out_enable := '0';
- END IF;
- END IF;
-
- --
- -- Burst Terminate Pipeline
- --
- IF ((Sys_clk'EVENT AND Sys_clk = '0') OR (Sys_clk'EVENT AND Sys_clk = '1')) THEN
- -- Burst Terminate pipeline
- Cmnd_bst (0) := Cmnd_bst (1);
- Cmnd_bst (1) := Cmnd_bst (2);
- Cmnd_bst (2) := Cmnd_bst (3);
- Cmnd_bst (3) := Cmnd_bst (4);
- Cmnd_bst (4) := Cmnd_bst (5);
- Cmnd_bst (5) := Cmnd_bst (6);
- Cmnd_bst (6) := Cmnd_bst (7);
- Cmnd_bst (7) := Cmnd_bst (8);
- Cmnd_bst (8) := '0';
-
- -- Terminate current Read
- IF ((Cmnd_bst (0) = '1') AND (Data_out_enable = '1')) THEN
- Data_out_enable := '0';
- END IF;
- END IF;
-
- --
- -- Dq and Dqs Drivers
- --
- IF ((Sys_clk'EVENT AND Sys_clk = '0') OR (Sys_clk'EVENT AND Sys_clk = '1')) THEN
- -- Read Command Pipeline
- Read_cmnd (0) := Read_cmnd (1);
- Read_cmnd (1) := Read_cmnd (2);
- Read_cmnd (2) := Read_cmnd (3);
- Read_cmnd (3) := Read_cmnd (4);
- Read_cmnd (4) := Read_cmnd (5);
- Read_cmnd (5) := Read_cmnd (6);
- Read_cmnd (6) := Read_cmnd (7);
- Read_cmnd (7) := Read_cmnd (8);
- Read_cmnd (8) := '0';
-
- -- Read Bank Pipeline
- Read_bank (0) := Read_bank (1);
- Read_bank (1) := Read_bank (2);
- Read_bank (2) := Read_bank (3);
- Read_bank (3) := Read_bank (4);
- Read_bank (4) := Read_bank (5);
- Read_bank (5) := Read_bank (6);
- Read_bank (6) := Read_bank (7);
- Read_bank (7) := Read_bank (8);
- Read_bank (8) := "00";
-
- -- Read Column Pipeline
- Read_cols (0) := Read_cols (1);
- Read_cols (1) := Read_cols (2);
- Read_cols (2) := Read_cols (3);
- Read_cols (3) := Read_cols (4);
- Read_cols (4) := Read_cols (5);
- Read_cols (5) := Read_cols (6);
- Read_cols (6) := Read_cols (7);
- Read_cols (7) := Read_cols (8);
- Read_cols (8) := (OTHERS => '0');
-
- -- Initialize Read command
- IF Read_cmnd (0) = '1' THEN
- Data_out_enable := '1';
- Bank_addr := Read_bank (0);
- Cols_addr := Read_cols (0);
- Cols_brst := Cols_addr (2 DOWNTO 0);
- Burst_counter := (OTHERS => '0');
-
- -- Row address mux
- CASE Bank_addr IS
- WHEN "00" => Rows_addr := B0_row_addr;
- WHEN "01" => Rows_addr := B1_row_addr;
- WHEN "10" => Rows_addr := B2_row_addr;
- WHEN OTHERS => Rows_addr := B3_row_addr;
- END CASE;
- END IF;
-
- -- Toggle Dqs during Read command
- IF Data_out_enable = '1' THEN
- Dqs_int := '0';
- IF Dqs_out = "00" THEN
- Dqs_out <= "11";
- ELSIF Dqs_out = "11" THEN
- Dqs_out <= "00";
- ELSE
- Dqs_out <= "00";
- END IF;
- ELSIF Data_out_enable = '0' AND Dqs_int = '0' THEN
- Dqs_out <= "ZZ";
- END IF;
-
- -- Initialize Dqs for Read command
- IF Read_cmnd (2) = '1' THEN
- IF Data_out_enable = '0' THEN
- Dqs_int := '1';
- Dqs_out <= "00";
- END IF;
- END IF;
-
- -- Read Latch
- IF Data_out_enable = '1' THEN
- -- Initialize Memory
- Init_mem (Bank_addr, CONV_INTEGER(Rows_addr));
-
- -- Output Data
- CASE Bank_addr IS
- WHEN "00" => Dq <= Bank0 (CONV_INTEGER(Rows_addr)) (CONV_INTEGER(Cols_addr));
- WHEN "01" => Dq <= Bank1 (CONV_INTEGER(Rows_addr)) (CONV_INTEGER(Cols_addr));
- WHEN "10" => Dq <= Bank2 (CONV_INTEGER(Rows_addr)) (CONV_INTEGER(Cols_addr));
- WHEN OTHERS => Dq <= Bank3 (CONV_INTEGER(Rows_addr)) (CONV_INTEGER(Cols_addr));
- END CASE;
-
- -- Increase Burst Counter
- Burst_decode;
- ELSE
- Dq <= (OTHERS => 'Z');
- END IF;
- END IF;
-
- --
- -- Write FIFO and DM Mask Logic
- --
- IF Sys_clk'EVENT AND Sys_clk = '1' THEN
- -- Write command pipeline
- Write_cmnd (0) := Write_cmnd (1);
- Write_cmnd (1) := Write_cmnd (2);
- Write_cmnd (2) := '0';
-
- -- Write command pipeline
- Write_bank (0) := Write_bank (1);
- Write_bank (1) := Write_bank (2);
- Write_bank (2) := "00";
-
- -- Write column pipeline
- Write_cols (0) := Write_cols (1);
- Write_cols (1) := Write_cols (2);
- Write_cols (2) := (OTHERS => '0');
-
- -- Initialize Write command
- IF Write_cmnd (0) = '1' THEN
- Data_in_enable := '1';
- Bank_addr := Write_bank (0);
- Cols_addr := Write_cols (0);
- Cols_brst := Cols_addr (2 DOWNTO 0);
- Burst_counter := (OTHERS => '0');
-
- -- Row address mux
- CASE Bank_addr IS
- WHEN "00" => Rows_addr := B0_row_addr;
- WHEN "01" => Rows_addr := B1_row_addr;
- WHEN "10" => Rows_addr := B2_row_addr;
- WHEN OTHERS => Rows_addr := B3_row_addr;
- END CASE;
- END IF;
-
- -- Write data
- IF Data_in_enable = '1' THEN
- -- Initialize memory
- Init_mem (Bank_addr, CONV_INTEGER(Rows_addr));
-
- -- Write first data
- IF Dm_pair (1) = '0' OR Dm_pair (0) = '0' THEN
- -- Data Buffer
- CASE Bank_addr IS
- WHEN "00" => Data_buf := Bank0 (CONV_INTEGER(Rows_addr)) (CONV_INTEGER(Cols_addr));
- WHEN "01" => Data_buf := Bank1 (CONV_INTEGER(Rows_addr)) (CONV_INTEGER(Cols_addr));
- WHEN "10" => Data_buf := Bank2 (CONV_INTEGER(Rows_addr)) (CONV_INTEGER(Cols_addr));
- WHEN OTHERS => Data_buf := Bank3 (CONV_INTEGER(Rows_addr)) (CONV_INTEGER(Cols_addr));
- END CASE;
-
- -- Perform DM Mask
- IF Dm_pair (0) = '0' THEN
- Data_buf ( 7 DOWNTO 0) := Dq_pair ( 7 DOWNTO 0);
- END IF;
- IF Dm_pair (1) = '0' THEN
- Data_buf (15 DOWNTO 8) := Dq_pair (15 DOWNTO 8);
- END IF;
-
- -- Write Data
- CASE Bank_addr IS
- WHEN "00" => Bank0 (CONV_INTEGER(Rows_addr)) (CONV_INTEGER(Cols_addr)) := Data_buf;
- WHEN "01" => Bank1 (CONV_INTEGER(Rows_addr)) (CONV_INTEGER(Cols_addr)) := Data_buf;
- WHEN "10" => Bank2 (CONV_INTEGER(Rows_addr)) (CONV_INTEGER(Cols_addr)) := Data_buf;
- WHEN OTHERS => Bank3 (CONV_INTEGER(Rows_addr)) (CONV_INTEGER(Cols_addr)) := Data_buf;
- END CASE;
- END IF;
-
- -- Increase Burst Counter
- Burst_decode;
-
- -- Write second data
- IF Dm_pair (3) = '0' OR Dm_pair (2) = '0' THEN
- -- Data Buffer
- CASE Bank_addr IS
- WHEN "00" => Data_buf := Bank0 (CONV_INTEGER(Rows_addr)) (CONV_INTEGER(Cols_addr));
- WHEN "01" => Data_buf := Bank1 (CONV_INTEGER(Rows_addr)) (CONV_INTEGER(Cols_addr));
- WHEN "10" => Data_buf := Bank2 (CONV_INTEGER(Rows_addr)) (CONV_INTEGER(Cols_addr));
- WHEN OTHERS => Data_buf := Bank3 (CONV_INTEGER(Rows_addr)) (CONV_INTEGER(Cols_addr));
- END CASE;
-
- -- Perform DM Mask
- IF Dm_pair (2) = '0' THEN
- Data_buf ( 7 DOWNTO 0) := Dq_pair (23 DOWNTO 16);
- END IF;
- IF Dm_pair (3) = '0' THEN
- Data_buf (15 DOWNTO 8) := Dq_pair (31 DOWNTO 24);
- END IF;
-
- -- Write Data
- CASE Bank_addr IS
- WHEN "00" => Bank0 (CONV_INTEGER(Rows_addr)) (CONV_INTEGER(Cols_addr)) := Data_buf;
- WHEN "01" => Bank1 (CONV_INTEGER(Rows_addr)) (CONV_INTEGER(Cols_addr)) := Data_buf;
- WHEN "10" => Bank2 (CONV_INTEGER(Rows_addr)) (CONV_INTEGER(Cols_addr)) := Data_buf;
- WHEN OTHERS => Bank3 (CONV_INTEGER(Rows_addr)) (CONV_INTEGER(Cols_addr)) := Data_buf;
- END CASE;
- END IF;
-
- -- Increase Burst Counter
- Burst_decode;
-
- -- tWR start and tWTR check
- IF Dm_pair (3 DOWNTO 2) = "00" OR Dm_pair (1 DOWNTO 0) = "00" THEN
- CASE Bank_addr IS
- WHEN "00" => WR_chk0 := NOW;
- WHEN "01" => WR_chk1 := NOW;
- WHEN "10" => WR_chk2 := NOW;
- WHEN OTHERS => WR_chk3 := NOW;
- END CASE;
-
- -- tWTR check
- ASSERT (Read_enable = '0')
- REPORT "tWTR violation during Read"
- SEVERITY WARNING;
- END IF;
- END IF;
- END IF;
-
- --
- -- Auto Precharge Calculation
- --
- IF Sys_clk'EVENT AND Sys_clk = '1' THEN
- -- Precharge counter
- IF Read_precharge (0) = '1' OR Write_precharge (0) = '1' THEN
- Count_precharge (0) := Count_precharge (0) + 1;
- END IF;
- IF Read_precharge (1) = '1' OR Write_precharge (1) = '1' THEN
- Count_precharge (1) := Count_precharge (1) + 1;
- END IF;
- IF Read_precharge (2) = '1' OR Write_precharge (2) = '1' THEN
- Count_precharge (2) := Count_precharge (2) + 1;
- END IF;
- IF Read_precharge (3) = '1' OR Write_precharge (3) = '1' THEN
- Count_precharge (3) := Count_precharge (3) + 1;
- END IF;
-
- -- Read with AutoPrecharge Calculation
- -- The device start internal precharge when:
- -- 1. Meet tRAS requirement
- -- 2. BL/2 cycles after command
- IF ((Read_precharge(0) = '1') AND (NOW - RAS_chk0 >= tRAS)) THEN
- IF ((Burst_length_2 = '1' AND Count_precharge(0) >= 1) OR
- (Burst_length_4 = '1' AND Count_precharge(0) >= 2) OR
- (Burst_length_8 = '1' AND Count_precharge(0) >= 4)) THEN
- Pc_b0 := '1';
- Act_b0 := '0';
- RP_chk0 := NOW;
- Read_precharge(0) := '0';
- END IF;
- END IF;
- IF ((Read_precharge(1) = '1') AND (NOW - RAS_chk1 >= tRAS)) THEN
- IF ((Burst_length_2 = '1' AND Count_precharge(1) >= 1) OR
- (Burst_length_4 = '1' AND Count_precharge(1) >= 2) OR
- (Burst_length_8 = '1' AND Count_precharge(1) >= 4)) THEN
- Pc_b1 := '1';
- Act_b1 := '0';
- RP_chk1 := NOW;
- Read_precharge(1) := '0';
- END IF;
- END IF;
- IF ((Read_precharge(2) = '1') AND (NOW - RAS_chk2 >= tRAS)) THEN
- IF ((Burst_length_2 = '1' AND Count_precharge(2) >= 1) OR
- (Burst_length_4 = '1' AND Count_precharge(2) >= 2) OR
- (Burst_length_8 = '1' AND Count_precharge(2) >= 4)) THEN
- Pc_b2 := '1';
- Act_b2 := '0';
- RP_chk2 := NOW;
- Read_precharge(2) := '0';
- END IF;
- END IF;
- IF ((Read_precharge(3) = '1') AND (NOW - RAS_chk3 >= tRAS)) THEN
- IF ((Burst_length_2 = '1' AND Count_precharge(3) >= 1) OR
- (Burst_length_4 = '1' AND Count_precharge(3) >= 2) OR
- (Burst_length_8 = '1' AND Count_precharge(3) >= 4)) THEN
- Pc_b3 := '1';
- Act_b3 := '0';
- RP_chk3 := NOW;
- Read_precharge(3) := '0';
- END IF;
- END IF;
-
- -- Write with AutoPrecharge Calculation
- -- The device start internal precharge when:
- -- 1. Meet tRAS requirement
- -- 2. Two clock after last burst
- -- Since tWR is time base, the model will compensate tRP
- IF ((Write_precharge(0) = '1') AND (NOW - RAS_chk0 >= tRAS)) THEN
- IF ((Burst_length_2 = '1' AND Count_precharge (0) >= 4) OR
- (Burst_length_4 = '1' AND Count_precharge (0) >= 5) OR
- (Burst_length_8 = '1' AND Count_precharge (0) >= 7)) THEN
- Pc_b0 := '1';
- Act_b0 := '0';
- RP_chk0 := NOW - ((2 * tCK) - tWR);
- Write_precharge(0) := '0';
- END IF;
- END IF;
- IF ((Write_precharge(1) = '1') AND (NOW - RAS_chk1 >= tRAS)) THEN
- IF ((Burst_length_2 = '1' AND Count_precharge (1) >= 4) OR
- (Burst_length_4 = '1' AND Count_precharge (1) >= 5) OR
- (Burst_length_8 = '1' AND Count_precharge (1) >= 7)) THEN
- Pc_b1 := '1';
- Act_b1 := '0';
- RP_chk1 := NOW - ((2 * tCK) - tWR);
- Write_precharge(1) := '0';
- END IF;
- END IF;
- IF ((Write_precharge(2) = '1') AND (NOW - RAS_chk2 >= tRAS)) THEN
- IF ((Burst_length_2 = '1' AND Count_precharge (2) >= 4) OR
- (Burst_length_4 = '1' AND Count_precharge (2) >= 5) OR
- (Burst_length_8 = '1' AND Count_precharge (2) >= 7)) THEN
- Pc_b2 := '1';
- Act_b2 := '0';
- RP_chk2 := NOW - ((2 * tCK) - tWR);
- Write_precharge(2) := '0';
- END IF;
- END IF;
- IF ((Write_precharge(3) = '1') AND (NOW - RAS_chk3 >= tRAS)) THEN
- IF ((Burst_length_2 = '1' AND Count_precharge (3) >= 4) OR
- (Burst_length_4 = '1' AND Count_precharge (3) >= 5) OR
- (Burst_length_8 = '1' AND Count_precharge (3) >= 7)) THEN
- Pc_b3 := '1';
- Act_b3 := '0';
- RP_chk3 := NOW - ((2 * tCK) - tWR);
- Write_precharge(3) := '0';
- END IF;
- END IF;
- END IF;
-
- --
- -- DLL Counter
- --
- IF Sys_clk'EVENT AND Sys_clk = '1' THEN
- IF (DLL_Reset = '1' AND DLL_done = '0') THEN
- DLL_count := DLL_count + 1;
- IF (DLL_count >= 200) THEN
- DLL_done := '1';
- END IF;
- END IF;
- END IF;
-
- --
- -- Control Logic
- --
- IF Sys_clk'EVENT AND Sys_clk = '1' THEN
- -- Auto Refresh
- IF Aref_enable = '1' THEN
- -- Auto Refresh to Auto Refresh
- ASSERT (NOW - RFC_chk >= tRFC)
- REPORT "tRFC violation during Auto Refresh"
- SEVERITY WARNING;
-
- -- Precharge to Auto Refresh
- ASSERT ((NOW - RP_chk0 >= tRP) AND (NOW - RP_chk1 >= tRP) AND
- (NOW - RP_chk2 >= tRP) AND (NOW - RP_chk3 >= tRP))
- REPORT "tRP violation during Auto Refresh"
- SEVERITY WARNING;
-
- -- Precharge to Auto Refresh
- ASSERT (Pc_b0 = '1' AND Pc_b1 = '1' AND Pc_b2 = '1' AND Pc_b3 = '1')
- REPORT "All banks must be Precharge before Auto Refresh"
- SEVERITY WARNING;
-
- -- Record current tRFC time
- RFC_chk := NOW;
- END IF;
-
- -- Extended Load Mode Register
- IF Ext_mode_enable = '1' THEN
- IF (Pc_b0 = '1' AND Pc_b1 = '1' AND Pc_b2 = '1' AND Pc_b3 = '1') THEN
- IF (Addr (0) = '0') THEN
- DLL_enable := '1';
- ELSE
- DLL_enable := '0';
- END IF;
- END IF;
-
- -- Precharge to EMR
- ASSERT (Pc_b0 = '1' AND Pc_b1 = '1' AND Pc_b2 = '1' AND Pc_b3 = '1')
- REPORT "All bank must be Precharged before Extended Mode Register"
- SEVERITY WARNING;
-
- -- Precharge to EMR
- ASSERT ((NOW - RP_chk0 >= tRP) AND (NOW - RP_chk1 >= tRP) AND
- (NOW - RP_chk2 >= tRP) AND (NOW - RP_chk3 >= tRP))
- REPORT "tRP violation during Extended Load Register"
- SEVERITY WARNING;
-
- -- LMR/EMR to EMR
- ASSERT (NOW - MRD_chk >= tMRD)
- REPORT "tMRD violation during Extended Mode Register"
- SEVERITY WARNING;
-
- -- Record current tMRD time
- MRD_chk := NOW;
- END IF;
-
- -- Load Mode Register
- IF Mode_reg_enable = '1' THEN
- -- Register mode
- Mode_reg <= Addr;
-
- -- DLL Reset
- IF (DLL_enable = '1' AND Addr (8) = '1') THEN
- DLL_reset := '1';
- DLL_done := '0';
- DLL_count := 0;
- ELSIF (DLL_enable = '1' AND DLL_reset = '0' AND Addr (8) = '0') THEN
- ASSERT (FALSE)
- REPORT "DLL is ENABLE: DLL RESET is require"
- SEVERITY WARNING;
- ELSIF (DLL_enable = '0' AND Addr (8) = '1') THEN
- ASSERT (FALSE)
- REPORT "DLL is DISABLE: DLL RESET will be ignored"
- SEVERITY WARNING;
- END IF;
-
- -- Precharge to LMR
- ASSERT (Pc_b0 = '1' AND Pc_b1 = '1' AND Pc_b2 = '1' AND Pc_b3 = '1')
- REPORT "All bank must be Precharged before Load Mode Register"
- SEVERITY WARNING;
-
- -- Precharge to EMR
- ASSERT ((NOW - RP_chk0 >= tRP) AND (NOW - RP_chk1 >= tRP) AND
- (NOW - RP_chk2 >= tRP) AND (NOW - RP_chk3 >= tRP))
- REPORT "tRP violation during Load Mode Register"
- SEVERITY WARNING;
-
- -- LMR/ELMR to LMR
- ASSERT (NOW - MRD_chk >= tMRD)
- REPORT "tMRD violation during Load Mode Register"
- SEVERITY WARNING;
-
- -- Check for invalid Burst Length
- ASSERT ((Addr (2 DOWNTO 0) = "001") OR -- BL = 2
- (Addr (2 DOWNTO 0) = "010") OR -- BL = 4
- (Addr (2 DOWNTO 0) = "011")) -- BL = 8
- REPORT "Invalid Burst Length during Load Mode Register"
- SEVERITY WARNING;
-
- -- Check for invalid CAS Latency
- ASSERT ((Addr (6 DOWNTO 4) = "010") OR -- CL = 2.0
- (Addr (6 DOWNTO 4) = "110")) -- CL = 2.5
- REPORT "Invalid CAS Latency during Load Mode Register"
- SEVERITY WARNING;
-
- -- Record current tMRD time
- MRD_chk := NOW;
- END IF;
-
- -- Active Block (latch Bank and Row Address)
- IF Active_enable = '1' THEN
- -- Activate an OPEN bank can corrupt data
- ASSERT ((Ba = "00" AND Act_b0 = '0') OR
- (Ba = "01" AND Act_b1 = '0') OR
- (Ba = "10" AND Act_b2 = '0') OR
- (Ba = "11" AND Act_b3 = '0'))
- REPORT "Bank is already activated - data can be corrupted"
- SEVERITY WARNING;
-
- -- Activate Bank 0
- IF Ba = "00" AND Pc_b0 = '1' THEN
- -- Activate to Activate (same bank)
- ASSERT (NOW - RC_chk0 >= tRC)
- REPORT "tRC violation during Activate Bank 0"
- SEVERITY WARNING;
-
- -- Precharge to Active
- ASSERT (NOW - RP_chk0 >= tRP)
- REPORT "tRP violation during Activate Bank 0"
- SEVERITY WARNING;
-
- -- Record Variables for checking violation
- Act_b0 := '1';
- Pc_b0 := '0';
- B0_row_addr := Addr;
- RC_chk0 := NOW;
- RCD_chk0 := NOW;
- RAS_chk0 := NOW;
- RAP_chk0 := NOW;
- END IF;
-
- -- Activate Bank 1
- IF Ba = "01" AND Pc_b1 = '1' THEN
- -- Activate to Activate (same bank)
- ASSERT (NOW - RC_chk1 >= tRC)
- REPORT "tRC violation during Activate Bank 1"
- SEVERITY WARNING;
-
- -- Precharge to Active
- ASSERT (NOW - RP_chk1 >= tRP)
- REPORT "tRP violation during Activate Bank 1"
- SEVERITY WARNING;
-
- -- Record Variables for checking violation
- Act_b1 := '1';
- Pc_b1 := '0';
- B1_row_addr := Addr;
- RC_chk1 := NOW;
- RCD_chk1 := NOW;
- RAS_chk1 := NOW;
- RAP_chk1 := NOW;
- END IF;
-
- -- Activate Bank 2
- IF Ba = "10" AND Pc_b2 = '1' THEN
- -- Activate to Activate (same bank)
- ASSERT (NOW - RC_chk2 >= tRC)
- REPORT "tRC violation during Activate Bank 2"
- SEVERITY WARNING;
-
- -- Precharge to Active
- ASSERT (NOW - RP_chk2 >= tRP)
- REPORT "tRP violation during Activate Bank 2"
- SEVERITY WARNING;
-
- -- Record Variables for checking violation
- Act_b2 := '1';
- Pc_b2 := '0';
- B2_row_addr := Addr;
- RC_chk2 := NOW;
- RCD_chk2 := NOW;
- RAS_chk2 := NOW;
- RAP_chk2 := NOW;
- END IF;
-
- -- Activate Bank 3
- IF Ba = "11" AND Pc_b3 = '1' THEN
- -- Activate to Activate (same bank)
- ASSERT (NOW - RC_chk3 >= tRC)
- REPORT "tRC violation during Activate Bank 3"
- SEVERITY WARNING;
-
- -- Precharge to Active
- ASSERT (NOW - RP_chk3 >= tRP)
- REPORT "tRP violation during Activate Bank 3"
- SEVERITY WARNING;
-
- -- Record Variables for checking violation
- Act_b3 := '1';
- Pc_b3 := '0';
- B3_row_addr := Addr;
- RC_chk3 := NOW;
- RCD_chk3 := NOW;
- RAS_chk3 := NOW;
- RAP_chk3 := NOW;
- END IF;
-
- -- Activate Bank A to Activate Bank B
- IF (Prev_bank /= Ba) THEN
- ASSERT (NOW - RRD_chk >= tRRD)
- REPORT "tRRD violation during Activate"
- SEVERITY WARNING;
- END IF;
-
- -- AutoRefresh to Activate
- ASSERT (NOW - RFC_chk >= tRFC)
- REPORT "tRFC violation during Activate"
- SEVERITY WARNING;
-
- -- Record Variables for Checking Violation
- RRD_chk := NOW;
- Prev_bank := Ba;
- END IF;
-
- -- Precharge Block - Consider NOP if bank already precharged or in process of precharging
- IF Prech_enable = '1' THEN
- -- EMR or LMR to Precharge
- ASSERT (NOW - MRD_chk >= tMRD)
- REPORT "tMRD violation during Precharge"
- SEVERITY WARNING;
-
- -- Precharge Bank 0
- IF ((Addr (10) = '1' OR (Addr (10) = '0' AND Ba = "00")) AND Act_b0 = '1') THEN
- Act_b0 := '0';
- Pc_b0 := '1';
- RP_chk0 := NOW;
-
- -- Activate to Precharge bank 0
- ASSERT (NOW - RAS_chk0 >= tRAS)
- REPORT "tRAS violation during Precharge"
- SEVERITY WARNING;
-
- -- tWR violation check for Write
- ASSERT (NOW - WR_chk0 >= tWR)
- REPORT "tWR violation during Precharge"
- SEVERITY WARNING;
- END IF;
-
- -- Precharge Bank 1
- IF ((Addr (10) = '1' OR (Addr (10) = '0' AND Ba = "01")) AND Act_b1 = '1') THEN
- Act_b1 := '0';
- Pc_b1 := '1';
- RP_chk1 := NOW;
-
- -- Activate to Precharge
- ASSERT (NOW - RAS_chk1 >= tRAS)
- REPORT "tRAS violation during Precharge"
- SEVERITY WARNING;
-
- -- tWR violation check for Write
- ASSERT (NOW - WR_chk1 >= tWR)
- REPORT "tWR violation during Precharge"
- SEVERITY WARNING;
- END IF;
-
- -- Precharge Bank 2
- IF ((Addr (10) = '1' OR (Addr (10) = '0' AND Ba = "10")) AND Act_b2 = '1') THEN
- Act_b2 := '0';
- Pc_b2 := '1';
- RP_chk2 := NOW;
-
- -- Activate to Precharge
- ASSERT (NOW - RAS_chk2 >= tRAS)
- REPORT "tRAS violation during Precharge"
- SEVERITY WARNING;
-
- -- tWR violation check for Write
- ASSERT (NOW - WR_chk2 >= tWR)
- REPORT "tWR violation during Precharge"
- SEVERITY WARNING;
- END IF;
-
- -- Precharge Bank 3
- IF ((Addr (10) = '1' OR (Addr (10) = '0' AND Ba = "11")) AND Act_b3 = '1') THEN
- Act_b3 := '0';
- Pc_b3 := '1';
- RP_chk3 := NOW;
-
- -- Activate to Precharge
- ASSERT (NOW - RAS_chk3 >= tRAS)
- REPORT "tRAS violation during Precharge"
- SEVERITY WARNING;
-
- -- tWR violation check for Write
- ASSERT (NOW - WR_chk3 >= tWR)
- REPORT "tWR violation during Precharge"
- SEVERITY WARNING;
- END IF;
-
- -- Pipeline for READ
- IF CAS_latency_15 = '1' THEN
- A10_precharge (3) := Addr(10);
- Bank_precharge (3) := Ba;
- Cmnd_precharge (3) := '1';
- ELSIF CAS_latency_2 = '1' THEN
- A10_precharge (4) := Addr(10);
- Bank_precharge (4) := Ba;
- Cmnd_precharge (4) := '1';
- ELSIF CAS_latency_25 = '1' THEN
- A10_precharge (5) := Addr(10);
- Bank_precharge (5) := Ba;
- Cmnd_precharge (5) := '1';
- ELSIF CAS_latency_3 = '1' THEN
- A10_precharge (6) := Addr(10);
- Bank_precharge (6) := Ba;
- Cmnd_precharge (6) := '1';
- ELSIF CAS_latency_4 = '1' THEN
- A10_precharge (8) := Addr(10);
- Bank_precharge (8) := Ba;
- Cmnd_precharge (8) := '1';
- END IF;
- END IF;
-
- -- Burst Terminate
- IF Burst_term = '1' THEN
- -- Pipeline for Read
- IF CAS_latency_15 = '1' THEN
- Cmnd_bst (3) := '1';
- ELSIF CAS_latency_2 = '1' THEN
- Cmnd_bst (4) := '1';
- ELSIF CAS_latency_25 = '1' THEN
- Cmnd_bst (5) := '1';
- ELSIF CAS_latency_3 = '1' THEN
- Cmnd_bst (6) := '1';
- ELSIF CAS_latency_4 = '1' THEN
- Cmnd_bst (8) := '1';
- END IF;
-
- -- Terminate Write
- ASSERT (Data_in_enable = '0')
- REPORT "It's illegal to Burst Terminate a Write"
- SEVERITY WARNING;
-
- -- Terminate Read with Auto Precharge
- ASSERT (Read_precharge (0) = '0' AND Read_precharge (1) = '0' AND
- Read_precharge (2) = '0' AND Read_precharge (3) = '0')
- REPORT "It's illegal to Burst Terminate a Read with Auto Precharge"
- SEVERITY WARNING;
- END IF;
-
- -- Read Command
- IF Read_enable = '1' THEN
- -- CAS Latency Pipeline
- IF Cas_latency_15 = '1' THEN
- Read_cmnd (3) := '1';
- Read_bank (3) := Ba;
- Read_cols (3) := Addr (8 DOWNTO 0);
- ELSIF Cas_latency_2 = '1' THEN
- Read_cmnd (4) := '1';
- Read_bank (4) := Ba;
- Read_cols (4) := Addr (8 DOWNTO 0);
- ELSIF Cas_latency_25 = '1' THEN
- Read_cmnd (5) := '1';
- Read_bank (5) := Ba;
- Read_cols (5) := Addr (8 DOWNTO 0);
- ELSIF Cas_latency_3 = '1' THEN
- Read_cmnd (6) := '1';
- Read_bank (6) := Ba;
- Read_cols (6) := Addr (8 DOWNTO 0);
- ELSIF Cas_latency_4 = '1' THEN
- Read_cmnd (8) := '1';
- Read_bank (8) := Ba;
- Read_cols (8) := Addr (8 DOWNTO 0);
- END IF;
-
- -- Write to Read: Terminate Write Immediately
- IF Data_in_enable = '1' THEN
- Data_in_enable := '0';
- END IF;
-
- -- Interrupting a Read with Auto Precharge (same bank only)
- ASSERT (Read_precharge(CONV_INTEGER(Ba)) = '0')
- REPORT "It's illegal to interrupt a Read with Auto Precharge"
- SEVERITY WARNING;
-
- -- Activate to Read
- ASSERT ((Ba = "00" AND Act_b0 = '1') OR
- (Ba = "01" AND Act_b1 = '1') OR
- (Ba = "10" AND Act_b2 = '1') OR
- (Ba = "11" AND Act_b3 = '1'))
- REPORT "Bank is not Activated for Read"
- SEVERITY WARNING;
-
- -- Activate to Read without Auto Precharge
- IF Addr (10) = '0' THEN
- ASSERT ((Ba = "00" AND NOW - RCD_chk0 >= tRCD) OR
- (Ba = "01" AND NOW - RCD_chk1 >= tRCD) OR
- (Ba = "10" AND NOW - RCD_chk2 >= tRCD) OR
- (Ba = "11" AND NOW - RCD_chk3 >= tRCD))
- REPORT "tRCD violation during Read"
- SEVERITY WARNING;
- END IF;
-
- -- Activate to Read with Auto Precharge
- IF Addr (10) = '1' THEN
- ASSERT ((Ba = "00" AND NOW - RAP_chk0 >= tRAP) OR
- (Ba = "01" AND NOW - RAP_chk1 >= tRAP) OR
- (Ba = "10" AND NOW - RAP_chk2 >= tRAP) OR
- (Ba = "11" AND NOW - RAP_chk3 >= tRAP))
- REPORT "tRAP violation during Read"
- SEVERITY WARNING;
- END IF;
-
- -- Auto precharge
- IF Addr (10) = '1' THEN
- Read_precharge (Conv_INTEGER(Ba)) := '1';
- Count_precharge (Conv_INTEGER(Ba)) := 0;
- END IF;
-
- -- DLL Check
- IF (DLL_reset = '1') THEN
- ASSERT (DLL_done = '1')
- REPORT "DLL RESET not complete"
- SEVERITY WARNING;
- END IF;
- END IF;
-
- -- Write Command
- IF Write_enable = '1' THEN
- -- Pipeline for Write
- Write_cmnd (2) := '1';
- Write_bank (2) := Ba;
- Write_cols (2) := Addr (8 DOWNTO 0);
-
- -- Interrupting a Write with Auto Precharge (same bank only)
- ASSERT (Write_precharge(CONV_INTEGER(Ba)) = '0')
- REPORT "It's illegal to interrupt a Write with Auto Precharge"
- SEVERITY WARNING;
-
- -- Activate to Write
- ASSERT ((Ba = "00" AND Act_b0 = '1') OR
- (Ba = "01" AND Act_b1 = '1') OR
- (Ba = "10" AND Act_b2 = '1') OR
- (Ba = "11" AND Act_b3 = '1'))
- REPORT "Bank is not Activated for Write"
- SEVERITY WARNING;
-
- -- Activate to Write
- ASSERT ((Ba = "00" AND NOW - RCD_chk0 >= tRCD) OR
- (Ba = "01" AND NOW - RCD_chk1 >= tRCD) OR
- (Ba = "10" AND NOW - RCD_chk2 >= tRCD) OR
- (Ba = "11" AND NOW - RCD_chk3 >= tRCD))
- REPORT "tRCD violation during Write"
- SEVERITY WARNING;
-
- -- Auto precharge
- IF Addr (10) = '1' THEN
- Write_precharge (Conv_INTEGER(Ba)) := '1';
- Count_precharge (Conv_INTEGER(Ba)) := 0;
- END IF;
- END IF;
- END IF;
- END PROCESS;
-
- --
- -- Dqs Receiver
- --
- dqs_rcvrs : PROCESS
- VARIABLE Dm_temp : STD_LOGIC_VECTOR (1 DOWNTO 0);
- VARIABLE Dq_temp : STD_LOGIC_VECTOR (data_bits - 1 DOWNTO 0);
- BEGIN
- WAIT ON Dqs;
- -- Latch data at posedge Dqs
- IF Dqs'EVENT AND Dqs (1) = '1' AND Dqs (0) = '1' THEN
- Dq_temp := Dq;
- Dm_temp := Dm;
- END IF;
- -- Latch data at negedge Dqs
- IF Dqs'EVENT AND Dqs (1) = '0' AND Dqs (0) = '0' THEN
- Dq_pair <= (Dq & Dq_temp);
- Dm_pair <= (Dm & Dm_temp);
- END IF;
- END PROCESS;
-
- --
- -- Setup timing checks
- --
- Setup_check : PROCESS
- BEGIN
- WAIT ON Sys_clk;
- IF Sys_clk'EVENT AND Sys_clk = '1' THEN
- ASSERT(Cke'LAST_EVENT >= tIS)
- REPORT "CKE Setup time violation -- tIS"
- SEVERITY WARNING;
- ASSERT(Cs_n'LAST_EVENT >= tIS)
- REPORT "CS# Setup time violation -- tIS"
- SEVERITY WARNING;
- ASSERT(Cas_n'LAST_EVENT >= tIS)
- REPORT "CAS# Setup time violation -- tIS"
- SEVERITY WARNING;
- ASSERT(Ras_n'LAST_EVENT >= tIS)
- REPORT "RAS# Setup time violation -- tIS"
- SEVERITY WARNING;
- ASSERT(We_n'LAST_EVENT >= tIS)
- REPORT "WE# Setup time violation -- tIS"
- SEVERITY WARNING;
- ASSERT(Addr'LAST_EVENT >= tIS)
- REPORT "ADDR Setup time violation -- tIS"
- SEVERITY WARNING;
- ASSERT(Ba'LAST_EVENT >= tIS)
- REPORT "BA Setup time violation -- tIS"
- SEVERITY WARNING;
- END IF;
- END PROCESS;
-
- --
- -- Hold timing checks
- --
- Hold_check : PROCESS
- BEGIN
- WAIT ON Sys_clk'DELAYED (tIH);
- IF Sys_clk'DELAYED (tIH) = '1' THEN
- ASSERT(Cke'LAST_EVENT >= tIH)
- REPORT "CKE Hold time violation -- tIH"
- SEVERITY WARNING;
- ASSERT(Cs_n'LAST_EVENT >= tIH)
- REPORT "CS# Hold time violation -- tIH"
- SEVERITY WARNING;
- ASSERT(Cas_n'LAST_EVENT >= tIH)
- REPORT "CAS# Hold time violation -- tIH"
- SEVERITY WARNING;
- ASSERT(Ras_n'LAST_EVENT >= tIH)
- REPORT "RAS# Hold time violation -- tIH"
- SEVERITY WARNING;
- ASSERT(We_n'LAST_EVENT >= tIH)
- REPORT "WE# Hold time violation -- tIH"
- SEVERITY WARNING;
- ASSERT(Addr'LAST_EVENT >= tIH)
- REPORT "ADDR Hold time violation -- tIH"
- SEVERITY WARNING;
- ASSERT(Ba'LAST_EVENT >= tIH)
- REPORT "BA Hold time violation -- tIH"
- SEVERITY WARNING;
- END IF;
- END PROCESS;
-
-END behave;
+-----------------------------------------------------------------------------------------
+--
+-- File Name: MT46V16M16.VHD
+-- Version: 2.1
+-- Date: January 14th, 2002
+-- Model: Behavioral
+-- Simulator: NCDesktop - http://www.cadence.com
+-- ModelSim PE - http://www.model.com
+--
+-- Dependencies: None
+--
+-- Author: Son P. Huynh
+-- Email: sphuynh@micron.com
+-- Phone: (208) 368-3825
+-- Company: Micron Technology, Inc.
+-- Part Number: MT46V16M16 (4 Mb x 16 x 4 Banks)
+--
+-- Description: Micron 256 Mb SDRAM DDR (Double Data Rate)
+--
+-- Limitation: Doesn't model internal refresh counter
+--
+-- Note:
+--
+-- Disclaimer: THESE DESIGNS ARE PROVIDED "AS IS" WITH NO WARRANTY
+-- WHATSOEVER AND MICRON SPECIFICALLY DISCLAIMS ANY
+-- IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR
+-- A PARTICULAR PURPOSE, OR AGAINST INFRINGEMENT.
+--
+-- Copyright (c) 1998 Micron Semiconductor Products, Inc.
+-- All rights researved
+--
+-- Rev Author Date Changes
+-- --- ---------------------------- ---------- -------------------------------------
+-- 2.1 Son P. Huynh 01/14/2002 - Fix Burst_counter
+-- Micron Technology, Inc.
+--
+-- 2.0 Son P. Huynh 11/08/2001 - Second release
+-- Micron Technology, Inc. - Rewrote and remove SHARED VARIABLE
+--
+-----------------------------------------------------------------------------------------
+
+LIBRARY IEEE;
+ USE IEEE.STD_LOGIC_1164.ALL;
+ USE IEEE.STD_LOGIC_UNSIGNED.ALL;
+ USE IEEE.STD_LOGIC_ARITH.ALL;
+
+ENTITY MT46V16M16 IS
+ GENERIC ( -- Timing for -75Z CL2
+ tCK : TIME := 7.500 ns;
+ tCH : TIME := 3.375 ns; -- 0.45*tCK
+ tCL : TIME := 3.375 ns; -- 0.45*tCK
+ tDH : TIME := 0.500 ns;
+ tDS : TIME := 0.500 ns;
+ tIH : TIME := 0.900 ns;
+ tIS : TIME := 0.900 ns;
+ tMRD : TIME := 15.000 ns;
+ tRAS : TIME := 40.000 ns;
+ tRAP : TIME := 20.000 ns;
+ tRC : TIME := 65.000 ns;
+ tRFC : TIME := 75.000 ns;
+ tRCD : TIME := 20.000 ns;
+ tRP : TIME := 20.000 ns;
+ tRRD : TIME := 15.000 ns;
+ tWR : TIME := 15.000 ns;
+ addr_bits : INTEGER := 13;
+ data_bits : INTEGER := 16;
+ cols_bits : INTEGER := 9
+ );
+ PORT (
+ Dq : INOUT STD_LOGIC_VECTOR (data_bits - 1 DOWNTO 0) := (OTHERS => 'Z');
+ Dqs : INOUT STD_LOGIC_VECTOR (1 DOWNTO 0) := "ZZ";
+ Addr : IN STD_LOGIC_VECTOR (addr_bits - 1 DOWNTO 0);
+ Ba : IN STD_LOGIC_VECTOR (1 DOWNTO 0);
+ Clk : IN STD_LOGIC;
+ Clk_n : IN STD_LOGIC;
+ Cke : IN STD_LOGIC;
+ Cs_n : IN STD_LOGIC;
+ Ras_n : IN STD_LOGIC;
+ Cas_n : IN STD_LOGIC;
+ We_n : IN STD_LOGIC;
+ Dm : IN STD_LOGIC_VECTOR (1 DOWNTO 0)
+ );
+END MT46V16M16;
+
+ARCHITECTURE behave OF MT46V16M16 IS
+ -- Array for Read pipeline
+ TYPE Array_Read_cmnd IS ARRAY (8 DOWNTO 0) OF STD_LOGIC;
+ TYPE Array_Read_bank IS ARRAY (8 DOWNTO 0) OF STD_LOGIC_VECTOR (1 DOWNTO 0);
+ TYPE Array_Read_cols IS ARRAY (8 DOWNTO 0) OF STD_LOGIC_VECTOR (cols_bits - 1 DOWNTO 0);
+
+ -- Array for Write pipeline
+ TYPE Array_Write_cmnd IS ARRAY (2 DOWNTO 0) OF STD_LOGIC;
+ TYPE Array_Write_bank IS ARRAY (2 DOWNTO 0) OF STD_LOGIC_VECTOR (1 DOWNTO 0);
+ TYPE Array_Write_cols IS ARRAY (2 DOWNTO 0) OF STD_LOGIC_VECTOR (cols_bits - 1 DOWNTO 0);
+
+ -- Array for Auto Precharge
+ TYPE Array_Read_precharge IS ARRAY (3 DOWNTO 0) OF STD_LOGIC;
+ TYPE Array_Write_precharge IS ARRAY (3 DOWNTO 0) OF STD_LOGIC;
+ TYPE Array_Count_precharge IS ARRAY (3 DOWNTO 0) OF INTEGER;
+
+ -- Array for Manual Precharge
+ TYPE Array_A10_precharge IS ARRAY (8 DOWNTO 0) OF STD_LOGIC;
+ TYPE Array_Bank_precharge IS ARRAY (8 DOWNTO 0) OF STD_LOGIC_VECTOR (1 DOWNTO 0);
+ TYPE Array_Cmnd_precharge IS ARRAY (8 DOWNTO 0) OF STD_LOGIC;
+
+ -- Array for Burst Terminate
+ TYPE Array_Cmnd_bst IS ARRAY (8 DOWNTO 0) OF STD_LOGIC;
+
+ -- Array for Memory Access
+ TYPE Array_ram_type IS ARRAY (2**cols_bits - 1 DOWNTO 0) OF STD_LOGIC_VECTOR (data_bits - 1 DOWNTO 0);
+ TYPE Array_ram_pntr IS ACCESS Array_ram_type;
+ TYPE Array_ram_stor IS ARRAY (2**addr_bits - 1 DOWNTO 0) OF Array_ram_pntr;
+
+ -- Data pair
+ SIGNAL Dq_pair : STD_LOGIC_VECTOR (2 * data_bits - 1 DOWNTO 0);
+ SIGNAL Dm_pair : STD_LOGIC_VECTOR (3 DOWNTO 0);
+
+ -- Mode Register
+ SIGNAL Mode_reg : STD_LOGIC_VECTOR (addr_bits - 1 DOWNTO 0) := (OTHERS => '0');
+
+ -- Command Decode Variables
+ SIGNAL Active_enable, Aref_enable, Burst_term, Ext_mode_enable : STD_LOGIC := '0';
+ SIGNAL Mode_reg_enable, Prech_enable, Read_enable, Write_enable : STD_LOGIC := '0';
+
+ -- Burst Length Decode Variables
+ SIGNAL Burst_length_2, Burst_length_4, Burst_length_8, Burst_length_f : STD_LOGIC := '0';
+
+ -- Cas Latency Decode Variables
+ SIGNAL Cas_latency_15, Cas_latency_2, Cas_latency_25, Cas_latency_3, Cas_latency_4 : STD_LOGIC := '0';
+
+ -- Internal Control Signals
+ SIGNAL Cs_in, Ras_in, Cas_in, We_in : STD_LOGIC := '0';
+
+ -- System Clock
+ SIGNAL Sys_clk : STD_LOGIC := '0';
+
+ -- Dqs buffer
+ SIGNAL Dqs_out : STD_LOGIC_VECTOR (1 DOWNTO 0) := "ZZ";
+
+BEGIN
+ -- Strip the strength
+ Cs_in <= To_X01 (Cs_n);
+ Ras_in <= To_X01 (Ras_n);
+ Cas_in <= To_X01 (Cas_n);
+ We_in <= To_X01 (We_n);
+
+ -- Commands Decode
+ Active_enable <= NOT(Cs_in) AND NOT(Ras_in) AND Cas_in AND We_in;
+ Aref_enable <= NOT(Cs_in) AND NOT(Ras_in) AND NOT(Cas_in) AND We_in;
+ Burst_term <= NOT(Cs_in) AND Ras_in AND Cas_in AND NOT(We_in);
+ Ext_mode_enable <= NOT(Cs_in) AND NOT(Ras_in) AND NOT(Cas_in) AND NOT(We_in) AND Ba(0) AND NOT(Ba(1));
+ Mode_reg_enable <= NOT(Cs_in) AND NOT(Ras_in) AND NOT(Cas_in) AND NOT(We_in) AND NOT(Ba(0)) AND NOT(Ba(1));
+ Prech_enable <= NOT(Cs_in) AND NOT(Ras_in) AND Cas_in AND NOT(We_in);
+ Read_enable <= NOT(Cs_in) AND Ras_in AND NOT(Cas_in) AND We_in;
+ Write_enable <= NOT(Cs_in) AND Ras_in AND NOT(Cas_in) AND NOT(We_in);
+
+ -- Burst Length Decode
+ Burst_length_2 <= NOT(Mode_reg(2)) AND NOT(Mode_reg(1)) AND Mode_reg(0);
+ Burst_length_4 <= NOT(Mode_reg(2)) AND Mode_reg(1) AND NOT(Mode_reg(0));
+ Burst_length_8 <= NOT(Mode_reg(2)) AND Mode_reg(1) AND Mode_reg(0);
+ Burst_length_f <= (Mode_reg(2)) AND Mode_reg(1) AND Mode_reg(0);
+
+ -- CAS Latency Decode
+ Cas_latency_15 <= Mode_reg(6) AND NOT(Mode_reg(5)) AND (Mode_reg(4));
+ Cas_latency_2 <= NOT(Mode_reg(6)) AND Mode_reg(5) AND NOT(Mode_reg(4));
+ Cas_latency_25 <= Mode_reg(6) AND Mode_reg(5) AND NOT(Mode_reg(4));
+ Cas_latency_3 <= NOT(Mode_reg(6)) AND Mode_reg(5) AND Mode_reg(4);
+ Cas_latency_4 <= (Mode_reg(6)) AND NOT(Mode_reg(5)) AND NOT(Mode_reg(4));
+
+ -- Dqs buffer
+ Dqs <= Dqs_out;
+
+ --
+ -- System Clock
+ --
+ int_clk : PROCESS (Clk, Clk_n)
+ VARIABLE ClkZ, CkeZ : STD_LOGIC := '0';
+ begin
+ IF Clk = '1' AND Clk_n = '0' THEN
+ ClkZ := '1';
+ CkeZ := Cke;
+ ELSIF Clk = '0' AND Clk_n = '1' THEN
+ ClkZ := '0';
+ END IF;
+ Sys_clk <= CkeZ AND ClkZ;
+ END PROCESS;
+
+ --
+ -- Main Process
+ --
+ state_register : PROCESS
+ -- Precharge Variables
+ VARIABLE Pc_b0, Pc_b1, Pc_b2, Pc_b3 : STD_LOGIC := '0';
+
+ -- Activate Variables
+ VARIABLE Act_b0, Act_b1, Act_b2, Act_b3 : STD_LOGIC := '1';
+
+ -- Data IO variables
+ VARIABLE Data_in_enable, Data_out_enable : STD_LOGIC := '0';
+
+ -- Internal address mux variables
+ VARIABLE Cols_brst : STD_LOGIC_VECTOR (2 DOWNTO 0);
+ VARIABLE Prev_bank : STD_LOGIC_VECTOR (1 DOWNTO 0) := "00";
+ VARIABLE Bank_addr : STD_LOGIC_VECTOR (1 DOWNTO 0) := "00";
+ VARIABLE Cols_addr : STD_LOGIC_VECTOR (cols_bits - 1 DOWNTO 0);
+ VARIABLE Rows_addr : STD_LOGIC_VECTOR (addr_bits - 1 DOWNTO 0);
+ VARIABLE B0_row_addr : STD_LOGIC_VECTOR (addr_bits - 1 DOWNTO 0);
+ VARIABLE B1_row_addr : STD_LOGIC_VECTOR (addr_bits - 1 DOWNTO 0);
+ VARIABLE B2_row_addr : STD_LOGIC_VECTOR (addr_bits - 1 DOWNTO 0);
+ VARIABLE B3_row_addr : STD_LOGIC_VECTOR (addr_bits - 1 DOWNTO 0);
+
+ -- DLL Reset variables
+ VARIABLE DLL_enable : STD_LOGIC := '0';
+ VARIABLE DLL_reset : STD_LOGIC := '0';
+ VARIABLE DLL_done : STD_LOGIC := '0';
+ VARIABLE DLL_count : INTEGER := 0;
+
+ -- Timing Check
+ VARIABLE MRD_chk : TIME := 0 ns;
+ VARIABLE RFC_chk : TIME := 0 ns;
+ VARIABLE RRD_chk : TIME := 0 ns;
+ VARIABLE RAS_chk0, RAS_chk1, RAS_chk2, RAS_chk3 : TIME := 0 ns;
+ VARIABLE RAP_chk0, RAP_chk1, RAP_chk2, RAP_chk3 : TIME := 0 ns;
+ VARIABLE RC_chk0, RC_chk1, RC_chk2, RC_chk3 : TIME := 0 ns;
+ VARIABLE RCD_chk0, RCD_chk1, RCD_chk2, RCD_chk3 : TIME := 0 ns;
+ VARIABLE RP_chk0, RP_chk1, RP_chk2, RP_chk3 : TIME := 0 ns;
+ VARIABLE WR_chk0, WR_chk1, WR_chk2, WR_chk3 : TIME := 0 ns;
+
+ -- Read pipeline variables
+ VARIABLE Read_cmnd : Array_Read_cmnd;
+ VARIABLE Read_bank : Array_Read_bank;
+ VARIABLE Read_cols : Array_Read_cols;
+
+ -- Write pipeline variables
+ VARIABLE Write_cmnd : Array_Write_cmnd;
+ VARIABLE Write_bank : Array_Write_bank;
+ VARIABLE Write_cols : Array_Write_cols;
+
+ -- Auto Precharge variables
+ VARIABLE Read_precharge : Array_Read_precharge := ('0' & '0' & '0' & '0');
+ VARIABLE Write_precharge : Array_Write_precharge := ('0' & '0' & '0' & '0');
+ VARIABLE Count_precharge : Array_Count_precharge := ( 0 & 0 & 0 & 0 );
+
+ -- Manual Precharge variables
+ VARIABLE A10_precharge : Array_A10_precharge;
+ VARIABLE Bank_precharge : Array_Bank_precharge;
+ VARIABLE Cmnd_precharge : Array_Cmnd_precharge;
+
+ -- Burst Terminate variable
+ VARIABLE Cmnd_bst : Array_Cmnd_bst;
+
+ -- Memory Banks
+ VARIABLE Bank0 : Array_ram_stor;
+ VARIABLE Bank1 : Array_ram_stor;
+ VARIABLE Bank2 : Array_ram_stor;
+ VARIABLE Bank3 : Array_ram_stor;
+
+ -- Burst Counter
+ VARIABLE Burst_counter : STD_LOGIC_VECTOR (cols_bits - 1 DOWNTO 0);
+
+ -- Internal Dqs initialize
+ VARIABLE Dqs_int : STD_LOGIC := '0';
+
+ -- Data buffer for DM Mask
+ VARIABLE Data_buf : STD_LOGIC_VECTOR (data_bits - 1 DOWNTO 0) := (OTHERS => 'Z');
+
+ --
+ -- Initialize empty rows
+ --
+ PROCEDURE Init_mem (Bank : STD_LOGIC_VECTOR; Row_index : INTEGER) IS
+ VARIABLE i, j : INTEGER := 0;
+ BEGIN
+ IF Bank = "00" THEN
+ IF Bank0 (Row_index) = NULL THEN -- Check to see if row empty
+ Bank0 (Row_index) := NEW Array_ram_type; -- Open new row for access
+ FOR i IN (2**cols_bits - 1) DOWNTO 0 LOOP -- Filled row with zeros
+ FOR j IN (data_bits - 1) DOWNTO 0 LOOP
+ Bank0 (Row_index) (i) (j) := '0';
+ END LOOP;
+ END LOOP;
+ END IF;
+ ELSIF Bank = "01" THEN
+ IF Bank1 (Row_index) = NULL THEN
+ Bank1 (Row_index) := NEW Array_ram_type;
+ FOR i IN (2**cols_bits - 1) DOWNTO 0 LOOP
+ FOR j IN (data_bits - 1) DOWNTO 0 LOOP
+ Bank1 (Row_index) (i) (j) := '0';
+ END LOOP;
+ END LOOP;
+ END IF;
+ ELSIF Bank = "10" THEN
+ IF Bank2 (Row_index) = NULL THEN
+ Bank2 (Row_index) := NEW Array_ram_type;
+ FOR i IN (2**cols_bits - 1) DOWNTO 0 LOOP
+ FOR j IN (data_bits - 1) DOWNTO 0 LOOP
+ Bank2 (Row_index) (i) (j) := '0';
+ END LOOP;
+ END LOOP;
+ END IF;
+ ELSIF Bank = "11" THEN
+ IF Bank3 (Row_index) = NULL THEN
+ Bank3 (Row_index) := NEW Array_ram_type;
+ FOR i IN (2**cols_bits - 1) DOWNTO 0 LOOP
+ FOR j IN (data_bits - 1) DOWNTO 0 LOOP
+ Bank3 (Row_index) (i) (j) := '0';
+ END LOOP;
+ END LOOP;
+ END IF;
+ END IF;
+ END;
+
+ --
+ -- Burst Counter
+ --
+ PROCEDURE Burst_decode IS
+ VARIABLE Cols_temp : STD_LOGIC_VECTOR (cols_bits - 1 DOWNTO 0) := (OTHERS => '0');
+ BEGIN
+ -- Advance burst counter
+ Burst_counter := Burst_counter + 1;
+
+ -- Burst Type
+ IF Mode_reg (3) = '0' THEN
+ Cols_temp := Cols_addr + 1;
+ ELSIF Mode_reg (3) = '1' THEN
+ Cols_temp (2) := Burst_counter (2) XOR Cols_brst (2);
+ Cols_temp (1) := Burst_counter (1) XOR Cols_brst (1);
+ Cols_temp (0) := Burst_counter (0) XOR Cols_brst (0);
+ END IF;
+
+ -- Burst Length
+ IF Burst_length_2 = '1' THEN
+ Cols_addr (0) := Cols_temp (0);
+ ELSIF Burst_length_4 = '1' THEN
+ Cols_addr (1 DOWNTO 0) := Cols_temp (1 DOWNTO 0);
+ ELSIF Burst_length_8 = '1' THEN
+ Cols_addr (2 DOWNTO 0) := Cols_temp (2 DOWNTO 0);
+ ELSE
+ Cols_addr := Cols_temp;
+ END IF;
+
+ -- Data counter
+ IF Burst_length_2 = '1' THEN
+ IF Burst_counter >= 2 THEN
+ IF Data_in_enable = '1' THEN
+ Data_in_enable := '0';
+ ELSIF Data_out_enable = '1' THEN
+ Data_out_enable := '0';
+ END IF;
+ END IF;
+ ELSIF Burst_length_4 = '1' THEN
+ IF Burst_counter >= 4 THEN
+ IF Data_in_enable = '1' THEN
+ Data_in_enable := '0';
+ ELSIF Data_out_enable = '1' THEN
+ Data_out_enable := '0';
+ END IF;
+ END IF;
+ ELSIF Burst_length_8 = '1' THEN
+ IF Burst_counter >= 8 THEN
+ IF Data_in_enable = '1' THEN
+ Data_in_enable := '0';
+ ELSIF Data_out_enable = '1' THEN
+ Data_out_enable := '0';
+ END IF;
+ END IF;
+ END IF;
+ END;
+
+ BEGIN
+ WAIT ON Sys_clk;
+
+ --
+ -- Manual Precharge Pipeline
+ --
+ IF ((Sys_clk'EVENT AND Sys_clk = '0') OR (Sys_clk'EVENT AND Sys_clk = '1')) THEN
+ -- A10 Precharge Pipeline
+ A10_precharge(0) := A10_precharge(1);
+ A10_precharge(1) := A10_precharge(2);
+ A10_precharge(2) := A10_precharge(3);
+ A10_precharge(3) := A10_precharge(4);
+ A10_precharge(4) := A10_precharge(5);
+ A10_precharge(5) := A10_precharge(6);
+ A10_precharge(6) := A10_precharge(7);
+ A10_precharge(7) := A10_precharge(8);
+ A10_precharge(8) := '0';
+
+ -- Bank Precharge Pipeline
+ Bank_precharge(0) := Bank_precharge(1);
+ Bank_precharge(1) := Bank_precharge(2);
+ Bank_precharge(2) := Bank_precharge(3);
+ Bank_precharge(3) := Bank_precharge(4);
+ Bank_precharge(4) := Bank_precharge(5);
+ Bank_precharge(5) := Bank_precharge(6);
+ Bank_precharge(6) := Bank_precharge(7);
+ Bank_precharge(7) := Bank_precharge(8);
+ Bank_precharge(8) := "00";
+
+ -- Command Precharge Pipeline
+ Cmnd_precharge(0) := Cmnd_precharge(1);
+ Cmnd_precharge(1) := Cmnd_precharge(2);
+ Cmnd_precharge(2) := Cmnd_precharge(3);
+ Cmnd_precharge(3) := Cmnd_precharge(4);
+ Cmnd_precharge(4) := Cmnd_precharge(5);
+ Cmnd_precharge(5) := Cmnd_precharge(6);
+ Cmnd_precharge(6) := Cmnd_precharge(7);
+ Cmnd_precharge(7) := Cmnd_precharge(8);
+ Cmnd_precharge(8) := '0';
+
+ -- Terminate Read if same bank or all banks
+ IF ((Cmnd_precharge (0) = '1') AND
+ (Bank_precharge (0) = Bank_addr OR A10_precharge (0) = '1') AND
+ (Data_out_enable = '1')) THEN
+ Data_out_enable := '0';
+ END IF;
+ END IF;
+
+ --
+ -- Burst Terminate Pipeline
+ --
+ IF ((Sys_clk'EVENT AND Sys_clk = '0') OR (Sys_clk'EVENT AND Sys_clk = '1')) THEN
+ -- Burst Terminate pipeline
+ Cmnd_bst (0) := Cmnd_bst (1);
+ Cmnd_bst (1) := Cmnd_bst (2);
+ Cmnd_bst (2) := Cmnd_bst (3);
+ Cmnd_bst (3) := Cmnd_bst (4);
+ Cmnd_bst (4) := Cmnd_bst (5);
+ Cmnd_bst (5) := Cmnd_bst (6);
+ Cmnd_bst (6) := Cmnd_bst (7);
+ Cmnd_bst (7) := Cmnd_bst (8);
+ Cmnd_bst (8) := '0';
+
+ -- Terminate current Read
+ IF ((Cmnd_bst (0) = '1') AND (Data_out_enable = '1')) THEN
+ Data_out_enable := '0';
+ END IF;
+ END IF;
+
+ --
+ -- Dq and Dqs Drivers
+ --
+ IF ((Sys_clk'EVENT AND Sys_clk = '0') OR (Sys_clk'EVENT AND Sys_clk = '1')) THEN
+ -- Read Command Pipeline
+ Read_cmnd (0) := Read_cmnd (1);
+ Read_cmnd (1) := Read_cmnd (2);
+ Read_cmnd (2) := Read_cmnd (3);
+ Read_cmnd (3) := Read_cmnd (4);
+ Read_cmnd (4) := Read_cmnd (5);
+ Read_cmnd (5) := Read_cmnd (6);
+ Read_cmnd (6) := Read_cmnd (7);
+ Read_cmnd (7) := Read_cmnd (8);
+ Read_cmnd (8) := '0';
+
+ -- Read Bank Pipeline
+ Read_bank (0) := Read_bank (1);
+ Read_bank (1) := Read_bank (2);
+ Read_bank (2) := Read_bank (3);
+ Read_bank (3) := Read_bank (4);
+ Read_bank (4) := Read_bank (5);
+ Read_bank (5) := Read_bank (6);
+ Read_bank (6) := Read_bank (7);
+ Read_bank (7) := Read_bank (8);
+ Read_bank (8) := "00";
+
+ -- Read Column Pipeline
+ Read_cols (0) := Read_cols (1);
+ Read_cols (1) := Read_cols (2);
+ Read_cols (2) := Read_cols (3);
+ Read_cols (3) := Read_cols (4);
+ Read_cols (4) := Read_cols (5);
+ Read_cols (5) := Read_cols (6);
+ Read_cols (6) := Read_cols (7);
+ Read_cols (7) := Read_cols (8);
+ Read_cols (8) := (OTHERS => '0');
+
+ -- Initialize Read command
+ IF Read_cmnd (0) = '1' THEN
+ Data_out_enable := '1';
+ Bank_addr := Read_bank (0);
+ Cols_addr := Read_cols (0);
+ Cols_brst := Cols_addr (2 DOWNTO 0);
+ Burst_counter := (OTHERS => '0');
+
+ -- Row address mux
+ CASE Bank_addr IS
+ WHEN "00" => Rows_addr := B0_row_addr;
+ WHEN "01" => Rows_addr := B1_row_addr;
+ WHEN "10" => Rows_addr := B2_row_addr;
+ WHEN OTHERS => Rows_addr := B3_row_addr;
+ END CASE;
+ END IF;
+
+ -- Toggle Dqs during Read command
+ IF Data_out_enable = '1' THEN
+ Dqs_int := '0';
+ IF Dqs_out = "00" THEN
+ Dqs_out <= "11";
+ ELSIF Dqs_out = "11" THEN
+ Dqs_out <= "00";
+ ELSE
+ Dqs_out <= "00";
+ END IF;
+ ELSIF Data_out_enable = '0' AND Dqs_int = '0' THEN
+ Dqs_out <= "ZZ";
+ END IF;
+
+ -- Initialize Dqs for Read command
+ IF Read_cmnd (2) = '1' THEN
+ IF Data_out_enable = '0' THEN
+ Dqs_int := '1';
+ Dqs_out <= "00";
+ END IF;
+ END IF;
+
+ -- Read Latch
+ IF Data_out_enable = '1' THEN
+ -- Initialize Memory
+ Init_mem (Bank_addr, CONV_INTEGER(Rows_addr));
+
+ -- Output Data
+ CASE Bank_addr IS
+ WHEN "00" => Dq <= Bank0 (CONV_INTEGER(Rows_addr)) (CONV_INTEGER(Cols_addr));
+ WHEN "01" => Dq <= Bank1 (CONV_INTEGER(Rows_addr)) (CONV_INTEGER(Cols_addr));
+ WHEN "10" => Dq <= Bank2 (CONV_INTEGER(Rows_addr)) (CONV_INTEGER(Cols_addr));
+ WHEN OTHERS => Dq <= Bank3 (CONV_INTEGER(Rows_addr)) (CONV_INTEGER(Cols_addr));
+ END CASE;
+
+ -- Increase Burst Counter
+ Burst_decode;
+ ELSE
+ Dq <= (OTHERS => 'Z');
+ END IF;
+ END IF;
+
+ --
+ -- Write FIFO and DM Mask Logic
+ --
+ IF Sys_clk'EVENT AND Sys_clk = '1' THEN
+ -- Write command pipeline
+ Write_cmnd (0) := Write_cmnd (1);
+ Write_cmnd (1) := Write_cmnd (2);
+ Write_cmnd (2) := '0';
+
+ -- Write command pipeline
+ Write_bank (0) := Write_bank (1);
+ Write_bank (1) := Write_bank (2);
+ Write_bank (2) := "00";
+
+ -- Write column pipeline
+ Write_cols (0) := Write_cols (1);
+ Write_cols (1) := Write_cols (2);
+ Write_cols (2) := (OTHERS => '0');
+
+ -- Initialize Write command
+ IF Write_cmnd (0) = '1' THEN
+ Data_in_enable := '1';
+ Bank_addr := Write_bank (0);
+ Cols_addr := Write_cols (0);
+ Cols_brst := Cols_addr (2 DOWNTO 0);
+ Burst_counter := (OTHERS => '0');
+
+ -- Row address mux
+ CASE Bank_addr IS
+ WHEN "00" => Rows_addr := B0_row_addr;
+ WHEN "01" => Rows_addr := B1_row_addr;
+ WHEN "10" => Rows_addr := B2_row_addr;
+ WHEN OTHERS => Rows_addr := B3_row_addr;
+ END CASE;
+ END IF;
+
+ -- Write data
+ IF Data_in_enable = '1' THEN
+ -- Initialize memory
+ Init_mem (Bank_addr, CONV_INTEGER(Rows_addr));
+
+ -- Write first data
+ IF Dm_pair (1) = '0' OR Dm_pair (0) = '0' THEN
+ -- Data Buffer
+ CASE Bank_addr IS
+ WHEN "00" => Data_buf := Bank0 (CONV_INTEGER(Rows_addr)) (CONV_INTEGER(Cols_addr));
+ WHEN "01" => Data_buf := Bank1 (CONV_INTEGER(Rows_addr)) (CONV_INTEGER(Cols_addr));
+ WHEN "10" => Data_buf := Bank2 (CONV_INTEGER(Rows_addr)) (CONV_INTEGER(Cols_addr));
+ WHEN OTHERS => Data_buf := Bank3 (CONV_INTEGER(Rows_addr)) (CONV_INTEGER(Cols_addr));
+ END CASE;
+
+ -- Perform DM Mask
+ IF Dm_pair (0) = '0' THEN
+ Data_buf ( 7 DOWNTO 0) := Dq_pair ( 7 DOWNTO 0);
+ END IF;
+ IF Dm_pair (1) = '0' THEN
+ Data_buf (15 DOWNTO 8) := Dq_pair (15 DOWNTO 8);
+ END IF;
+
+ -- Write Data
+ CASE Bank_addr IS
+ WHEN "00" => Bank0 (CONV_INTEGER(Rows_addr)) (CONV_INTEGER(Cols_addr)) := Data_buf;
+ WHEN "01" => Bank1 (CONV_INTEGER(Rows_addr)) (CONV_INTEGER(Cols_addr)) := Data_buf;
+ WHEN "10" => Bank2 (CONV_INTEGER(Rows_addr)) (CONV_INTEGER(Cols_addr)) := Data_buf;
+ WHEN OTHERS => Bank3 (CONV_INTEGER(Rows_addr)) (CONV_INTEGER(Cols_addr)) := Data_buf;
+ END CASE;
+ END IF;
+
+ -- Increase Burst Counter
+ Burst_decode;
+
+ -- Write second data
+ IF Dm_pair (3) = '0' OR Dm_pair (2) = '0' THEN
+ -- Data Buffer
+ CASE Bank_addr IS
+ WHEN "00" => Data_buf := Bank0 (CONV_INTEGER(Rows_addr)) (CONV_INTEGER(Cols_addr));
+ WHEN "01" => Data_buf := Bank1 (CONV_INTEGER(Rows_addr)) (CONV_INTEGER(Cols_addr));
+ WHEN "10" => Data_buf := Bank2 (CONV_INTEGER(Rows_addr)) (CONV_INTEGER(Cols_addr));
+ WHEN OTHERS => Data_buf := Bank3 (CONV_INTEGER(Rows_addr)) (CONV_INTEGER(Cols_addr));
+ END CASE;
+
+ -- Perform DM Mask
+ IF Dm_pair (2) = '0' THEN
+ Data_buf ( 7 DOWNTO 0) := Dq_pair (23 DOWNTO 16);
+ END IF;
+ IF Dm_pair (3) = '0' THEN
+ Data_buf (15 DOWNTO 8) := Dq_pair (31 DOWNTO 24);
+ END IF;
+
+ -- Write Data
+ CASE Bank_addr IS
+ WHEN "00" => Bank0 (CONV_INTEGER(Rows_addr)) (CONV_INTEGER(Cols_addr)) := Data_buf;
+ WHEN "01" => Bank1 (CONV_INTEGER(Rows_addr)) (CONV_INTEGER(Cols_addr)) := Data_buf;
+ WHEN "10" => Bank2 (CONV_INTEGER(Rows_addr)) (CONV_INTEGER(Cols_addr)) := Data_buf;
+ WHEN OTHERS => Bank3 (CONV_INTEGER(Rows_addr)) (CONV_INTEGER(Cols_addr)) := Data_buf;
+ END CASE;
+ END IF;
+
+ -- Increase Burst Counter
+ Burst_decode;
+
+ -- tWR start and tWTR check
+ IF Dm_pair (3 DOWNTO 2) = "00" OR Dm_pair (1 DOWNTO 0) = "00" THEN
+ CASE Bank_addr IS
+ WHEN "00" => WR_chk0 := NOW;
+ WHEN "01" => WR_chk1 := NOW;
+ WHEN "10" => WR_chk2 := NOW;
+ WHEN OTHERS => WR_chk3 := NOW;
+ END CASE;
+
+ -- tWTR check
+ ASSERT (Read_enable = '0')
+ REPORT "tWTR violation during Read"
+ SEVERITY WARNING;
+ END IF;
+ END IF;
+ END IF;
+
+ --
+ -- Auto Precharge Calculation
+ --
+ IF Sys_clk'EVENT AND Sys_clk = '1' THEN
+ -- Precharge counter
+ IF Read_precharge (0) = '1' OR Write_precharge (0) = '1' THEN
+ Count_precharge (0) := Count_precharge (0) + 1;
+ END IF;
+ IF Read_precharge (1) = '1' OR Write_precharge (1) = '1' THEN
+ Count_precharge (1) := Count_precharge (1) + 1;
+ END IF;
+ IF Read_precharge (2) = '1' OR Write_precharge (2) = '1' THEN
+ Count_precharge (2) := Count_precharge (2) + 1;
+ END IF;
+ IF Read_precharge (3) = '1' OR Write_precharge (3) = '1' THEN
+ Count_precharge (3) := Count_precharge (3) + 1;
+ END IF;
+
+ -- Read with AutoPrecharge Calculation
+ -- The device start internal precharge when:
+ -- 1. Meet tRAS requirement
+ -- 2. BL/2 cycles after command
+ IF ((Read_precharge(0) = '1') AND (NOW - RAS_chk0 >= tRAS)) THEN
+ IF ((Burst_length_2 = '1' AND Count_precharge(0) >= 1) OR
+ (Burst_length_4 = '1' AND Count_precharge(0) >= 2) OR
+ (Burst_length_8 = '1' AND Count_precharge(0) >= 4)) THEN
+ Pc_b0 := '1';
+ Act_b0 := '0';
+ RP_chk0 := NOW;
+ Read_precharge(0) := '0';
+ END IF;
+ END IF;
+ IF ((Read_precharge(1) = '1') AND (NOW - RAS_chk1 >= tRAS)) THEN
+ IF ((Burst_length_2 = '1' AND Count_precharge(1) >= 1) OR
+ (Burst_length_4 = '1' AND Count_precharge(1) >= 2) OR
+ (Burst_length_8 = '1' AND Count_precharge(1) >= 4)) THEN
+ Pc_b1 := '1';
+ Act_b1 := '0';
+ RP_chk1 := NOW;
+ Read_precharge(1) := '0';
+ END IF;
+ END IF;
+ IF ((Read_precharge(2) = '1') AND (NOW - RAS_chk2 >= tRAS)) THEN
+ IF ((Burst_length_2 = '1' AND Count_precharge(2) >= 1) OR
+ (Burst_length_4 = '1' AND Count_precharge(2) >= 2) OR
+ (Burst_length_8 = '1' AND Count_precharge(2) >= 4)) THEN
+ Pc_b2 := '1';
+ Act_b2 := '0';
+ RP_chk2 := NOW;
+ Read_precharge(2) := '0';
+ END IF;
+ END IF;
+ IF ((Read_precharge(3) = '1') AND (NOW - RAS_chk3 >= tRAS)) THEN
+ IF ((Burst_length_2 = '1' AND Count_precharge(3) >= 1) OR
+ (Burst_length_4 = '1' AND Count_precharge(3) >= 2) OR
+ (Burst_length_8 = '1' AND Count_precharge(3) >= 4)) THEN
+ Pc_b3 := '1';
+ Act_b3 := '0';
+ RP_chk3 := NOW;
+ Read_precharge(3) := '0';
+ END IF;
+ END IF;
+
+ -- Write with AutoPrecharge Calculation
+ -- The device start internal precharge when:
+ -- 1. Meet tRAS requirement
+ -- 2. Two clock after last burst
+ -- Since tWR is time base, the model will compensate tRP
+ IF ((Write_precharge(0) = '1') AND (NOW - RAS_chk0 >= tRAS)) THEN
+ IF ((Burst_length_2 = '1' AND Count_precharge (0) >= 4) OR
+ (Burst_length_4 = '1' AND Count_precharge (0) >= 5) OR
+ (Burst_length_8 = '1' AND Count_precharge (0) >= 7)) THEN
+ Pc_b0 := '1';
+ Act_b0 := '0';
+ RP_chk0 := NOW - ((2 * tCK) - tWR);
+ Write_precharge(0) := '0';
+ END IF;
+ END IF;
+ IF ((Write_precharge(1) = '1') AND (NOW - RAS_chk1 >= tRAS)) THEN
+ IF ((Burst_length_2 = '1' AND Count_precharge (1) >= 4) OR
+ (Burst_length_4 = '1' AND Count_precharge (1) >= 5) OR
+ (Burst_length_8 = '1' AND Count_precharge (1) >= 7)) THEN
+ Pc_b1 := '1';
+ Act_b1 := '0';
+ RP_chk1 := NOW - ((2 * tCK) - tWR);
+ Write_precharge(1) := '0';
+ END IF;
+ END IF;
+ IF ((Write_precharge(2) = '1') AND (NOW - RAS_chk2 >= tRAS)) THEN
+ IF ((Burst_length_2 = '1' AND Count_precharge (2) >= 4) OR
+ (Burst_length_4 = '1' AND Count_precharge (2) >= 5) OR
+ (Burst_length_8 = '1' AND Count_precharge (2) >= 7)) THEN
+ Pc_b2 := '1';
+ Act_b2 := '0';
+ RP_chk2 := NOW - ((2 * tCK) - tWR);
+ Write_precharge(2) := '0';
+ END IF;
+ END IF;
+ IF ((Write_precharge(3) = '1') AND (NOW - RAS_chk3 >= tRAS)) THEN
+ IF ((Burst_length_2 = '1' AND Count_precharge (3) >= 4) OR
+ (Burst_length_4 = '1' AND Count_precharge (3) >= 5) OR
+ (Burst_length_8 = '1' AND Count_precharge (3) >= 7)) THEN
+ Pc_b3 := '1';
+ Act_b3 := '0';
+ RP_chk3 := NOW - ((2 * tCK) - tWR);
+ Write_precharge(3) := '0';
+ END IF;
+ END IF;
+ END IF;
+
+ --
+ -- DLL Counter
+ --
+ IF Sys_clk'EVENT AND Sys_clk = '1' THEN
+ IF (DLL_Reset = '1' AND DLL_done = '0') THEN
+ DLL_count := DLL_count + 1;
+ IF (DLL_count >= 200) THEN
+ DLL_done := '1';
+ END IF;
+ END IF;
+ END IF;
+
+ --
+ -- Control Logic
+ --
+ IF Sys_clk'EVENT AND Sys_clk = '1' THEN
+ -- Auto Refresh
+ IF Aref_enable = '1' THEN
+ -- Auto Refresh to Auto Refresh
+ ASSERT (NOW - RFC_chk >= tRFC)
+ REPORT "tRFC violation during Auto Refresh"
+ SEVERITY WARNING;
+
+ -- Precharge to Auto Refresh
+ ASSERT ((NOW - RP_chk0 >= tRP) AND (NOW - RP_chk1 >= tRP) AND
+ (NOW - RP_chk2 >= tRP) AND (NOW - RP_chk3 >= tRP))
+ REPORT "tRP violation during Auto Refresh"
+ SEVERITY WARNING;
+
+ -- Precharge to Auto Refresh
+ ASSERT (Pc_b0 = '1' AND Pc_b1 = '1' AND Pc_b2 = '1' AND Pc_b3 = '1')
+ REPORT "All banks must be Precharge before Auto Refresh"
+ SEVERITY WARNING;
+
+ -- Record current tRFC time
+ RFC_chk := NOW;
+ END IF;
+
+ -- Extended Load Mode Register
+ IF Ext_mode_enable = '1' THEN
+ IF (Pc_b0 = '1' AND Pc_b1 = '1' AND Pc_b2 = '1' AND Pc_b3 = '1') THEN
+ IF (Addr (0) = '0') THEN
+ DLL_enable := '1';
+ ELSE
+ DLL_enable := '0';
+ END IF;
+ END IF;
+
+ -- Precharge to EMR
+ ASSERT (Pc_b0 = '1' AND Pc_b1 = '1' AND Pc_b2 = '1' AND Pc_b3 = '1')
+ REPORT "All bank must be Precharged before Extended Mode Register"
+ SEVERITY WARNING;
+
+ -- Precharge to EMR
+ ASSERT ((NOW - RP_chk0 >= tRP) AND (NOW - RP_chk1 >= tRP) AND
+ (NOW - RP_chk2 >= tRP) AND (NOW - RP_chk3 >= tRP))
+ REPORT "tRP violation during Extended Load Register"
+ SEVERITY WARNING;
+
+ -- LMR/EMR to EMR
+ ASSERT (NOW - MRD_chk >= tMRD)
+ REPORT "tMRD violation during Extended Mode Register"
+ SEVERITY WARNING;
+
+ -- Record current tMRD time
+ MRD_chk := NOW;
+ END IF;
+
+ -- Load Mode Register
+ IF Mode_reg_enable = '1' THEN
+ -- Register mode
+ Mode_reg <= Addr;
+
+ -- DLL Reset
+ IF (DLL_enable = '1' AND Addr (8) = '1') THEN
+ DLL_reset := '1';
+ DLL_done := '0';
+ DLL_count := 0;
+ ELSIF (DLL_enable = '1' AND DLL_reset = '0' AND Addr (8) = '0') THEN
+ ASSERT (FALSE)
+ REPORT "DLL is ENABLE: DLL RESET is require"
+ SEVERITY WARNING;
+ ELSIF (DLL_enable = '0' AND Addr (8) = '1') THEN
+ ASSERT (FALSE)
+ REPORT "DLL is DISABLE: DLL RESET will be ignored"
+ SEVERITY WARNING;
+ END IF;
+
+ -- Precharge to LMR
+ ASSERT (Pc_b0 = '1' AND Pc_b1 = '1' AND Pc_b2 = '1' AND Pc_b3 = '1')
+ REPORT "All bank must be Precharged before Load Mode Register"
+ SEVERITY WARNING;
+
+ -- Precharge to EMR
+ ASSERT ((NOW - RP_chk0 >= tRP) AND (NOW - RP_chk1 >= tRP) AND
+ (NOW - RP_chk2 >= tRP) AND (NOW - RP_chk3 >= tRP))
+ REPORT "tRP violation during Load Mode Register"
+ SEVERITY WARNING;
+
+ -- LMR/ELMR to LMR
+ ASSERT (NOW - MRD_chk >= tMRD)
+ REPORT "tMRD violation during Load Mode Register"
+ SEVERITY WARNING;
+
+ -- Check for invalid Burst Length
+ ASSERT ((Addr (2 DOWNTO 0) = "001") OR -- BL = 2
+ (Addr (2 DOWNTO 0) = "010") OR -- BL = 4
+ (Addr (2 DOWNTO 0) = "011")) -- BL = 8
+ REPORT "Invalid Burst Length during Load Mode Register"
+ SEVERITY WARNING;
+
+ -- Check for invalid CAS Latency
+ ASSERT ((Addr (6 DOWNTO 4) = "010") OR -- CL = 2.0
+ (Addr (6 DOWNTO 4) = "110")) -- CL = 2.5
+ REPORT "Invalid CAS Latency during Load Mode Register"
+ SEVERITY WARNING;
+
+ -- Record current tMRD time
+ MRD_chk := NOW;
+ END IF;
+
+ -- Active Block (latch Bank and Row Address)
+ IF Active_enable = '1' THEN
+ -- Activate an OPEN bank can corrupt data
+ ASSERT ((Ba = "00" AND Act_b0 = '0') OR
+ (Ba = "01" AND Act_b1 = '0') OR
+ (Ba = "10" AND Act_b2 = '0') OR
+ (Ba = "11" AND Act_b3 = '0'))
+ REPORT "Bank is already activated - data can be corrupted"
+ SEVERITY WARNING;
+
+ -- Activate Bank 0
+ IF Ba = "00" AND Pc_b0 = '1' THEN
+ -- Activate to Activate (same bank)
+ ASSERT (NOW - RC_chk0 >= tRC)
+ REPORT "tRC violation during Activate Bank 0"
+ SEVERITY WARNING;
+
+ -- Precharge to Active
+ ASSERT (NOW - RP_chk0 >= tRP)
+ REPORT "tRP violation during Activate Bank 0"
+ SEVERITY WARNING;
+
+ -- Record Variables for checking violation
+ Act_b0 := '1';
+ Pc_b0 := '0';
+ B0_row_addr := Addr;
+ RC_chk0 := NOW;
+ RCD_chk0 := NOW;
+ RAS_chk0 := NOW;
+ RAP_chk0 := NOW;
+ END IF;
+
+ -- Activate Bank 1
+ IF Ba = "01" AND Pc_b1 = '1' THEN
+ -- Activate to Activate (same bank)
+ ASSERT (NOW - RC_chk1 >= tRC)
+ REPORT "tRC violation during Activate Bank 1"
+ SEVERITY WARNING;
+
+ -- Precharge to Active
+ ASSERT (NOW - RP_chk1 >= tRP)
+ REPORT "tRP violation during Activate Bank 1"
+ SEVERITY WARNING;
+
+ -- Record Variables for checking violation
+ Act_b1 := '1';
+ Pc_b1 := '0';
+ B1_row_addr := Addr;
+ RC_chk1 := NOW;
+ RCD_chk1 := NOW;
+ RAS_chk1 := NOW;
+ RAP_chk1 := NOW;
+ END IF;
+
+ -- Activate Bank 2
+ IF Ba = "10" AND Pc_b2 = '1' THEN
+ -- Activate to Activate (same bank)
+ ASSERT (NOW - RC_chk2 >= tRC)
+ REPORT "tRC violation during Activate Bank 2"
+ SEVERITY WARNING;
+
+ -- Precharge to Active
+ ASSERT (NOW - RP_chk2 >= tRP)
+ REPORT "tRP violation during Activate Bank 2"
+ SEVERITY WARNING;
+
+ -- Record Variables for checking violation
+ Act_b2 := '1';
+ Pc_b2 := '0';
+ B2_row_addr := Addr;
+ RC_chk2 := NOW;
+ RCD_chk2 := NOW;
+ RAS_chk2 := NOW;
+ RAP_chk2 := NOW;
+ END IF;
+
+ -- Activate Bank 3
+ IF Ba = "11" AND Pc_b3 = '1' THEN
+ -- Activate to Activate (same bank)
+ ASSERT (NOW - RC_chk3 >= tRC)
+ REPORT "tRC violation during Activate Bank 3"
+ SEVERITY WARNING;
+
+ -- Precharge to Active
+ ASSERT (NOW - RP_chk3 >= tRP)
+ REPORT "tRP violation during Activate Bank 3"
+ SEVERITY WARNING;
+
+ -- Record Variables for checking violation
+ Act_b3 := '1';
+ Pc_b3 := '0';
+ B3_row_addr := Addr;
+ RC_chk3 := NOW;
+ RCD_chk3 := NOW;
+ RAS_chk3 := NOW;
+ RAP_chk3 := NOW;
+ END IF;
+
+ -- Activate Bank A to Activate Bank B
+ IF (Prev_bank /= Ba) THEN
+ ASSERT (NOW - RRD_chk >= tRRD)
+ REPORT "tRRD violation during Activate"
+ SEVERITY WARNING;
+ END IF;
+
+ -- AutoRefresh to Activate
+ ASSERT (NOW - RFC_chk >= tRFC)
+ REPORT "tRFC violation during Activate"
+ SEVERITY WARNING;
+
+ -- Record Variables for Checking Violation
+ RRD_chk := NOW;
+ Prev_bank := Ba;
+ END IF;
+
+ -- Precharge Block - Consider NOP if bank already precharged or in process of precharging
+ IF Prech_enable = '1' THEN
+ -- EMR or LMR to Precharge
+ ASSERT (NOW - MRD_chk >= tMRD)
+ REPORT "tMRD violation during Precharge"
+ SEVERITY WARNING;
+
+ -- Precharge Bank 0
+ IF ((Addr (10) = '1' OR (Addr (10) = '0' AND Ba = "00")) AND Act_b0 = '1') THEN
+ Act_b0 := '0';
+ Pc_b0 := '1';
+ RP_chk0 := NOW;
+
+ -- Activate to Precharge bank 0
+ ASSERT (NOW - RAS_chk0 >= tRAS)
+ REPORT "tRAS violation during Precharge"
+ SEVERITY WARNING;
+
+ -- tWR violation check for Write
+ ASSERT (NOW - WR_chk0 >= tWR)
+ REPORT "tWR violation during Precharge"
+ SEVERITY WARNING;
+ END IF;
+
+ -- Precharge Bank 1
+ IF ((Addr (10) = '1' OR (Addr (10) = '0' AND Ba = "01")) AND Act_b1 = '1') THEN
+ Act_b1 := '0';
+ Pc_b1 := '1';
+ RP_chk1 := NOW;
+
+ -- Activate to Precharge
+ ASSERT (NOW - RAS_chk1 >= tRAS)
+ REPORT "tRAS violation during Precharge"
+ SEVERITY WARNING;
+
+ -- tWR violation check for Write
+ ASSERT (NOW - WR_chk1 >= tWR)
+ REPORT "tWR violation during Precharge"
+ SEVERITY WARNING;
+ END IF;
+
+ -- Precharge Bank 2
+ IF ((Addr (10) = '1' OR (Addr (10) = '0' AND Ba = "10")) AND Act_b2 = '1') THEN
+ Act_b2 := '0';
+ Pc_b2 := '1';
+ RP_chk2 := NOW;
+
+ -- Activate to Precharge
+ ASSERT (NOW - RAS_chk2 >= tRAS)
+ REPORT "tRAS violation during Precharge"
+ SEVERITY WARNING;
+
+ -- tWR violation check for Write
+ ASSERT (NOW - WR_chk2 >= tWR)
+ REPORT "tWR violation during Precharge"
+ SEVERITY WARNING;
+ END IF;
+
+ -- Precharge Bank 3
+ IF ((Addr (10) = '1' OR (Addr (10) = '0' AND Ba = "11")) AND Act_b3 = '1') THEN
+ Act_b3 := '0';
+ Pc_b3 := '1';
+ RP_chk3 := NOW;
+
+ -- Activate to Precharge
+ ASSERT (NOW - RAS_chk3 >= tRAS)
+ REPORT "tRAS violation during Precharge"
+ SEVERITY WARNING;
+
+ -- tWR violation check for Write
+ ASSERT (NOW - WR_chk3 >= tWR)
+ REPORT "tWR violation during Precharge"
+ SEVERITY WARNING;
+ END IF;
+
+ -- Pipeline for READ
+ IF CAS_latency_15 = '1' THEN
+ A10_precharge (3) := Addr(10);
+ Bank_precharge (3) := Ba;
+ Cmnd_precharge (3) := '1';
+ ELSIF CAS_latency_2 = '1' THEN
+ A10_precharge (4) := Addr(10);
+ Bank_precharge (4) := Ba;
+ Cmnd_precharge (4) := '1';
+ ELSIF CAS_latency_25 = '1' THEN
+ A10_precharge (5) := Addr(10);
+ Bank_precharge (5) := Ba;
+ Cmnd_precharge (5) := '1';
+ ELSIF CAS_latency_3 = '1' THEN
+ A10_precharge (6) := Addr(10);
+ Bank_precharge (6) := Ba;
+ Cmnd_precharge (6) := '1';
+ ELSIF CAS_latency_4 = '1' THEN
+ A10_precharge (8) := Addr(10);
+ Bank_precharge (8) := Ba;
+ Cmnd_precharge (8) := '1';
+ END IF;
+ END IF;
+
+ -- Burst Terminate
+ IF Burst_term = '1' THEN
+ -- Pipeline for Read
+ IF CAS_latency_15 = '1' THEN
+ Cmnd_bst (3) := '1';
+ ELSIF CAS_latency_2 = '1' THEN
+ Cmnd_bst (4) := '1';
+ ELSIF CAS_latency_25 = '1' THEN
+ Cmnd_bst (5) := '1';
+ ELSIF CAS_latency_3 = '1' THEN
+ Cmnd_bst (6) := '1';
+ ELSIF CAS_latency_4 = '1' THEN
+ Cmnd_bst (8) := '1';
+ END IF;
+
+ -- Terminate Write
+ ASSERT (Data_in_enable = '0')
+ REPORT "It's illegal to Burst Terminate a Write"
+ SEVERITY WARNING;
+
+ -- Terminate Read with Auto Precharge
+ ASSERT (Read_precharge (0) = '0' AND Read_precharge (1) = '0' AND
+ Read_precharge (2) = '0' AND Read_precharge (3) = '0')
+ REPORT "It's illegal to Burst Terminate a Read with Auto Precharge"
+ SEVERITY WARNING;
+ END IF;
+
+ -- Read Command
+ IF Read_enable = '1' THEN
+ -- CAS Latency Pipeline
+ IF Cas_latency_15 = '1' THEN
+ Read_cmnd (3) := '1';
+ Read_bank (3) := Ba;
+ Read_cols (3) := Addr (8 DOWNTO 0);
+ ELSIF Cas_latency_2 = '1' THEN
+ Read_cmnd (4) := '1';
+ Read_bank (4) := Ba;
+ Read_cols (4) := Addr (8 DOWNTO 0);
+ ELSIF Cas_latency_25 = '1' THEN
+ Read_cmnd (5) := '1';
+ Read_bank (5) := Ba;
+ Read_cols (5) := Addr (8 DOWNTO 0);
+ ELSIF Cas_latency_3 = '1' THEN
+ Read_cmnd (6) := '1';
+ Read_bank (6) := Ba;
+ Read_cols (6) := Addr (8 DOWNTO 0);
+ ELSIF Cas_latency_4 = '1' THEN
+ Read_cmnd (8) := '1';
+ Read_bank (8) := Ba;
+ Read_cols (8) := Addr (8 DOWNTO 0);
+ END IF;
+
+ -- Write to Read: Terminate Write Immediately
+ IF Data_in_enable = '1' THEN
+ Data_in_enable := '0';
+ END IF;
+
+ -- Interrupting a Read with Auto Precharge (same bank only)
+ ASSERT (Read_precharge(CONV_INTEGER(Ba)) = '0')
+ REPORT "It's illegal to interrupt a Read with Auto Precharge"
+ SEVERITY WARNING;
+
+ -- Activate to Read
+ ASSERT ((Ba = "00" AND Act_b0 = '1') OR
+ (Ba = "01" AND Act_b1 = '1') OR
+ (Ba = "10" AND Act_b2 = '1') OR
+ (Ba = "11" AND Act_b3 = '1'))
+ REPORT "Bank is not Activated for Read"
+ SEVERITY WARNING;
+
+ -- Activate to Read without Auto Precharge
+ IF Addr (10) = '0' THEN
+ ASSERT ((Ba = "00" AND NOW - RCD_chk0 >= tRCD) OR
+ (Ba = "01" AND NOW - RCD_chk1 >= tRCD) OR
+ (Ba = "10" AND NOW - RCD_chk2 >= tRCD) OR
+ (Ba = "11" AND NOW - RCD_chk3 >= tRCD))
+ REPORT "tRCD violation during Read"
+ SEVERITY WARNING;
+ END IF;
+
+ -- Activate to Read with Auto Precharge
+ IF Addr (10) = '1' THEN
+ ASSERT ((Ba = "00" AND NOW - RAP_chk0 >= tRAP) OR
+ (Ba = "01" AND NOW - RAP_chk1 >= tRAP) OR
+ (Ba = "10" AND NOW - RAP_chk2 >= tRAP) OR
+ (Ba = "11" AND NOW - RAP_chk3 >= tRAP))
+ REPORT "tRAP violation during Read"
+ SEVERITY WARNING;
+ END IF;
+
+ -- Auto precharge
+ IF Addr (10) = '1' THEN
+ Read_precharge (Conv_INTEGER(Ba)) := '1';
+ Count_precharge (Conv_INTEGER(Ba)) := 0;
+ END IF;
+
+ -- DLL Check
+ IF (DLL_reset = '1') THEN
+ ASSERT (DLL_done = '1')
+ REPORT "DLL RESET not complete"
+ SEVERITY WARNING;
+ END IF;
+ END IF;
+
+ -- Write Command
+ IF Write_enable = '1' THEN
+ -- Pipeline for Write
+ Write_cmnd (2) := '1';
+ Write_bank (2) := Ba;
+ Write_cols (2) := Addr (8 DOWNTO 0);
+
+ -- Interrupting a Write with Auto Precharge (same bank only)
+ ASSERT (Write_precharge(CONV_INTEGER(Ba)) = '0')
+ REPORT "It's illegal to interrupt a Write with Auto Precharge"
+ SEVERITY WARNING;
+
+ -- Activate to Write
+ ASSERT ((Ba = "00" AND Act_b0 = '1') OR
+ (Ba = "01" AND Act_b1 = '1') OR
+ (Ba = "10" AND Act_b2 = '1') OR
+ (Ba = "11" AND Act_b3 = '1'))
+ REPORT "Bank is not Activated for Write"
+ SEVERITY WARNING;
+
+ -- Activate to Write
+ ASSERT ((Ba = "00" AND NOW - RCD_chk0 >= tRCD) OR
+ (Ba = "01" AND NOW - RCD_chk1 >= tRCD) OR
+ (Ba = "10" AND NOW - RCD_chk2 >= tRCD) OR
+ (Ba = "11" AND NOW - RCD_chk3 >= tRCD))
+ REPORT "tRCD violation during Write"
+ SEVERITY WARNING;
+
+ -- Auto precharge
+ IF Addr (10) = '1' THEN
+ Write_precharge (Conv_INTEGER(Ba)) := '1';
+ Count_precharge (Conv_INTEGER(Ba)) := 0;
+ END IF;
+ END IF;
+ END IF;
+ END PROCESS;
+
+ --
+ -- Dqs Receiver
+ --
+ dqs_rcvrs : PROCESS
+ VARIABLE Dm_temp : STD_LOGIC_VECTOR (1 DOWNTO 0);
+ VARIABLE Dq_temp : STD_LOGIC_VECTOR (data_bits - 1 DOWNTO 0);
+ BEGIN
+ WAIT ON Dqs;
+ -- Latch data at posedge Dqs
+ IF Dqs'EVENT AND Dqs (1) = '1' AND Dqs (0) = '1' THEN
+ Dq_temp := Dq;
+ Dm_temp := Dm;
+ END IF;
+ -- Latch data at negedge Dqs
+ IF Dqs'EVENT AND Dqs (1) = '0' AND Dqs (0) = '0' THEN
+ Dq_pair <= (Dq & Dq_temp);
+ Dm_pair <= (Dm & Dm_temp);
+ END IF;
+ END PROCESS;
+
+ --
+ -- Setup timing checks
+ --
+ Setup_check : PROCESS
+ BEGIN
+ WAIT ON Sys_clk;
+ IF Sys_clk'EVENT AND Sys_clk = '1' THEN
+ ASSERT(Cke'LAST_EVENT >= tIS)
+ REPORT "CKE Setup time violation -- tIS"
+ SEVERITY WARNING;
+ ASSERT(Cs_n'LAST_EVENT >= tIS)
+ REPORT "CS# Setup time violation -- tIS"
+ SEVERITY WARNING;
+ ASSERT(Cas_n'LAST_EVENT >= tIS)
+ REPORT "CAS# Setup time violation -- tIS"
+ SEVERITY WARNING;
+ ASSERT(Ras_n'LAST_EVENT >= tIS)
+ REPORT "RAS# Setup time violation -- tIS"
+ SEVERITY WARNING;
+ ASSERT(We_n'LAST_EVENT >= tIS)
+ REPORT "WE# Setup time violation -- tIS"
+ SEVERITY WARNING;
+ ASSERT(Addr'LAST_EVENT >= tIS)
+ REPORT "ADDR Setup time violation -- tIS"
+ SEVERITY WARNING;
+ ASSERT(Ba'LAST_EVENT >= tIS)
+ REPORT "BA Setup time violation -- tIS"
+ SEVERITY WARNING;
+ END IF;
+ END PROCESS;
+
+ --
+ -- Hold timing checks
+ --
+ Hold_check : PROCESS
+ BEGIN
+ WAIT ON Sys_clk'DELAYED (tIH);
+ IF Sys_clk'DELAYED (tIH) = '1' THEN
+ ASSERT(Cke'LAST_EVENT >= tIH)
+ REPORT "CKE Hold time violation -- tIH"
+ SEVERITY WARNING;
+ ASSERT(Cs_n'LAST_EVENT >= tIH)
+ REPORT "CS# Hold time violation -- tIH"
+ SEVERITY WARNING;
+ ASSERT(Cas_n'LAST_EVENT >= tIH)
+ REPORT "CAS# Hold time violation -- tIH"
+ SEVERITY WARNING;
+ ASSERT(Ras_n'LAST_EVENT >= tIH)
+ REPORT "RAS# Hold time violation -- tIH"
+ SEVERITY WARNING;
+ ASSERT(We_n'LAST_EVENT >= tIH)
+ REPORT "WE# Hold time violation -- tIH"
+ SEVERITY WARNING;
+ ASSERT(Addr'LAST_EVENT >= tIH)
+ REPORT "ADDR Hold time violation -- tIH"
+ SEVERITY WARNING;
+ ASSERT(Ba'LAST_EVENT >= tIH)
+ REPORT "BA Hold time violation -- tIH"
+ SEVERITY WARNING;
+ END IF;
+ END PROCESS;
+
+END behave;
diff --git a/misc/wishbone/src/atomic32_access.vhd b/misc/wishbone/src/atomic32_access.vhd
index b062f98..9bc9825 100644
--- a/misc/wishbone/src/atomic32_access.vhd
+++ b/misc/wishbone/src/atomic32_access.vhd
@@ -1,132 +1,132 @@
-library IEEE;
-use IEEE.STD_LOGIC_1164.ALL;
-use IEEE.STD_LOGIC_UNSIGNED.ALL;
-
-library work;
---use work.phi_config.all;
-use work.wishbone_pkg.all;
-
-entity atomic32_access is
- port ( cpu_clk : in std_logic;
- areset : in std_logic;
-
- -- Wishbone from CPU interface
- wb_16_i : in wishbone_bus_in;
- wb_16_o : out wishbone_bus_out;
-
- -- Wishbone to FPGA registers and ethernet core
- wb_32_i : in wishbone_bus_out;
- wb_32_o : out wishbone_bus_in);
-end atomic32_access;
-
-architecture behave of atomic32_access is
-
-type eth_state_wr_type is (idle, lsb_msb, lsb, msb, write, ack, wait_st);
-signal eth_state_wr : eth_state_wr_type;
-type eth_state_rd_type is (idle, lsb_msb, lsb_read, lsb, wait_st2, msb);
-signal eth_state_rd : eth_state_rd_type;
-signal core_data : std_logic_vector(31 downto 0);
-signal core_addr : std_logic_vector(31 downto 0);
-
-begin
- process(cpu_clk, areset)
- begin
- if areset = '1' then
- eth_state_wr <= idle;
- eth_state_rd <= idle;
- wb_32_o.stb <= '0';
- wb_32_o.cyc <= '0';
- wb_16_o.ack <= '0';
- core_data <= (others => '0');
- core_addr <= (others => '0');
- elsif (rising_edge(cpu_clk)) then
-
- case eth_state_wr is --write cycle
- when idle =>
- if wb_16_i.cyc = '1' and wb_16_i.we = '1' then
- eth_state_wr <= lsb_msb;
- end if;
- when lsb_msb =>
- if wb_16_i.adr(1) = '0' then
- eth_state_wr <= lsb;
- end if;
- if wb_16_i.adr(1) = '1' then
- eth_state_wr <= msb;
- end if;
- when lsb =>
- core_data(15 downto 0) <= wb_16_i.dat(15 downto 0);
- wb_16_o.ack <= '1';
- eth_state_wr <= wait_st;
- when msb =>
- core_data(31 downto 16) <= wb_16_i.dat(31 downto 16);
- core_addr <= wb_16_i.adr(31 downto 2) & "00";
- eth_state_wr <= write;
- when write =>
- wb_32_o.dat <= core_data;
- wb_32_o.adr <= core_addr;
- wb_32_o.sel <= "1111";
- wb_32_o.we <= '1';
- wb_32_o.stb <= '1';
- wb_32_o.cyc <= '1';
- eth_state_wr <= ack;
- when ack =>
- if wb_32_i.ack = '1' then
- wb_16_o.ack <= '1';
- eth_state_wr <= wait_st;
- wb_32_o.stb <= '0';
- wb_32_o.cyc <= '0';
- wb_32_o.sel <= "0000";
- wb_32_o.we <= '0';
- end if;
- when wait_st =>
- wb_16_o.ack <= '0';
- eth_state_wr <= idle;
- when others =>
- eth_state_wr <= idle;
- end case;
-
- case eth_state_rd is --read cycle
- when idle =>
- if wb_16_i.cyc = '1' and wb_16_i.we = '0' then
- core_addr <= wb_16_i.adr(31 downto 2) & "00";
- eth_state_rd <= lsb_msb;
- end if;
- when lsb_msb =>
- if wb_16_i.adr(1) = '0' then
- wb_32_o.adr <= core_addr;
- eth_state_rd <= lsb_read;
- end if;
- if wb_16_i.adr(1) = '1' then
- wb_32_o.adr <= core_addr;
- eth_state_rd <= msb;
- end if;
- when lsb_read =>
- wb_32_o.sel <= "1111";
- wb_32_o.we <= '0';
- wb_32_o.stb <= '1';
- wb_32_o.cyc <= '1';
- eth_state_rd <= lsb;
- when lsb =>
- if wb_32_i.ack = '1' then
- wb_32_o.sel <= "0000";
- wb_32_o.stb <= '0';
- wb_32_o.cyc <= '0';
- core_data <= wb_32_i.dat;
- wb_16_o.dat <= x"0000" & wb_32_i.dat(15 downto 0);
- wb_16_o.ack <= '1';
- eth_state_rd <= wait_st2;
- end if;
- when wait_st2 =>
- wb_16_o.ack <= '0';
- eth_state_rd <= idle;
- when msb =>
- wb_16_o.ack <= '1';
- wb_16_o.dat <= core_data(31 downto 16) & x"0000";
- eth_state_rd <= wait_st2;
- when others =>
- eth_state_rd <= idle;
- end case;
- end if;
- end process;
-
+library IEEE;
+use IEEE.STD_LOGIC_1164.ALL;
+use IEEE.STD_LOGIC_UNSIGNED.ALL;
+
+library work;
+--use work.phi_config.all;
+use work.wishbone_pkg.all;
+
+entity atomic32_access is
+ port ( cpu_clk : in std_logic;
+ areset : in std_logic;
+
+ -- Wishbone from CPU interface
+ wb_16_i : in wishbone_bus_in;
+ wb_16_o : out wishbone_bus_out;
+
+ -- Wishbone to FPGA registers and ethernet core
+ wb_32_i : in wishbone_bus_out;
+ wb_32_o : out wishbone_bus_in);
+end atomic32_access;
+
+architecture behave of atomic32_access is
+
+type eth_state_wr_type is (idle, lsb_msb, lsb, msb, write, ack, wait_st);
+signal eth_state_wr : eth_state_wr_type;
+type eth_state_rd_type is (idle, lsb_msb, lsb_read, lsb, wait_st2, msb);
+signal eth_state_rd : eth_state_rd_type;
+signal core_data : std_logic_vector(31 downto 0);
+signal core_addr : std_logic_vector(31 downto 0);
+
+begin
+ process(cpu_clk, areset)
+ begin
+ if areset = '1' then
+ eth_state_wr <= idle;
+ eth_state_rd <= idle;
+ wb_32_o.stb <= '0';
+ wb_32_o.cyc <= '0';
+ wb_16_o.ack <= '0';
+ core_data <= (others => '0');
+ core_addr <= (others => '0');
+ elsif (rising_edge(cpu_clk)) then
+
+ case eth_state_wr is --write cycle
+ when idle =>
+ if wb_16_i.cyc = '1' and wb_16_i.we = '1' then
+ eth_state_wr <= lsb_msb;
+ end if;
+ when lsb_msb =>
+ if wb_16_i.adr(1) = '0' then
+ eth_state_wr <= lsb;
+ end if;
+ if wb_16_i.adr(1) = '1' then
+ eth_state_wr <= msb;
+ end if;
+ when lsb =>
+ core_data(15 downto 0) <= wb_16_i.dat(15 downto 0);
+ wb_16_o.ack <= '1';
+ eth_state_wr <= wait_st;
+ when msb =>
+ core_data(31 downto 16) <= wb_16_i.dat(31 downto 16);
+ core_addr <= wb_16_i.adr(31 downto 2) & "00";
+ eth_state_wr <= write;
+ when write =>
+ wb_32_o.dat <= core_data;
+ wb_32_o.adr <= core_addr;
+ wb_32_o.sel <= "1111";
+ wb_32_o.we <= '1';
+ wb_32_o.stb <= '1';
+ wb_32_o.cyc <= '1';
+ eth_state_wr <= ack;
+ when ack =>
+ if wb_32_i.ack = '1' then
+ wb_16_o.ack <= '1';
+ eth_state_wr <= wait_st;
+ wb_32_o.stb <= '0';
+ wb_32_o.cyc <= '0';
+ wb_32_o.sel <= "0000";
+ wb_32_o.we <= '0';
+ end if;
+ when wait_st =>
+ wb_16_o.ack <= '0';
+ eth_state_wr <= idle;
+ when others =>
+ eth_state_wr <= idle;
+ end case;
+
+ case eth_state_rd is --read cycle
+ when idle =>
+ if wb_16_i.cyc = '1' and wb_16_i.we = '0' then
+ core_addr <= wb_16_i.adr(31 downto 2) & "00";
+ eth_state_rd <= lsb_msb;
+ end if;
+ when lsb_msb =>
+ if wb_16_i.adr(1) = '0' then
+ wb_32_o.adr <= core_addr;
+ eth_state_rd <= lsb_read;
+ end if;
+ if wb_16_i.adr(1) = '1' then
+ wb_32_o.adr <= core_addr;
+ eth_state_rd <= msb;
+ end if;
+ when lsb_read =>
+ wb_32_o.sel <= "1111";
+ wb_32_o.we <= '0';
+ wb_32_o.stb <= '1';
+ wb_32_o.cyc <= '1';
+ eth_state_rd <= lsb;
+ when lsb =>
+ if wb_32_i.ack = '1' then
+ wb_32_o.sel <= "0000";
+ wb_32_o.stb <= '0';
+ wb_32_o.cyc <= '0';
+ core_data <= wb_32_i.dat;
+ wb_16_o.dat <= x"0000" & wb_32_i.dat(15 downto 0);
+ wb_16_o.ack <= '1';
+ eth_state_rd <= wait_st2;
+ end if;
+ when wait_st2 =>
+ wb_16_o.ack <= '0';
+ eth_state_rd <= idle;
+ when msb =>
+ wb_16_o.ack <= '1';
+ wb_16_o.dat <= core_data(31 downto 16) & x"0000";
+ eth_state_rd <= wait_st2;
+ when others =>
+ eth_state_rd <= idle;
+ end case;
+ end if;
+ end process;
+
end behave; \ No newline at end of file
diff --git a/misc/wishbone/src/wishbone_pkg.vhd b/misc/wishbone/src/wishbone_pkg.vhd
index c3b0d9b..359a33f 100644
--- a/misc/wishbone/src/wishbone_pkg.vhd
+++ b/misc/wishbone/src/wishbone_pkg.vhd
@@ -1,52 +1,52 @@
-library IEEE;
-use IEEE.STD_LOGIC_1164.all;
-use IEEE.STD_LOGIC_UNSIGNED.ALL;
-
-package wishbone_pkg is
-
- type wishbone_bus_in is record
- adr : std_logic_vector(31 downto 0);
- sel : std_logic_vector(3 downto 0);
- we : std_logic;
- dat : std_logic_vector(31 downto 0); -- Note! Data written with 'we'
- cyc : std_logic;
- stb : std_logic;
- end record;
-
- type wishbone_bus_out is record
- dat : std_logic_vector(31 downto 0);
- ack : std_logic;
- end record;
-
- type wishbone_bus is record
- insig : wishbone_bus_in;
- outsig : wishbone_bus_out;
- end record;
-
- component atomic32_access is
- port ( cpu_clk : in std_logic;
- areset : in std_logic;
-
- -- Wishbone from CPU interface
- wb_16_i : in wishbone_bus_in;
- wb_16_o : out wishbone_bus_out;
- -- Wishbone to FPGA registers and ethernet core
- wb_32_i : in wishbone_bus_out;
- wb_32_o : out wishbone_bus_in);
- end component;
-
- component eth_access_corr is
- port ( cpu_clk : in std_logic;
- areset : in std_logic;
-
- -- Wishbone from Wishbone MUX
- eth_raw_o : out wishbone_bus_out;
- eth_raw_i : in wishbone_bus_in;
-
- -- Wishbone ethernet core
- eth_slave_i : in wishbone_bus_out;
- eth_slave_o : out wishbone_bus_in);
- end component;
-
-
-end wishbone_pkg;
+library IEEE;
+use IEEE.STD_LOGIC_1164.all;
+use IEEE.STD_LOGIC_UNSIGNED.ALL;
+
+package wishbone_pkg is
+
+ type wishbone_bus_in is record
+ adr : std_logic_vector(31 downto 0);
+ sel : std_logic_vector(3 downto 0);
+ we : std_logic;
+ dat : std_logic_vector(31 downto 0); -- Note! Data written with 'we'
+ cyc : std_logic;
+ stb : std_logic;
+ end record;
+
+ type wishbone_bus_out is record
+ dat : std_logic_vector(31 downto 0);
+ ack : std_logic;
+ end record;
+
+ type wishbone_bus is record
+ insig : wishbone_bus_in;
+ outsig : wishbone_bus_out;
+ end record;
+
+ component atomic32_access is
+ port ( cpu_clk : in std_logic;
+ areset : in std_logic;
+
+ -- Wishbone from CPU interface
+ wb_16_i : in wishbone_bus_in;
+ wb_16_o : out wishbone_bus_out;
+ -- Wishbone to FPGA registers and ethernet core
+ wb_32_i : in wishbone_bus_out;
+ wb_32_o : out wishbone_bus_in);
+ end component;
+
+ component eth_access_corr is
+ port ( cpu_clk : in std_logic;
+ areset : in std_logic;
+
+ -- Wishbone from Wishbone MUX
+ eth_raw_o : out wishbone_bus_out;
+ eth_raw_i : in wishbone_bus_in;
+
+ -- Wishbone ethernet core
+ eth_slave_i : in wishbone_bus_out;
+ eth_slave_o : out wishbone_bus_in);
+ end component;
+
+
+end wishbone_pkg;
diff --git a/zpu/hdl/example/bram_dmips.vhd b/zpu/hdl/example/bram_dmips.vhd
index 733560e..07b19f4 100644
--- a/zpu/hdl/example/bram_dmips.vhd
+++ b/zpu/hdl/example/bram_dmips.vhd
@@ -1,3356 +1,3356 @@
--- ZPU
---
--- Copyright 2004-2008 oharboe - Øyvind Harboe - oyvind.harboe@zylin.com
---
--- The FreeBSD license
---
--- Redistribution and use in source and binary forms, with or without
--- modification, are permitted provided that the following conditions
--- are met:
---
--- 1. Redistributions of source code must retain the above copyright
--- notice, this list of conditions and the following disclaimer.
--- 2. Redistributions in binary form must reproduce the above
--- copyright notice, this list of conditions and the following
--- disclaimer in the documentation and/or other materials
--- provided with the distribution.
---
--- THIS SOFTWARE IS PROVIDED BY THE ZPU PROJECT ``AS IS'' AND ANY
--- EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
--- THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
--- PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
--- ZPU PROJECT OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
--- INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
--- (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
--- OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
--- HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
--- STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
--- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
--- ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
---
--- The views and conclusions contained in the software and documentation
--- are those of the authors and should not be interpreted as representing
--- official policies, either expressed or implied, of the ZPU Project.
-
-library ieee;
-use ieee.std_logic_1164.all;
-use ieee.numeric_std.all;
-
-
-library work;
-use work.zpu_config.all;
-use work.zpupkg.all;
-
-entity dualport_ram is
-port (clk : in std_logic;
- memAWriteEnable : in std_logic;
- memAAddr : in std_logic_vector(maxAddrBitBRAM downto minAddrBit);
- memAWrite : in std_logic_vector(wordSize-1 downto 0);
- memARead : out std_logic_vector(wordSize-1 downto 0);
- memBWriteEnable : in std_logic;
- memBAddr : in std_logic_vector(maxAddrBitBRAM downto minAddrBit);
- memBWrite : in std_logic_vector(wordSize-1 downto 0);
- memBRead : out std_logic_vector(wordSize-1 downto 0));
-end dualport_ram;
-
-architecture dualport_ram_arch of dualport_ram is
-
-
-type ram_type is array(natural range 0 to ((2**(maxAddrBitBRAM+1))/4)-1) of std_logic_vector(wordSize-1 downto 0);
-
-shared variable ram : ram_type :=
-(
- 0 => x"0b0b0b0b",
- 1 => x"82700b0b",
- 2 => x"80d5f40c",
- 3 => x"3a0b0b80",
- 4 => x"c4fb0400",
- 5 => x"00000000",
- 6 => x"00000000",
- 7 => x"00000000",
- 8 => x"80088408",
- 9 => x"88080b0b",
- 10 => x"80c5c22d",
- 11 => x"880c840c",
- 12 => x"800c0400",
- 13 => x"00000000",
- 14 => x"00000000",
- 15 => x"00000000",
- 16 => x"71fd0608",
- 17 => x"72830609",
- 18 => x"81058205",
- 19 => x"832b2a83",
- 20 => x"ffff0652",
- 21 => x"04000000",
- 22 => x"00000000",
- 23 => x"00000000",
- 24 => x"71fd0608",
- 25 => x"83ffff73",
- 26 => x"83060981",
- 27 => x"05820583",
- 28 => x"2b2b0906",
- 29 => x"7383ffff",
- 30 => x"0b0b0b0b",
- 31 => x"83a70400",
- 32 => x"72098105",
- 33 => x"72057373",
- 34 => x"09060906",
- 35 => x"73097306",
- 36 => x"070a8106",
- 37 => x"53510400",
- 38 => x"00000000",
- 39 => x"00000000",
- 40 => x"72722473",
- 41 => x"732e0753",
- 42 => x"51040000",
- 43 => x"00000000",
- 44 => x"00000000",
- 45 => x"00000000",
- 46 => x"00000000",
- 47 => x"00000000",
- 48 => x"71737109",
- 49 => x"71068106",
- 50 => x"30720a10",
- 51 => x"0a720a10",
- 52 => x"0a31050a",
- 53 => x"81065151",
- 54 => x"53510400",
- 55 => x"00000000",
- 56 => x"72722673",
- 57 => x"732e0753",
- 58 => x"51040000",
- 59 => x"00000000",
- 60 => x"00000000",
- 61 => x"00000000",
- 62 => x"00000000",
- 63 => x"00000000",
- 64 => x"00000000",
- 65 => x"00000000",
- 66 => x"00000000",
- 67 => x"00000000",
- 68 => x"00000000",
- 69 => x"00000000",
- 70 => x"00000000",
- 71 => x"00000000",
- 72 => x"0b0b0b88",
- 73 => x"c3040000",
- 74 => x"00000000",
- 75 => x"00000000",
- 76 => x"00000000",
- 77 => x"00000000",
- 78 => x"00000000",
- 79 => x"00000000",
- 80 => x"720a722b",
- 81 => x"0a535104",
- 82 => x"00000000",
- 83 => x"00000000",
- 84 => x"00000000",
- 85 => x"00000000",
- 86 => x"00000000",
- 87 => x"00000000",
- 88 => x"72729f06",
- 89 => x"0981050b",
- 90 => x"0b0b88a6",
- 91 => x"05040000",
- 92 => x"00000000",
- 93 => x"00000000",
- 94 => x"00000000",
- 95 => x"00000000",
- 96 => x"72722aff",
- 97 => x"739f062a",
- 98 => x"0974090a",
- 99 => x"8106ff05",
- 100 => x"06075351",
- 101 => x"04000000",
- 102 => x"00000000",
- 103 => x"00000000",
- 104 => x"71715351",
- 105 => x"020d0406",
- 106 => x"73830609",
- 107 => x"81058205",
- 108 => x"832b0b2b",
- 109 => x"0772fc06",
- 110 => x"0c515104",
- 111 => x"00000000",
- 112 => x"72098105",
- 113 => x"72050970",
- 114 => x"81050906",
- 115 => x"0a810653",
- 116 => x"51040000",
- 117 => x"00000000",
- 118 => x"00000000",
- 119 => x"00000000",
- 120 => x"72098105",
- 121 => x"72050970",
- 122 => x"81050906",
- 123 => x"0a098106",
- 124 => x"53510400",
- 125 => x"00000000",
- 126 => x"00000000",
- 127 => x"00000000",
- 128 => x"71098105",
- 129 => x"52040000",
- 130 => x"00000000",
- 131 => x"00000000",
- 132 => x"00000000",
- 133 => x"00000000",
- 134 => x"00000000",
- 135 => x"00000000",
- 136 => x"72720981",
- 137 => x"05055351",
- 138 => x"04000000",
- 139 => x"00000000",
- 140 => x"00000000",
- 141 => x"00000000",
- 142 => x"00000000",
- 143 => x"00000000",
- 144 => x"72097206",
- 145 => x"73730906",
- 146 => x"07535104",
- 147 => x"00000000",
- 148 => x"00000000",
- 149 => x"00000000",
- 150 => x"00000000",
- 151 => x"00000000",
- 152 => x"71fc0608",
- 153 => x"72830609",
- 154 => x"81058305",
- 155 => x"1010102a",
- 156 => x"81ff0652",
- 157 => x"04000000",
- 158 => x"00000000",
- 159 => x"00000000",
- 160 => x"71fc0608",
- 161 => x"0b0b80d5",
- 162 => x"e0738306",
- 163 => x"10100508",
- 164 => x"060b0b0b",
- 165 => x"88a90400",
- 166 => x"00000000",
- 167 => x"00000000",
- 168 => x"80088408",
- 169 => x"88087575",
- 170 => x"0b0b0bad",
- 171 => x"aa2d5050",
- 172 => x"80085688",
- 173 => x"0c840c80",
- 174 => x"0c510400",
- 175 => x"00000000",
- 176 => x"80088408",
- 177 => x"88087575",
- 178 => x"0b0b0bad",
- 179 => x"ee2d5050",
- 180 => x"80085688",
- 181 => x"0c840c80",
- 182 => x"0c510400",
- 183 => x"00000000",
- 184 => x"72097081",
- 185 => x"0509060a",
- 186 => x"8106ff05",
- 187 => x"70547106",
- 188 => x"73097274",
- 189 => x"05ff0506",
- 190 => x"07515151",
- 191 => x"04000000",
- 192 => x"72097081",
- 193 => x"0509060a",
- 194 => x"098106ff",
- 195 => x"05705471",
- 196 => x"06730972",
- 197 => x"7405ff05",
- 198 => x"06075151",
- 199 => x"51040000",
- 200 => x"05ff0504",
- 201 => x"00000000",
- 202 => x"00000000",
- 203 => x"00000000",
- 204 => x"00000000",
- 205 => x"00000000",
- 206 => x"00000000",
- 207 => x"00000000",
- 208 => x"810b0b0b",
- 209 => x"80d5f00c",
- 210 => x"51040000",
- 211 => x"00000000",
- 212 => x"00000000",
- 213 => x"00000000",
- 214 => x"00000000",
- 215 => x"00000000",
- 216 => x"71810552",
- 217 => x"04000000",
- 218 => x"00000000",
- 219 => x"00000000",
- 220 => x"00000000",
- 221 => x"00000000",
- 222 => x"00000000",
- 223 => x"00000000",
- 224 => x"00000000",
- 225 => x"00000000",
- 226 => x"00000000",
- 227 => x"00000000",
- 228 => x"00000000",
- 229 => x"00000000",
- 230 => x"00000000",
- 231 => x"00000000",
- 232 => x"02840572",
- 233 => x"10100552",
- 234 => x"04000000",
- 235 => x"00000000",
- 236 => x"00000000",
- 237 => x"00000000",
- 238 => x"00000000",
- 239 => x"00000000",
- 240 => x"00000000",
- 241 => x"00000000",
- 242 => x"00000000",
- 243 => x"00000000",
- 244 => x"00000000",
- 245 => x"00000000",
- 246 => x"00000000",
- 247 => x"00000000",
- 248 => x"717105ff",
- 249 => x"05715351",
- 250 => x"020d0400",
- 251 => x"00000000",
- 252 => x"00000000",
- 253 => x"00000000",
- 254 => x"00000000",
- 255 => x"00000000",
- 256 => x"82fd3fbf",
- 257 => x"a03f0410",
- 258 => x"10101010",
- 259 => x"10101010",
- 260 => x"10101010",
- 261 => x"10101010",
- 262 => x"10101010",
- 263 => x"10101010",
- 264 => x"10101010",
- 265 => x"10105351",
- 266 => x"047381ff",
- 267 => x"06738306",
- 268 => x"09810583",
- 269 => x"05101010",
- 270 => x"2b0772fc",
- 271 => x"060c5151",
- 272 => x"043c0472",
- 273 => x"72807281",
- 274 => x"06ff0509",
- 275 => x"72060571",
- 276 => x"1052720a",
- 277 => x"100a5372",
- 278 => x"ed385151",
- 279 => x"535104ff",
- 280 => x"3d0d0b0b",
- 281 => x"80e5e408",
- 282 => x"52710870",
- 283 => x"882a8132",
- 284 => x"70810651",
- 285 => x"515170f1",
- 286 => x"3873720c",
- 287 => x"833d0d04",
- 288 => x"80d5f008",
- 289 => x"802ea438",
- 290 => x"80d5f408",
- 291 => x"822ebd38",
- 292 => x"8380800b",
- 293 => x"0b0b80e5",
- 294 => x"e40c82a0",
- 295 => x"800b80e5",
- 296 => x"e80c8290",
- 297 => x"800b80e5",
- 298 => x"ec0c04f8",
- 299 => x"808080a4",
- 300 => x"0b0b0b80",
- 301 => x"e5e40cf8",
- 302 => x"80808280",
- 303 => x"0b80e5e8",
- 304 => x"0cf88080",
- 305 => x"84800b80",
- 306 => x"e5ec0c04",
- 307 => x"80c0a880",
- 308 => x"8c0b0b0b",
- 309 => x"80e5e40c",
- 310 => x"80c0a880",
- 311 => x"940b80e5",
- 312 => x"e80c0b0b",
- 313 => x"80c7d00b",
- 314 => x"80e5ec0c",
- 315 => x"04f23d0d",
- 316 => x"6080e5e8",
- 317 => x"08565d82",
- 318 => x"750c8059",
- 319 => x"805a800b",
- 320 => x"8f3d5d5b",
- 321 => x"7a101015",
- 322 => x"70087108",
- 323 => x"719f2c7e",
- 324 => x"852b5855",
- 325 => x"557d5359",
- 326 => x"5799993f",
- 327 => x"7d7f7a72",
- 328 => x"077c7207",
- 329 => x"71716081",
- 330 => x"05415f5d",
- 331 => x"5b595755",
- 332 => x"817b278f",
- 333 => x"38767d0c",
- 334 => x"77841e0c",
- 335 => x"7c800c90",
- 336 => x"3d0d0480",
- 337 => x"e5e80855",
- 338 => x"ffba3970",
- 339 => x"7080e5f0",
- 340 => x"335170a7",
- 341 => x"3880d5fc",
- 342 => x"08700852",
- 343 => x"5270802e",
- 344 => x"94388412",
- 345 => x"80d5fc0c",
- 346 => x"702d80d5",
- 347 => x"fc087008",
- 348 => x"525270ee",
- 349 => x"38810b80",
- 350 => x"e5f03450",
- 351 => x"50040470",
- 352 => x"0b0b80e5",
- 353 => x"e008802e",
- 354 => x"8e380b0b",
- 355 => x"0b0b800b",
- 356 => x"802e0981",
- 357 => x"06833850",
- 358 => x"040b0b80",
- 359 => x"e5e0510b",
- 360 => x"0b0bf4dc",
- 361 => x"3f500404",
- 362 => x"ff3d0d02",
- 363 => x"8f053352",
- 364 => x"718a2e8a",
- 365 => x"387151fd",
- 366 => x"a63f833d",
- 367 => x"0d048d51",
- 368 => x"fd9d3f71",
- 369 => x"51fd983f",
- 370 => x"833d0d04",
- 371 => x"ce3d0db5",
- 372 => x"3d707084",
- 373 => x"0552088b",
- 374 => x"a85c56a5",
- 375 => x"3d5e5c80",
- 376 => x"75708105",
- 377 => x"5733765b",
- 378 => x"55587378",
- 379 => x"2e80c138",
- 380 => x"8e3d5b73",
- 381 => x"a52e0981",
- 382 => x"0680c538",
- 383 => x"78708105",
- 384 => x"5a335473",
- 385 => x"80e42e81",
- 386 => x"b6387380",
- 387 => x"e42480c6",
- 388 => x"387380e3",
- 389 => x"2ea13880",
- 390 => x"52a55179",
- 391 => x"2d805273",
- 392 => x"51792d82",
- 393 => x"18587870",
- 394 => x"81055a33",
- 395 => x"5473c438",
- 396 => x"77800cb4",
- 397 => x"3d0d047b",
- 398 => x"841d8312",
- 399 => x"33565d57",
- 400 => x"80527351",
- 401 => x"792d8118",
- 402 => x"79708105",
- 403 => x"5b335558",
- 404 => x"73ffa038",
- 405 => x"db397380",
- 406 => x"f32e0981",
- 407 => x"06ffb838",
- 408 => x"7b841d71",
- 409 => x"08595d56",
- 410 => x"80773355",
- 411 => x"5673762e",
- 412 => x"8d388116",
- 413 => x"70187033",
- 414 => x"57555674",
- 415 => x"f538ff16",
- 416 => x"55807625",
- 417 => x"ffa03876",
- 418 => x"70810558",
- 419 => x"33548052",
- 420 => x"7351792d",
- 421 => x"811875ff",
- 422 => x"17575758",
- 423 => x"807625ff",
- 424 => x"85387670",
- 425 => x"81055833",
- 426 => x"54805273",
- 427 => x"51792d81",
- 428 => x"1875ff17",
- 429 => x"57575875",
- 430 => x"8024cc38",
- 431 => x"fee8397b",
- 432 => x"841d7108",
- 433 => x"70719f2c",
- 434 => x"5953595d",
- 435 => x"56807524",
- 436 => x"81913875",
- 437 => x"7d7c5856",
- 438 => x"54805773",
- 439 => x"772e0981",
- 440 => x"06b638b0",
- 441 => x"7b3402b5",
- 442 => x"05567a76",
- 443 => x"2e9738ff",
- 444 => x"16567533",
- 445 => x"75708105",
- 446 => x"57348117",
- 447 => x"577a762e",
- 448 => x"098106eb",
- 449 => x"38807534",
- 450 => x"767dff12",
- 451 => x"57585675",
- 452 => x"8024fef3",
- 453 => x"38fe8f39",
- 454 => x"8a527351",
- 455 => x"9fd03f80",
- 456 => x"0880c7d4",
- 457 => x"05337670",
- 458 => x"81055834",
- 459 => x"8a527351",
- 460 => x"9ef83f80",
- 461 => x"08548008",
- 462 => x"802effae",
- 463 => x"388a5273",
- 464 => x"519fab3f",
- 465 => x"800880c7",
- 466 => x"d4053376",
- 467 => x"70810558",
- 468 => x"348a5273",
- 469 => x"519ed33f",
- 470 => x"80085480",
- 471 => x"08ffb938",
- 472 => x"ff883974",
- 473 => x"527653b4",
- 474 => x"3dffb805",
- 475 => x"51949a3f",
- 476 => x"a33d0856",
- 477 => x"fedd3980",
- 478 => x"3d0d80c1",
- 479 => x"0b81b4bc",
- 480 => x"34800b81",
- 481 => x"b6980c70",
- 482 => x"800c823d",
- 483 => x"0d04ff3d",
- 484 => x"0d800b81",
- 485 => x"b4bc3352",
- 486 => x"527080c1",
- 487 => x"2e993871",
- 488 => x"81b69808",
- 489 => x"0781b698",
- 490 => x"0c80c20b",
- 491 => x"81b4c034",
- 492 => x"70800c83",
- 493 => x"3d0d0481",
- 494 => x"0b81b698",
- 495 => x"080781b6",
- 496 => x"980c80c2",
- 497 => x"0b81b4c0",
- 498 => x"3470800c",
- 499 => x"833d0d04",
- 500 => x"fd3d0d75",
- 501 => x"70088a05",
- 502 => x"535381b4",
- 503 => x"bc335170",
- 504 => x"80c12e8b",
- 505 => x"3873f338",
- 506 => x"70800c85",
- 507 => x"3d0d04ff",
- 508 => x"127081b4",
- 509 => x"b8083174",
- 510 => x"0c800c85",
- 511 => x"3d0d04fc",
- 512 => x"3d0d81b4",
- 513 => x"c4085574",
- 514 => x"802e8c38",
- 515 => x"76750871",
- 516 => x"0c81b4c4",
- 517 => x"0856548c",
- 518 => x"155381b4",
- 519 => x"b808528a",
- 520 => x"518fd43f",
- 521 => x"73800c86",
- 522 => x"3d0d04fb",
- 523 => x"3d0d7770",
- 524 => x"085656b0",
- 525 => x"5381b4c4",
- 526 => x"08527451",
- 527 => x"ab943f85",
- 528 => x"0b8c170c",
- 529 => x"850b8c16",
- 530 => x"0c750875",
- 531 => x"0c81b4c4",
- 532 => x"08547380",
- 533 => x"2e8a3873",
- 534 => x"08750c81",
- 535 => x"b4c40854",
- 536 => x"8c145381",
- 537 => x"b4b80852",
- 538 => x"8a518f8b",
- 539 => x"3f841508",
- 540 => x"ad38860b",
- 541 => x"8c160c88",
- 542 => x"15528816",
- 543 => x"08518e97",
- 544 => x"3f81b4c4",
- 545 => x"08700876",
- 546 => x"0c548c15",
- 547 => x"7054548a",
- 548 => x"52730851",
- 549 => x"8ee13f73",
- 550 => x"800c873d",
- 551 => x"0d047508",
- 552 => x"54b05373",
- 553 => x"527551aa",
- 554 => x"a93f7380",
- 555 => x"0c873d0d",
- 556 => x"04d93d0d",
- 557 => x"b0519dcf",
- 558 => x"3f800881",
- 559 => x"b4b40cb0",
- 560 => x"519dc43f",
- 561 => x"800881b4",
- 562 => x"c40c81b4",
- 563 => x"b4088008",
- 564 => x"0c800b80",
- 565 => x"0884050c",
- 566 => x"820b8008",
- 567 => x"88050ca8",
- 568 => x"0b80088c",
- 569 => x"050c9f53",
- 570 => x"80c7e052",
- 571 => x"80089005",
- 572 => x"51a9df3f",
- 573 => x"a13d5e9f",
- 574 => x"5380c880",
- 575 => x"527d51a9",
- 576 => x"d13f8a0b",
- 577 => x"80f2f80c",
- 578 => x"80d2a451",
- 579 => x"f9be3f80",
- 580 => x"c8a051f9",
- 581 => x"b73f80d2",
- 582 => x"a451f9b0",
- 583 => x"3f80d684",
- 584 => x"08802e89",
- 585 => x"d33880c8",
- 586 => x"d051f9a0",
- 587 => x"3f80d2a4",
- 588 => x"51f9993f",
- 589 => x"80d68008",
- 590 => x"5280c8fc",
- 591 => x"51f98d3f",
- 592 => x"80e69451",
- 593 => x"b2ff3f81",
- 594 => x"0b9a3d5e",
- 595 => x"5b800b80",
- 596 => x"d6800825",
- 597 => x"82d43890",
- 598 => x"3d5f80c1",
- 599 => x"0b81b4bc",
- 600 => x"34810b81",
- 601 => x"b6980c80",
- 602 => x"c20b81b4",
- 603 => x"c0348240",
- 604 => x"835a9f53",
- 605 => x"80c9ac52",
- 606 => x"7c51a8d6",
- 607 => x"3f814180",
- 608 => x"7d537e52",
- 609 => x"568e943f",
- 610 => x"8008762e",
- 611 => x"09810683",
- 612 => x"38815675",
- 613 => x"81b6980c",
- 614 => x"7f705856",
- 615 => x"758325a2",
- 616 => x"38751010",
- 617 => x"16fd0542",
- 618 => x"a93dffa4",
- 619 => x"05538352",
- 620 => x"76518cc3",
- 621 => x"3f7f8105",
- 622 => x"70417058",
- 623 => x"56837624",
- 624 => x"e0386154",
- 625 => x"755380e6",
- 626 => x"9c5281b4",
- 627 => x"d0518cb7",
- 628 => x"3f81b4c4",
- 629 => x"08700858",
- 630 => x"58b05377",
- 631 => x"527651a7",
- 632 => x"f13f850b",
- 633 => x"8c190c85",
- 634 => x"0b8c180c",
- 635 => x"7708770c",
- 636 => x"81b4c408",
- 637 => x"5675802e",
- 638 => x"8a387508",
- 639 => x"770c81b4",
- 640 => x"c408568c",
- 641 => x"165381b4",
- 642 => x"b808528a",
- 643 => x"518be83f",
- 644 => x"84170887",
- 645 => x"ea38860b",
- 646 => x"8c180c88",
- 647 => x"17528818",
- 648 => x"08518af3",
- 649 => x"3f81b4c4",
- 650 => x"08700878",
- 651 => x"0c568c17",
- 652 => x"7054598a",
- 653 => x"52780851",
- 654 => x"8bbd3f80",
- 655 => x"c10b81b4",
- 656 => x"c0335757",
- 657 => x"767626a2",
- 658 => x"3880c352",
- 659 => x"76518ca1",
- 660 => x"3f800861",
- 661 => x"2e89e438",
- 662 => x"81177081",
- 663 => x"ff0681b4",
- 664 => x"c0335858",
- 665 => x"58757727",
- 666 => x"e0387960",
- 667 => x"29627054",
- 668 => x"71535b59",
- 669 => x"98b43f80",
- 670 => x"0840787a",
- 671 => x"31708729",
- 672 => x"80083180",
- 673 => x"088a0581",
- 674 => x"b4bc3381",
- 675 => x"b4b8085e",
- 676 => x"5b525a56",
- 677 => x"7780c12e",
- 678 => x"89ce387b",
- 679 => x"f738811b",
- 680 => x"5b80d680",
- 681 => x"087b25fd",
- 682 => x"b13881b4",
- 683 => x"ac51b095",
- 684 => x"3f80c9cc",
- 685 => x"51f6953f",
- 686 => x"80d2a451",
- 687 => x"f68e3f80",
- 688 => x"c9dc51f6",
- 689 => x"873f80d2",
- 690 => x"a451f680",
- 691 => x"3f81b4b8",
- 692 => x"085280ca",
- 693 => x"9451f5f4",
- 694 => x"3f855280",
- 695 => x"cab051f5",
- 696 => x"eb3f81b6",
- 697 => x"98085280",
- 698 => x"cacc51f5",
- 699 => x"df3f8152",
- 700 => x"80cab051",
- 701 => x"f5d63f81",
- 702 => x"b4bc3352",
- 703 => x"80cae851",
- 704 => x"f5ca3f80",
- 705 => x"c15280cb",
- 706 => x"8451f5c0",
- 707 => x"3f81b4c0",
- 708 => x"335280cb",
- 709 => x"a051f5b4",
- 710 => x"3f80c252",
- 711 => x"80cb8451",
- 712 => x"f5aa3f81",
- 713 => x"b4f00852",
- 714 => x"80cbbc51",
- 715 => x"f59e3f87",
- 716 => x"5280cab0",
- 717 => x"51f5953f",
- 718 => x"80f2f808",
- 719 => x"5280cbd8",
- 720 => x"51f5893f",
- 721 => x"80cbf451",
- 722 => x"f5823f80",
- 723 => x"cca051f4",
- 724 => x"fb3f81b4",
- 725 => x"c4087008",
- 726 => x"535a80cc",
- 727 => x"ac51f4ec",
- 728 => x"3f80ccc8",
- 729 => x"51f4e53f",
- 730 => x"81b4c408",
- 731 => x"84110853",
- 732 => x"5680ccfc",
- 733 => x"51f4d53f",
- 734 => x"805280ca",
- 735 => x"b051f4cc",
- 736 => x"3f81b4c4",
- 737 => x"08881108",
- 738 => x"535880cd",
- 739 => x"9851f4bc",
- 740 => x"3f825280",
- 741 => x"cab051f4",
- 742 => x"b33f81b4",
- 743 => x"c4088c11",
- 744 => x"08535780",
- 745 => x"cdb451f4",
- 746 => x"a33f9152",
- 747 => x"80cab051",
- 748 => x"f49a3f81",
- 749 => x"b4c40890",
- 750 => x"055280cd",
- 751 => x"d051f48c",
- 752 => x"3f80cdec",
- 753 => x"51f4853f",
- 754 => x"80cea451",
- 755 => x"f3fe3f81",
- 756 => x"b4b40870",
- 757 => x"08535f80",
- 758 => x"ccac51f3",
- 759 => x"ef3f80ce",
- 760 => x"b851f3e8",
- 761 => x"3f81b4b4",
- 762 => x"08841108",
- 763 => x"535b80cc",
- 764 => x"fc51f3d8",
- 765 => x"3f805280",
- 766 => x"cab051f3",
- 767 => x"cf3f81b4",
- 768 => x"b4088811",
- 769 => x"08535c80",
- 770 => x"cd9851f3",
- 771 => x"bf3f8152",
- 772 => x"80cab051",
- 773 => x"f3b63f81",
- 774 => x"b4b4088c",
- 775 => x"1108535a",
- 776 => x"80cdb451",
- 777 => x"f3a63f92",
- 778 => x"5280cab0",
- 779 => x"51f39d3f",
- 780 => x"81b4b408",
- 781 => x"90055280",
- 782 => x"cdd051f3",
- 783 => x"8f3f80cd",
- 784 => x"ec51f388",
- 785 => x"3f7f5280",
- 786 => x"cef851f2",
- 787 => x"ff3f8552",
- 788 => x"80cab051",
- 789 => x"f2f63f78",
- 790 => x"5280cf94",
- 791 => x"51f2ed3f",
- 792 => x"8d5280ca",
- 793 => x"b051f2e4",
- 794 => x"3f615280",
- 795 => x"cfb051f2",
- 796 => x"db3f8752",
- 797 => x"80cab051",
- 798 => x"f2d23f60",
- 799 => x"5280cfcc",
- 800 => x"51f2c93f",
- 801 => x"815280ca",
- 802 => x"b051f2c0",
- 803 => x"3f7d5280",
- 804 => x"cfe851f2",
- 805 => x"b73f80d0",
- 806 => x"8451f2b0",
- 807 => x"3f7c5280",
- 808 => x"d0bc51f2",
- 809 => x"a73f80d0",
- 810 => x"d851f2a0",
- 811 => x"3f80d2a4",
- 812 => x"51f2993f",
- 813 => x"81b4ac08",
- 814 => x"81b4b008",
- 815 => x"80e69408",
- 816 => x"80e69808",
- 817 => x"72713170",
- 818 => x"74267574",
- 819 => x"31707231",
- 820 => x"80e68c0c",
- 821 => x"444480e6",
- 822 => x"900c80e6",
- 823 => x"90085680",
- 824 => x"d190555c",
- 825 => x"595758f1",
- 826 => x"e33f80e6",
- 827 => x"8c085680",
- 828 => x"762582a3",
- 829 => x"3880d680",
- 830 => x"0870719f",
- 831 => x"2c9a3d53",
- 832 => x"565680e6",
- 833 => x"8c0880e6",
- 834 => x"90084153",
- 835 => x"7f547052",
- 836 => x"5a89eb3f",
- 837 => x"66685f80",
- 838 => x"e5fc0c7d",
- 839 => x"80e6800c",
- 840 => x"80d68008",
- 841 => x"709f2c58",
- 842 => x"568058bd",
- 843 => x"84c07855",
- 844 => x"55765275",
- 845 => x"53795187",
- 846 => x"d13f953d",
- 847 => x"80e68c08",
- 848 => x"80e69008",
- 849 => x"41557f56",
- 850 => x"67694053",
- 851 => x"7e547052",
- 852 => x"5c89ab3f",
- 853 => x"64665e80",
- 854 => x"e6840c7c",
- 855 => x"80e6880c",
- 856 => x"80d68008",
- 857 => x"709f2c40",
- 858 => x"58805783",
- 859 => x"dceb9480",
- 860 => x"7755557e",
- 861 => x"5277537b",
- 862 => x"51878f3f",
- 863 => x"64665d5b",
- 864 => x"805e8ddd",
- 865 => x"7e555580",
- 866 => x"e68c0880",
- 867 => x"e6900859",
- 868 => x"52775379",
- 869 => x"5186f33f",
- 870 => x"66684054",
- 871 => x"7e557a52",
- 872 => x"7b53a93d",
- 873 => x"ffa80551",
- 874 => x"88d43f62",
- 875 => x"645e81b4",
- 876 => x"c80c7c81",
- 877 => x"b4cc0c80",
- 878 => x"d1a051f0",
- 879 => x"8f3f80e6",
- 880 => x"80085280",
- 881 => x"d1d051f0",
- 882 => x"833f80d1",
- 883 => x"d851effc",
- 884 => x"3f80e688",
- 885 => x"085280d1",
- 886 => x"d051eff0",
- 887 => x"3f81b4cc",
- 888 => x"085280d2",
- 889 => x"8851efe4",
- 890 => x"3f80d2a4",
- 891 => x"51efdd3f",
- 892 => x"800b800c",
- 893 => x"a93d0d04",
- 894 => x"80d2a851",
- 895 => x"f6ac3977",
- 896 => x"0857b053",
- 897 => x"76527751",
- 898 => x"9fc83f80",
- 899 => x"c10b81b4",
- 900 => x"c0335757",
- 901 => x"f8ae3975",
- 902 => x"8a3880e6",
- 903 => x"90088126",
- 904 => x"fdd33880",
- 905 => x"d2d851ef",
- 906 => x"a33f80d3",
- 907 => x"9051ef9c",
- 908 => x"3f80d2a4",
- 909 => x"51ef953f",
- 910 => x"80d68008",
- 911 => x"70719f2c",
- 912 => x"9a3d5356",
- 913 => x"5680e68c",
- 914 => x"0880e690",
- 915 => x"0841537f",
- 916 => x"5470525a",
- 917 => x"87a83f66",
- 918 => x"685f80e5",
- 919 => x"fc0c7d80",
- 920 => x"e6800c80",
- 921 => x"d6800870",
- 922 => x"9f2c5856",
- 923 => x"8058bd84",
- 924 => x"c0785555",
- 925 => x"76527553",
- 926 => x"7951858e",
- 927 => x"3f953d80",
- 928 => x"e68c0880",
- 929 => x"e6900841",
- 930 => x"557f5667",
- 931 => x"6940537e",
- 932 => x"5470525c",
- 933 => x"86e83f64",
- 934 => x"665e80e6",
- 935 => x"840c7c80",
- 936 => x"e6880c80",
- 937 => x"d6800870",
- 938 => x"9f2c4058",
- 939 => x"805783dc",
- 940 => x"eb948077",
- 941 => x"55557e52",
- 942 => x"77537b51",
- 943 => x"84cc3f64",
- 944 => x"665d5b80",
- 945 => x"5e8ddd7e",
- 946 => x"555580e6",
- 947 => x"8c0880e6",
- 948 => x"90085952",
- 949 => x"77537951",
- 950 => x"84b03f66",
- 951 => x"6840547e",
- 952 => x"557a527b",
- 953 => x"53a93dff",
- 954 => x"a8055186",
- 955 => x"913f6264",
- 956 => x"5e81b4c8",
- 957 => x"0c7c81b4",
- 958 => x"cc0c80d1",
- 959 => x"a051edcc",
- 960 => x"3f80e680",
- 961 => x"085280d1",
- 962 => x"d051edc0",
- 963 => x"3f80d1d8",
- 964 => x"51edb93f",
- 965 => x"80e68808",
- 966 => x"5280d1d0",
- 967 => x"51edad3f",
- 968 => x"81b4cc08",
- 969 => x"5280d288",
- 970 => x"51eda13f",
- 971 => x"80d2a451",
- 972 => x"ed9a3f80",
- 973 => x"0b800ca9",
- 974 => x"3d0d04a9",
- 975 => x"3dffa005",
- 976 => x"52805180",
- 977 => x"d23f9f53",
- 978 => x"80d3b052",
- 979 => x"7c519d82",
- 980 => x"3f7a7b81",
- 981 => x"b4b80c81",
- 982 => x"187081ff",
- 983 => x"0681b4c0",
- 984 => x"33595959",
- 985 => x"5af5fe39",
- 986 => x"ff16707b",
- 987 => x"31600c5c",
- 988 => x"800b811c",
- 989 => x"5c5c80d6",
- 990 => x"80087b25",
- 991 => x"f3dc38f6",
- 992 => x"a939ff3d",
- 993 => x"0d738232",
- 994 => x"70307072",
- 995 => x"07802580",
- 996 => x"0c525283",
- 997 => x"3d0d04fe",
- 998 => x"3d0d7476",
- 999 => x"71535452",
- 1000 => x"71822e83",
- 1001 => x"38835171",
- 1002 => x"812e9a38",
- 1003 => x"8172269f",
- 1004 => x"3871822e",
- 1005 => x"b8387184",
- 1006 => x"2ea93870",
- 1007 => x"730c7080",
- 1008 => x"0c843d0d",
- 1009 => x"0480e40b",
- 1010 => x"81b4b808",
- 1011 => x"258b3880",
- 1012 => x"730c7080",
- 1013 => x"0c843d0d",
- 1014 => x"0483730c",
- 1015 => x"70800c84",
- 1016 => x"3d0d0482",
- 1017 => x"730c7080",
- 1018 => x"0c843d0d",
- 1019 => x"0481730c",
- 1020 => x"70800c84",
- 1021 => x"3d0d0480",
- 1022 => x"3d0d7474",
- 1023 => x"14820571",
- 1024 => x"0c800c82",
- 1025 => x"3d0d04f7",
- 1026 => x"3d0d7b7d",
- 1027 => x"7f618512",
- 1028 => x"70822b75",
- 1029 => x"11707471",
- 1030 => x"70840553",
- 1031 => x"0c5a5a5d",
- 1032 => x"5b760c79",
- 1033 => x"80f8180c",
- 1034 => x"79861252",
- 1035 => x"57585a5a",
- 1036 => x"76762499",
- 1037 => x"3876b329",
- 1038 => x"822b7911",
- 1039 => x"51537673",
- 1040 => x"70840555",
- 1041 => x"0c811454",
- 1042 => x"757425f2",
- 1043 => x"387681cc",
- 1044 => x"2919fc11",
- 1045 => x"088105fc",
- 1046 => x"120c7a19",
- 1047 => x"70089fa0",
- 1048 => x"130c5856",
- 1049 => x"850b81b4",
- 1050 => x"b80c7580",
- 1051 => x"0c8b3d0d",
- 1052 => x"04fe3d0d",
- 1053 => x"02930533",
- 1054 => x"51800284",
- 1055 => x"05970533",
- 1056 => x"54527073",
- 1057 => x"2e883871",
- 1058 => x"800c843d",
- 1059 => x"0d047081",
- 1060 => x"b4bc3481",
- 1061 => x"0b800c84",
- 1062 => x"3d0d04f8",
- 1063 => x"3d0d7a7c",
- 1064 => x"5956820b",
- 1065 => x"83195555",
- 1066 => x"74167033",
- 1067 => x"75335b51",
- 1068 => x"5372792e",
- 1069 => x"80c63880",
- 1070 => x"c10b8116",
- 1071 => x"81165656",
- 1072 => x"57827525",
- 1073 => x"e338ffa9",
- 1074 => x"177081ff",
- 1075 => x"06555973",
- 1076 => x"82268338",
- 1077 => x"87558153",
- 1078 => x"7680d22e",
- 1079 => x"98387752",
- 1080 => x"75519bc3",
- 1081 => x"3f805372",
- 1082 => x"80082589",
- 1083 => x"38871581",
- 1084 => x"b4b80c81",
- 1085 => x"5372800c",
- 1086 => x"8a3d0d04",
- 1087 => x"7281b4bc",
- 1088 => x"34827525",
- 1089 => x"ffa238ff",
- 1090 => x"bd39ef3d",
- 1091 => x"0d636567",
- 1092 => x"5b427943",
- 1093 => x"67695940",
- 1094 => x"77415a80",
- 1095 => x"5d805e61",
- 1096 => x"7083ffff",
- 1097 => x"0671902a",
- 1098 => x"627083ff",
- 1099 => x"ff067190",
- 1100 => x"2a747229",
- 1101 => x"74732975",
- 1102 => x"73297774",
- 1103 => x"2973902a",
- 1104 => x"05721151",
- 1105 => x"5856535f",
- 1106 => x"5a575a58",
- 1107 => x"55587373",
- 1108 => x"27863884",
- 1109 => x"80801656",
- 1110 => x"73902a16",
- 1111 => x"5b7883ff",
- 1112 => x"ff067484",
- 1113 => x"80802905",
- 1114 => x"5c7a7c5a",
- 1115 => x"5d785e77",
- 1116 => x"7f296178",
- 1117 => x"29057d05",
- 1118 => x"5d7c7e56",
- 1119 => x"7a0c7484",
- 1120 => x"1b0c7980",
- 1121 => x"0c933d0d",
- 1122 => x"04f93d0d",
- 1123 => x"797b7d54",
- 1124 => x"58725977",
- 1125 => x"30797030",
- 1126 => x"7072079f",
- 1127 => x"2a737131",
- 1128 => x"5a525977",
- 1129 => x"7956730c",
- 1130 => x"53738413",
- 1131 => x"0c54800c",
- 1132 => x"893d0d04",
- 1133 => x"f93d0d79",
- 1134 => x"7b7d7f56",
- 1135 => x"54525472",
- 1136 => x"802ea038",
- 1137 => x"70577158",
- 1138 => x"a0733152",
- 1139 => x"807225a1",
- 1140 => x"38777074",
- 1141 => x"2b577073",
- 1142 => x"2a78752b",
- 1143 => x"07565174",
- 1144 => x"76535170",
- 1145 => x"740c7184",
- 1146 => x"150c7380",
- 1147 => x"0c893d0d",
- 1148 => x"04805677",
- 1149 => x"72302b55",
- 1150 => x"74765351",
- 1151 => x"e639e43d",
- 1152 => x"0d6ea13d",
- 1153 => x"08a33d08",
- 1154 => x"59575f80",
- 1155 => x"764d774e",
- 1156 => x"a33d08a5",
- 1157 => x"3d08574b",
- 1158 => x"754c5e7d",
- 1159 => x"6c2486fb",
- 1160 => x"38806a24",
- 1161 => x"878f3869",
- 1162 => x"6b58566b",
- 1163 => x"6d5d467b",
- 1164 => x"47754476",
- 1165 => x"45646468",
- 1166 => x"685c5c56",
- 1167 => x"567481e7",
- 1168 => x"38787627",
- 1169 => x"82c73875",
- 1170 => x"81ff2683",
- 1171 => x"2b5583ff",
- 1172 => x"ff76278c",
- 1173 => x"389055fe",
- 1174 => x"800a7627",
- 1175 => x"83389855",
- 1176 => x"75752a80",
- 1177 => x"d3d00570",
- 1178 => x"33a07731",
- 1179 => x"71315755",
- 1180 => x"5774802e",
- 1181 => x"95387575",
- 1182 => x"2ba07631",
- 1183 => x"7a772b7c",
- 1184 => x"722a077c",
- 1185 => x"782b5d5b",
- 1186 => x"59567590",
- 1187 => x"2a7683ff",
- 1188 => x"ff067154",
- 1189 => x"7a535957",
- 1190 => x"88803f80",
- 1191 => x"085b87ea",
- 1192 => x"3f800880",
- 1193 => x"0879297c",
- 1194 => x"902b7c90",
- 1195 => x"2a075656",
- 1196 => x"59737527",
- 1197 => x"94388008",
- 1198 => x"ff057615",
- 1199 => x"55597574",
- 1200 => x"26873874",
- 1201 => x"742687b9",
- 1202 => x"38765273",
- 1203 => x"75315187",
- 1204 => x"c93f8008",
- 1205 => x"5587b33f",
- 1206 => x"80088008",
- 1207 => x"79297b83",
- 1208 => x"ffff0677",
- 1209 => x"902b0756",
- 1210 => x"59577378",
- 1211 => x"27963880",
- 1212 => x"08ff0576",
- 1213 => x"15555775",
- 1214 => x"74268938",
- 1215 => x"77742677",
- 1216 => x"71315856",
- 1217 => x"78902b77",
- 1218 => x"0758805b",
- 1219 => x"7a407741",
- 1220 => x"7f615654",
- 1221 => x"7d80d938",
- 1222 => x"737f0c74",
- 1223 => x"7f84050c",
- 1224 => x"7e800c9e",
- 1225 => x"3d0d0480",
- 1226 => x"705c5874",
- 1227 => x"7926dd38",
- 1228 => x"7481ff26",
- 1229 => x"832b5774",
- 1230 => x"83ffff26",
- 1231 => x"82a53874",
- 1232 => x"772a80d3",
- 1233 => x"d0057033",
- 1234 => x"a0793171",
- 1235 => x"31595c5d",
- 1236 => x"7682b338",
- 1237 => x"76547479",
- 1238 => x"27833881",
- 1239 => x"54797627",
- 1240 => x"74075981",
- 1241 => x"5878ffa2",
- 1242 => x"38765880",
- 1243 => x"5bff9d39",
- 1244 => x"73527453",
- 1245 => x"9e3de805",
- 1246 => x"51fc8e3f",
- 1247 => x"6769567f",
- 1248 => x"0c747f84",
- 1249 => x"050c7e80",
- 1250 => x"0c9e3d0d",
- 1251 => x"0475802e",
- 1252 => x"81c43875",
- 1253 => x"81ff2683",
- 1254 => x"2b5583ff",
- 1255 => x"ff76278c",
- 1256 => x"389055fe",
- 1257 => x"800a7627",
- 1258 => x"83389855",
- 1259 => x"75752a80",
- 1260 => x"d3d00570",
- 1261 => x"33a07731",
- 1262 => x"7131575e",
- 1263 => x"54748491",
- 1264 => x"38787631",
- 1265 => x"54817690",
- 1266 => x"2a7783ff",
- 1267 => x"ff065f5d",
- 1268 => x"5b7b5273",
- 1269 => x"5185c33f",
- 1270 => x"80085785",
- 1271 => x"ad3f8008",
- 1272 => x"80087e29",
- 1273 => x"78902b7c",
- 1274 => x"902a0756",
- 1275 => x"56597375",
- 1276 => x"27943880",
- 1277 => x"08ff0576",
- 1278 => x"15555975",
- 1279 => x"74268738",
- 1280 => x"74742684",
- 1281 => x"f3387b52",
- 1282 => x"73753151",
- 1283 => x"858c3f80",
- 1284 => x"085584f6",
- 1285 => x"3f800880",
- 1286 => x"087e297b",
- 1287 => x"83ffff06",
- 1288 => x"77902b07",
- 1289 => x"56595773",
- 1290 => x"78279638",
- 1291 => x"8008ff05",
- 1292 => x"76155557",
- 1293 => x"75742689",
- 1294 => x"38777426",
- 1295 => x"77713158",
- 1296 => x"5a78902b",
- 1297 => x"77077b41",
- 1298 => x"417f6156",
- 1299 => x"547d802e",
- 1300 => x"fdc638fe",
- 1301 => x"9b397552",
- 1302 => x"815184ae",
- 1303 => x"3f800856",
- 1304 => x"feb13990",
- 1305 => x"57fe800a",
- 1306 => x"7527fdd3",
- 1307 => x"38987571",
- 1308 => x"2a80d3d0",
- 1309 => x"057033a0",
- 1310 => x"73317131",
- 1311 => x"535d5e57",
- 1312 => x"76802efd",
- 1313 => x"cf38a077",
- 1314 => x"3175782b",
- 1315 => x"77722a07",
- 1316 => x"77792b7b",
- 1317 => x"7a2b7d74",
- 1318 => x"2a077d7b",
- 1319 => x"2b73902a",
- 1320 => x"7483ffff",
- 1321 => x"0671597f",
- 1322 => x"772a585e",
- 1323 => x"5c415f58",
- 1324 => x"5c5483e6",
- 1325 => x"3f800854",
- 1326 => x"83d03f80",
- 1327 => x"08800879",
- 1328 => x"2975902b",
- 1329 => x"7e902a07",
- 1330 => x"56565973",
- 1331 => x"75279938",
- 1332 => x"8008ff05",
- 1333 => x"7b155559",
- 1334 => x"7a74268c",
- 1335 => x"38737527",
- 1336 => x"8738ff19",
- 1337 => x"7b155559",
- 1338 => x"76527375",
- 1339 => x"315183aa",
- 1340 => x"3f800855",
- 1341 => x"83943f80",
- 1342 => x"08800879",
- 1343 => x"297d83ff",
- 1344 => x"ff067790",
- 1345 => x"2b075659",
- 1346 => x"57737827",
- 1347 => x"99388008",
- 1348 => x"ff057b15",
- 1349 => x"55577a74",
- 1350 => x"268c3873",
- 1351 => x"78278738",
- 1352 => x"ff177b15",
- 1353 => x"55577378",
- 1354 => x"3179902b",
- 1355 => x"78077083",
- 1356 => x"ffff0671",
- 1357 => x"902a7983",
- 1358 => x"ffff067a",
- 1359 => x"902a7372",
- 1360 => x"29737329",
- 1361 => x"74732976",
- 1362 => x"74297390",
- 1363 => x"2a057205",
- 1364 => x"5755435f",
- 1365 => x"5b585a57",
- 1366 => x"595a747c",
- 1367 => x"27863884",
- 1368 => x"80801757",
- 1369 => x"74902a17",
- 1370 => x"7983ffff",
- 1371 => x"06768480",
- 1372 => x"80290557",
- 1373 => x"57767a26",
- 1374 => x"9a38767a",
- 1375 => x"32703070",
- 1376 => x"72078025",
- 1377 => x"565a5b7c",
- 1378 => x"7627fafe",
- 1379 => x"3873802e",
- 1380 => x"faf838ff",
- 1381 => x"1858805b",
- 1382 => x"faf239ff",
- 1383 => x"76537754",
- 1384 => x"9f3de805",
- 1385 => x"525ef7e1",
- 1386 => x"3f676957",
- 1387 => x"4c754d69",
- 1388 => x"8025f8f3",
- 1389 => x"387d096a",
- 1390 => x"6c5c537a",
- 1391 => x"549f3de8",
- 1392 => x"05525ef7",
- 1393 => x"c43f6769",
- 1394 => x"714c704d",
- 1395 => x"5856f8db",
- 1396 => x"39a07531",
- 1397 => x"76762b7a",
- 1398 => x"772b7c73",
- 1399 => x"2a077c78",
- 1400 => x"2b72902a",
- 1401 => x"7383ffff",
- 1402 => x"0671587e",
- 1403 => x"762a5742",
- 1404 => x"405d5d57",
- 1405 => x"5881a33f",
- 1406 => x"80085781",
- 1407 => x"8d3f8008",
- 1408 => x"80087e29",
- 1409 => x"78902b7d",
- 1410 => x"902a0756",
- 1411 => x"56597375",
- 1412 => x"27993880",
- 1413 => x"08ff0576",
- 1414 => x"15555975",
- 1415 => x"74268c38",
- 1416 => x"73752787",
- 1417 => x"38ff1976",
- 1418 => x"1555597b",
- 1419 => x"52737531",
- 1420 => x"5180e73f",
- 1421 => x"80085580",
- 1422 => x"d13f8008",
- 1423 => x"80087e29",
- 1424 => x"7c83ffff",
- 1425 => x"06707890",
- 1426 => x"2b075156",
- 1427 => x"58587377",
- 1428 => x"27993880",
- 1429 => x"08ff0576",
- 1430 => x"15555875",
- 1431 => x"74268c38",
- 1432 => x"73772787",
- 1433 => x"38ff1876",
- 1434 => x"15555878",
- 1435 => x"902b7807",
- 1436 => x"74783155",
- 1437 => x"5bfada39",
- 1438 => x"ff197615",
- 1439 => x"5559fb86",
- 1440 => x"39ff1976",
- 1441 => x"155559f8",
- 1442 => x"c0397070",
- 1443 => x"70805375",
- 1444 => x"52745181",
- 1445 => x"913f5050",
- 1446 => x"50047070",
- 1447 => x"70815375",
- 1448 => x"52745181",
- 1449 => x"813f5050",
- 1450 => x"5004fb3d",
- 1451 => x"0d777955",
- 1452 => x"55805675",
- 1453 => x"7524ab38",
- 1454 => x"8074249d",
- 1455 => x"38805373",
- 1456 => x"52745180",
- 1457 => x"e13f8008",
- 1458 => x"5475802e",
- 1459 => x"85388008",
- 1460 => x"30547380",
- 1461 => x"0c873d0d",
- 1462 => x"04733076",
- 1463 => x"81325754",
- 1464 => x"dc397430",
- 1465 => x"55815673",
- 1466 => x"8025d238",
- 1467 => x"ec39fa3d",
- 1468 => x"0d787a57",
- 1469 => x"55805776",
- 1470 => x"7524a438",
- 1471 => x"759f2c54",
- 1472 => x"81537574",
- 1473 => x"32743152",
- 1474 => x"74519b3f",
- 1475 => x"80085476",
- 1476 => x"802e8538",
- 1477 => x"80083054",
- 1478 => x"73800c88",
- 1479 => x"3d0d0474",
- 1480 => x"30558157",
- 1481 => x"d739fc3d",
- 1482 => x"0d767853",
- 1483 => x"54815380",
- 1484 => x"74732652",
- 1485 => x"5572802e",
- 1486 => x"98387080",
- 1487 => x"2eab3880",
- 1488 => x"7224a638",
- 1489 => x"71107310",
- 1490 => x"75722653",
- 1491 => x"545272ea",
- 1492 => x"38735178",
- 1493 => x"83387451",
- 1494 => x"70800c86",
- 1495 => x"3d0d0472",
- 1496 => x"0a100a72",
- 1497 => x"0a100a53",
- 1498 => x"5372802e",
- 1499 => x"e4387174",
- 1500 => x"26ed3873",
- 1501 => x"72317574",
- 1502 => x"07740a10",
- 1503 => x"0a740a10",
- 1504 => x"0a555556",
- 1505 => x"54e33970",
- 1506 => x"70735280",
- 1507 => x"decc0851",
- 1508 => x"933f5050",
- 1509 => x"04707073",
- 1510 => x"5280decc",
- 1511 => x"085190ce",
- 1512 => x"3f505004",
- 1513 => x"f43d0d7e",
- 1514 => x"608b1170",
- 1515 => x"f8065b55",
- 1516 => x"555d7296",
- 1517 => x"26833890",
- 1518 => x"58807824",
- 1519 => x"74792607",
- 1520 => x"55805474",
- 1521 => x"742e0981",
- 1522 => x"0680ca38",
- 1523 => x"7c518d9e",
- 1524 => x"3f7783f7",
- 1525 => x"2680c538",
- 1526 => x"77832a70",
- 1527 => x"10101080",
- 1528 => x"d6c4058c",
- 1529 => x"11085858",
- 1530 => x"5475772e",
- 1531 => x"81f03884",
- 1532 => x"1608fc06",
- 1533 => x"8c170888",
- 1534 => x"1808718c",
- 1535 => x"120c8812",
- 1536 => x"0c5b7605",
- 1537 => x"84110881",
- 1538 => x"0784120c",
- 1539 => x"537c518c",
- 1540 => x"de3f8816",
- 1541 => x"5473800c",
- 1542 => x"8e3d0d04",
- 1543 => x"77892a78",
- 1544 => x"832a5854",
- 1545 => x"73802ebf",
- 1546 => x"3877862a",
- 1547 => x"b8055784",
- 1548 => x"7427b438",
- 1549 => x"80db1457",
- 1550 => x"947427ab",
- 1551 => x"38778c2a",
- 1552 => x"80ee0557",
- 1553 => x"80d47427",
- 1554 => x"9e38778f",
- 1555 => x"2a80f705",
- 1556 => x"5782d474",
- 1557 => x"27913877",
- 1558 => x"922a80fc",
- 1559 => x"05578ad4",
- 1560 => x"74278438",
- 1561 => x"80fe5776",
- 1562 => x"10101080",
- 1563 => x"d6c4058c",
- 1564 => x"11085653",
- 1565 => x"74732ea3",
- 1566 => x"38841508",
- 1567 => x"fc067079",
- 1568 => x"31555673",
- 1569 => x"8f2488e4",
- 1570 => x"38738025",
- 1571 => x"88e6388c",
- 1572 => x"15085574",
- 1573 => x"732e0981",
- 1574 => x"06df3881",
- 1575 => x"175980d6",
- 1576 => x"d4085675",
- 1577 => x"80d6cc2e",
- 1578 => x"82cc3884",
- 1579 => x"1608fc06",
- 1580 => x"70793155",
- 1581 => x"55738f24",
- 1582 => x"bb3880d6",
- 1583 => x"cc0b80d6",
- 1584 => x"d80c80d6",
- 1585 => x"cc0b80d6",
- 1586 => x"d40c8074",
- 1587 => x"2480db38",
- 1588 => x"74168411",
- 1589 => x"08810784",
- 1590 => x"120c53fe",
- 1591 => x"b0398816",
- 1592 => x"8c110857",
- 1593 => x"5975792e",
- 1594 => x"098106fe",
- 1595 => x"82388214",
- 1596 => x"59ffab39",
- 1597 => x"77167881",
- 1598 => x"0784180c",
- 1599 => x"7080d6d8",
- 1600 => x"0c7080d6",
- 1601 => x"d40c80d6",
- 1602 => x"cc0b8c12",
- 1603 => x"0c8c1108",
- 1604 => x"88120c74",
- 1605 => x"81078412",
- 1606 => x"0c740574",
- 1607 => x"710c5b7c",
- 1608 => x"518acc3f",
- 1609 => x"881654fd",
- 1610 => x"ec3983ff",
- 1611 => x"75278391",
- 1612 => x"3874892a",
- 1613 => x"75832a54",
- 1614 => x"5473802e",
- 1615 => x"bf387486",
- 1616 => x"2ab80553",
- 1617 => x"847427b4",
- 1618 => x"3880db14",
- 1619 => x"53947427",
- 1620 => x"ab38748c",
- 1621 => x"2a80ee05",
- 1622 => x"5380d474",
- 1623 => x"279e3874",
- 1624 => x"8f2a80f7",
- 1625 => x"055382d4",
- 1626 => x"74279138",
- 1627 => x"74922a80",
- 1628 => x"fc05538a",
- 1629 => x"d4742784",
- 1630 => x"3880fe53",
- 1631 => x"72101010",
- 1632 => x"80d6c405",
- 1633 => x"88110855",
- 1634 => x"5773772e",
- 1635 => x"868b3884",
- 1636 => x"1408fc06",
- 1637 => x"5b747b27",
- 1638 => x"8d388814",
- 1639 => x"08547377",
- 1640 => x"2e098106",
- 1641 => x"ea388c14",
- 1642 => x"0880d6c4",
- 1643 => x"0b840508",
- 1644 => x"718c190c",
- 1645 => x"7588190c",
- 1646 => x"7788130c",
- 1647 => x"5c57758c",
- 1648 => x"150c7853",
- 1649 => x"80792483",
- 1650 => x"98387282",
- 1651 => x"2c81712b",
- 1652 => x"5656747b",
- 1653 => x"2680ca38",
- 1654 => x"7a750657",
- 1655 => x"7682a338",
- 1656 => x"78fc0684",
- 1657 => x"05597410",
- 1658 => x"707c0655",
- 1659 => x"55738292",
- 1660 => x"38841959",
- 1661 => x"f13980d6",
- 1662 => x"c40b8405",
- 1663 => x"0879545b",
- 1664 => x"788025c6",
- 1665 => x"3882da39",
- 1666 => x"74097b06",
- 1667 => x"7080d6c4",
- 1668 => x"0b84050c",
- 1669 => x"5b741055",
- 1670 => x"747b2685",
- 1671 => x"387485bc",
- 1672 => x"3880d6c4",
- 1673 => x"0b880508",
- 1674 => x"70841208",
- 1675 => x"fc06707b",
- 1676 => x"317b7226",
- 1677 => x"8f722507",
- 1678 => x"5d575c5c",
- 1679 => x"5578802e",
- 1680 => x"80d93879",
- 1681 => x"1580d6bc",
- 1682 => x"08199011",
- 1683 => x"59545680",
- 1684 => x"d6b808ff",
- 1685 => x"2e8838a0",
- 1686 => x"8f13e080",
- 1687 => x"06577652",
- 1688 => x"7c51888c",
- 1689 => x"3f800854",
- 1690 => x"8008ff2e",
- 1691 => x"90388008",
- 1692 => x"762782a7",
- 1693 => x"387480d6",
- 1694 => x"c42e829f",
- 1695 => x"3880d6c4",
- 1696 => x"0b880508",
- 1697 => x"55841508",
- 1698 => x"fc067079",
- 1699 => x"31797226",
- 1700 => x"8f722507",
- 1701 => x"5d555a7a",
- 1702 => x"83f23877",
- 1703 => x"81078416",
- 1704 => x"0c771570",
- 1705 => x"80d6c40b",
- 1706 => x"88050c74",
- 1707 => x"81078412",
- 1708 => x"0c567c51",
- 1709 => x"87b93f88",
- 1710 => x"15547380",
- 1711 => x"0c8e3d0d",
- 1712 => x"0474832a",
- 1713 => x"70545480",
- 1714 => x"7424819b",
- 1715 => x"3872822c",
- 1716 => x"81712b80",
- 1717 => x"d6c80807",
- 1718 => x"7080d6c4",
- 1719 => x"0b84050c",
- 1720 => x"75101010",
- 1721 => x"80d6c405",
- 1722 => x"88110871",
- 1723 => x"8c1b0c70",
- 1724 => x"881b0c79",
- 1725 => x"88130c57",
- 1726 => x"555c5575",
- 1727 => x"8c150cfd",
- 1728 => x"c1397879",
- 1729 => x"10101080",
- 1730 => x"d6c40570",
- 1731 => x"565b5c8c",
- 1732 => x"14085675",
- 1733 => x"742ea338",
- 1734 => x"841608fc",
- 1735 => x"06707931",
- 1736 => x"5853768f",
- 1737 => x"2483f138",
- 1738 => x"76802584",
- 1739 => x"af388c16",
- 1740 => x"08567574",
- 1741 => x"2e098106",
- 1742 => x"df388814",
- 1743 => x"811a7083",
- 1744 => x"06555a54",
- 1745 => x"72c9387b",
- 1746 => x"83065675",
- 1747 => x"802efdb8",
- 1748 => x"38ff1cf8",
- 1749 => x"1b5b5c88",
- 1750 => x"1a087a2e",
- 1751 => x"ea38fdb5",
- 1752 => x"39831953",
- 1753 => x"fce43983",
- 1754 => x"1470822c",
- 1755 => x"81712b80",
- 1756 => x"d6c80807",
- 1757 => x"7080d6c4",
- 1758 => x"0b84050c",
- 1759 => x"76101010",
- 1760 => x"80d6c405",
- 1761 => x"88110871",
- 1762 => x"8c1c0c70",
- 1763 => x"881c0c7a",
- 1764 => x"88130c58",
- 1765 => x"535d5653",
- 1766 => x"fee13980",
- 1767 => x"d6880817",
- 1768 => x"59800876",
- 1769 => x"2e818b38",
- 1770 => x"80d6b808",
- 1771 => x"ff2e848e",
- 1772 => x"38737631",
- 1773 => x"1980d688",
- 1774 => x"0c738706",
- 1775 => x"70565372",
- 1776 => x"802e8838",
- 1777 => x"88733170",
- 1778 => x"15555576",
- 1779 => x"149fff06",
- 1780 => x"a0807131",
- 1781 => x"1670547e",
- 1782 => x"53515385",
- 1783 => x"933f8008",
- 1784 => x"568008ff",
- 1785 => x"2e819e38",
- 1786 => x"80d68808",
- 1787 => x"137080d6",
- 1788 => x"880c7475",
- 1789 => x"80d6c40b",
- 1790 => x"88050c77",
- 1791 => x"76311581",
- 1792 => x"07555659",
- 1793 => x"7a80d6c4",
- 1794 => x"2e83c038",
- 1795 => x"798f2682",
- 1796 => x"ef38810b",
- 1797 => x"84150c84",
- 1798 => x"1508fc06",
- 1799 => x"70793179",
- 1800 => x"72268f72",
- 1801 => x"25075d55",
- 1802 => x"5a7a802e",
- 1803 => x"fced3880",
- 1804 => x"db398008",
- 1805 => x"9fff0655",
- 1806 => x"74feed38",
- 1807 => x"7880d688",
- 1808 => x"0c80d6c4",
- 1809 => x"0b880508",
- 1810 => x"7a188107",
- 1811 => x"84120c55",
- 1812 => x"80d6b408",
- 1813 => x"79278638",
- 1814 => x"7880d6b4",
- 1815 => x"0c80d6b0",
- 1816 => x"087927fc",
- 1817 => x"a0387880",
- 1818 => x"d6b00c84",
- 1819 => x"1508fc06",
- 1820 => x"70793179",
- 1821 => x"72268f72",
- 1822 => x"25075d55",
- 1823 => x"5a7a802e",
- 1824 => x"fc993888",
- 1825 => x"39807457",
- 1826 => x"53fedd39",
- 1827 => x"7c5183df",
- 1828 => x"3f800b80",
- 1829 => x"0c8e3d0d",
- 1830 => x"04807324",
- 1831 => x"a5387282",
- 1832 => x"2c81712b",
- 1833 => x"80d6c808",
- 1834 => x"077080d6",
- 1835 => x"c40b8405",
- 1836 => x"0c5c5a76",
- 1837 => x"8c170c73",
- 1838 => x"88170c75",
- 1839 => x"88180cf9",
- 1840 => x"fd398313",
- 1841 => x"70822c81",
- 1842 => x"712b80d6",
- 1843 => x"c8080770",
- 1844 => x"80d6c40b",
- 1845 => x"84050c5d",
- 1846 => x"5b53d839",
- 1847 => x"7a75065c",
- 1848 => x"7bfc9f38",
- 1849 => x"84197510",
- 1850 => x"5659f139",
- 1851 => x"ff178105",
- 1852 => x"59f7ab39",
- 1853 => x"8c150888",
- 1854 => x"1608718c",
- 1855 => x"120c8812",
- 1856 => x"0c597515",
- 1857 => x"84110881",
- 1858 => x"0784120c",
- 1859 => x"587c5182",
- 1860 => x"de3f8815",
- 1861 => x"54fba339",
- 1862 => x"77167881",
- 1863 => x"0784180c",
- 1864 => x"8c170888",
- 1865 => x"1808718c",
- 1866 => x"120c8812",
- 1867 => x"0c5c7080",
- 1868 => x"d6d80c70",
- 1869 => x"80d6d40c",
- 1870 => x"80d6cc0b",
- 1871 => x"8c120c8c",
- 1872 => x"11088812",
- 1873 => x"0c778107",
- 1874 => x"84120c77",
- 1875 => x"0577710c",
- 1876 => x"557c5182",
- 1877 => x"9a3f8816",
- 1878 => x"54f5ba39",
- 1879 => x"72168411",
- 1880 => x"08810784",
- 1881 => x"120c588c",
- 1882 => x"16088817",
- 1883 => x"08718c12",
- 1884 => x"0c88120c",
- 1885 => x"577c5181",
- 1886 => x"f63f8816",
- 1887 => x"54f59639",
- 1888 => x"7284150c",
- 1889 => x"f41af806",
- 1890 => x"70841d08",
- 1891 => x"81060784",
- 1892 => x"1d0c701c",
- 1893 => x"5556850b",
- 1894 => x"84150c85",
- 1895 => x"0b88150c",
- 1896 => x"8f7627fd",
- 1897 => x"ab38881b",
- 1898 => x"527c5184",
- 1899 => x"c13f80d6",
- 1900 => x"c40b8805",
- 1901 => x"0880d688",
- 1902 => x"085a55fd",
- 1903 => x"93397880",
- 1904 => x"d6880c73",
- 1905 => x"80d6b80c",
- 1906 => x"fbef3972",
- 1907 => x"84150cfc",
- 1908 => x"ff39fb3d",
- 1909 => x"0d77707a",
- 1910 => x"7c585553",
- 1911 => x"568f7527",
- 1912 => x"80e63872",
- 1913 => x"76078306",
- 1914 => x"517080dc",
- 1915 => x"38757352",
- 1916 => x"54707084",
- 1917 => x"05520874",
- 1918 => x"70840556",
- 1919 => x"0c737170",
- 1920 => x"84055308",
- 1921 => x"71708405",
- 1922 => x"530c7170",
- 1923 => x"84055308",
- 1924 => x"71708405",
- 1925 => x"530c7170",
- 1926 => x"84055308",
- 1927 => x"71708405",
- 1928 => x"530cf016",
- 1929 => x"5654748f",
- 1930 => x"26c73883",
- 1931 => x"75279538",
- 1932 => x"70708405",
- 1933 => x"52087470",
- 1934 => x"8405560c",
- 1935 => x"fc155574",
- 1936 => x"8326ed38",
- 1937 => x"73715452",
- 1938 => x"ff155170",
- 1939 => x"ff2e9838",
- 1940 => x"72708105",
- 1941 => x"54337270",
- 1942 => x"81055434",
- 1943 => x"ff115170",
- 1944 => x"ff2e0981",
- 1945 => x"06ea3875",
- 1946 => x"800c873d",
- 1947 => x"0d040404",
- 1948 => x"70707070",
- 1949 => x"800b81b6",
- 1950 => x"9c0c7651",
- 1951 => x"87cc3f80",
- 1952 => x"08538008",
- 1953 => x"ff2e8938",
- 1954 => x"72800c50",
- 1955 => x"50505004",
- 1956 => x"81b69c08",
- 1957 => x"5473802e",
- 1958 => x"ef387574",
- 1959 => x"710c5272",
- 1960 => x"800c5050",
- 1961 => x"505004fb",
- 1962 => x"3d0d7779",
- 1963 => x"70720783",
- 1964 => x"06535452",
- 1965 => x"70933871",
- 1966 => x"73730854",
- 1967 => x"56547173",
- 1968 => x"082e80c4",
- 1969 => x"38737554",
- 1970 => x"52713370",
- 1971 => x"81ff0652",
- 1972 => x"5470802e",
- 1973 => x"9d387233",
- 1974 => x"5570752e",
- 1975 => x"09810695",
- 1976 => x"38811281",
- 1977 => x"14713370",
- 1978 => x"81ff0654",
- 1979 => x"56545270",
- 1980 => x"e5387233",
- 1981 => x"557381ff",
- 1982 => x"067581ff",
- 1983 => x"06717131",
- 1984 => x"800c5552",
- 1985 => x"873d0d04",
- 1986 => x"7109f7fb",
- 1987 => x"fdff1306",
- 1988 => x"f8848281",
- 1989 => x"80065271",
- 1990 => x"97388414",
- 1991 => x"84167108",
- 1992 => x"54565471",
- 1993 => x"75082ee0",
- 1994 => x"38737554",
- 1995 => x"52ff9a39",
- 1996 => x"800b800c",
- 1997 => x"873d0d04",
- 1998 => x"fb3d0d77",
- 1999 => x"705256fe",
- 2000 => x"ad3f80d6",
- 2001 => x"c40b8805",
- 2002 => x"08841108",
- 2003 => x"fc06707b",
- 2004 => x"319fef05",
- 2005 => x"e08006e0",
- 2006 => x"80055255",
- 2007 => x"55a08075",
- 2008 => x"24943880",
- 2009 => x"527551fe",
- 2010 => x"873f80d6",
- 2011 => x"cc081453",
- 2012 => x"7280082e",
- 2013 => x"8f387551",
- 2014 => x"fdf53f80",
- 2015 => x"5372800c",
- 2016 => x"873d0d04",
- 2017 => x"74305275",
- 2018 => x"51fde53f",
- 2019 => x"8008ff2e",
- 2020 => x"a83880d6",
- 2021 => x"c40b8805",
- 2022 => x"08747631",
- 2023 => x"81078412",
- 2024 => x"0c5380d6",
- 2025 => x"88087531",
- 2026 => x"80d6880c",
- 2027 => x"7551fdbf",
- 2028 => x"3f810b80",
- 2029 => x"0c873d0d",
- 2030 => x"04805275",
- 2031 => x"51fdb13f",
- 2032 => x"80d6c40b",
- 2033 => x"88050880",
- 2034 => x"08713154",
- 2035 => x"548f7325",
- 2036 => x"ffa43880",
- 2037 => x"0880d6b8",
- 2038 => x"083180d6",
- 2039 => x"880c7281",
- 2040 => x"0784150c",
- 2041 => x"7551fd87",
- 2042 => x"3f8053ff",
- 2043 => x"9039f73d",
- 2044 => x"0d7b7d54",
- 2045 => x"5a72802e",
- 2046 => x"82833879",
- 2047 => x"51fcef3f",
- 2048 => x"f8138411",
- 2049 => x"0870fe06",
- 2050 => x"70138411",
- 2051 => x"08fc065c",
- 2052 => x"57585457",
- 2053 => x"80d6cc08",
- 2054 => x"742e82de",
- 2055 => x"38778415",
- 2056 => x"0c807381",
- 2057 => x"06565974",
- 2058 => x"792e81d5",
- 2059 => x"38771484",
- 2060 => x"11088106",
- 2061 => x"565374a0",
- 2062 => x"38771656",
- 2063 => x"7881e638",
- 2064 => x"88140855",
- 2065 => x"7480d6cc",
- 2066 => x"2e82f938",
- 2067 => x"8c140870",
- 2068 => x"8c170c75",
- 2069 => x"88120c58",
- 2070 => x"75810784",
- 2071 => x"180c7517",
- 2072 => x"76710c54",
- 2073 => x"78819138",
- 2074 => x"83ff7627",
- 2075 => x"81c83875",
- 2076 => x"892a7683",
- 2077 => x"2a545473",
- 2078 => x"802ebf38",
- 2079 => x"75862ab8",
- 2080 => x"05538474",
- 2081 => x"27b43880",
- 2082 => x"db145394",
- 2083 => x"7427ab38",
- 2084 => x"758c2a80",
- 2085 => x"ee055380",
- 2086 => x"d474279e",
- 2087 => x"38758f2a",
- 2088 => x"80f70553",
- 2089 => x"82d47427",
- 2090 => x"91387592",
- 2091 => x"2a80fc05",
- 2092 => x"538ad474",
- 2093 => x"27843880",
- 2094 => x"fe537210",
- 2095 => x"101080d6",
- 2096 => x"c4058811",
- 2097 => x"08555573",
- 2098 => x"752e82bf",
- 2099 => x"38841408",
- 2100 => x"fc065975",
- 2101 => x"79278d38",
- 2102 => x"88140854",
- 2103 => x"73752e09",
- 2104 => x"8106ea38",
- 2105 => x"8c140870",
- 2106 => x"8c190c74",
- 2107 => x"88190c77",
- 2108 => x"88120c55",
- 2109 => x"768c150c",
- 2110 => x"7951faf3",
- 2111 => x"3f8b3d0d",
- 2112 => x"04760877",
- 2113 => x"71315876",
- 2114 => x"05881808",
- 2115 => x"56567480",
- 2116 => x"d6cc2e80",
- 2117 => x"e0388c17",
- 2118 => x"08708c17",
- 2119 => x"0c758812",
- 2120 => x"0c53fe89",
- 2121 => x"39881408",
- 2122 => x"8c150870",
- 2123 => x"8c130c59",
- 2124 => x"88190cfe",
- 2125 => x"a3397583",
- 2126 => x"2a705454",
- 2127 => x"80742481",
- 2128 => x"98387282",
- 2129 => x"2c81712b",
- 2130 => x"80d6c808",
- 2131 => x"0780d6c4",
- 2132 => x"0b84050c",
- 2133 => x"74101010",
- 2134 => x"80d6c405",
- 2135 => x"88110871",
- 2136 => x"8c1b0c70",
- 2137 => x"881b0c79",
- 2138 => x"88130c56",
- 2139 => x"5a55768c",
- 2140 => x"150cff84",
- 2141 => x"398159fd",
- 2142 => x"b4397716",
- 2143 => x"73810654",
- 2144 => x"55729838",
- 2145 => x"76087771",
- 2146 => x"31587505",
- 2147 => x"8c180888",
- 2148 => x"1908718c",
- 2149 => x"120c8812",
- 2150 => x"0c555574",
- 2151 => x"81078418",
- 2152 => x"0c7680d6",
- 2153 => x"c40b8805",
- 2154 => x"0c80d6c0",
- 2155 => x"087526fe",
- 2156 => x"c73880d6",
- 2157 => x"bc085279",
- 2158 => x"51fafd3f",
- 2159 => x"7951f9af",
- 2160 => x"3ffeba39",
- 2161 => x"81778c17",
- 2162 => x"0c778817",
- 2163 => x"0c758c19",
- 2164 => x"0c758819",
- 2165 => x"0c59fd80",
- 2166 => x"39831470",
- 2167 => x"822c8171",
- 2168 => x"2b80d6c8",
- 2169 => x"080780d6",
- 2170 => x"c40b8405",
- 2171 => x"0c751010",
- 2172 => x"1080d6c4",
- 2173 => x"05881108",
- 2174 => x"718c1c0c",
- 2175 => x"70881c0c",
- 2176 => x"7a88130c",
- 2177 => x"575b5653",
- 2178 => x"fee43980",
- 2179 => x"7324a338",
- 2180 => x"72822c81",
- 2181 => x"712b80d6",
- 2182 => x"c8080780",
- 2183 => x"d6c40b84",
- 2184 => x"050c5874",
- 2185 => x"8c180c73",
- 2186 => x"88180c76",
- 2187 => x"88160cfd",
- 2188 => x"c3398313",
- 2189 => x"70822c81",
- 2190 => x"712b80d6",
- 2191 => x"c8080780",
- 2192 => x"d6c40b84",
- 2193 => x"050c5953",
- 2194 => x"da397070",
- 2195 => x"7080e5f4",
- 2196 => x"08893881",
- 2197 => x"b6a00b80",
- 2198 => x"e5f40c80",
- 2199 => x"e5f40875",
- 2200 => x"115252ff",
- 2201 => x"537087fb",
- 2202 => x"80802688",
- 2203 => x"387080e5",
- 2204 => x"f40c7153",
- 2205 => x"72800c50",
- 2206 => x"505004fd",
- 2207 => x"3d0d800b",
- 2208 => x"80d5f408",
- 2209 => x"54547281",
- 2210 => x"2e9b3873",
- 2211 => x"80e5f80c",
- 2212 => x"c3ee3fc2",
- 2213 => x"eb3f80e5",
- 2214 => x"cc528151",
- 2215 => x"cc933f80",
- 2216 => x"085180dd",
- 2217 => x"3f7280e5",
- 2218 => x"f80cc3d4",
- 2219 => x"3fc2d13f",
- 2220 => x"80e5cc52",
- 2221 => x"8151cbf9",
- 2222 => x"3f800851",
- 2223 => x"80c33f00",
- 2224 => x"ff3900ff",
- 2225 => x"39f43d0d",
- 2226 => x"7e80e5ec",
- 2227 => x"08700870",
- 2228 => x"81ff0692",
- 2229 => x"3df80555",
- 2230 => x"515a5759",
- 2231 => x"c48f3f80",
- 2232 => x"5477557b",
- 2233 => x"7d585276",
- 2234 => x"538e3df0",
- 2235 => x"0551de8e",
- 2236 => x"3f797b58",
- 2237 => x"790c7684",
- 2238 => x"1a0c7880",
- 2239 => x"0c8e3d0d",
- 2240 => x"04f73d0d",
- 2241 => x"7b80decc",
- 2242 => x"0882c811",
- 2243 => x"085a545a",
- 2244 => x"77802e80",
- 2245 => x"da388188",
- 2246 => x"18841908",
- 2247 => x"ff058171",
- 2248 => x"2b595559",
- 2249 => x"80742480",
- 2250 => x"ea388074",
- 2251 => x"24b53873",
- 2252 => x"822b7811",
- 2253 => x"88055656",
- 2254 => x"81801908",
- 2255 => x"77065372",
- 2256 => x"802eb638",
- 2257 => x"78167008",
- 2258 => x"53537951",
- 2259 => x"74085372",
- 2260 => x"2dff14fc",
- 2261 => x"17fc1779",
- 2262 => x"812c5a57",
- 2263 => x"57547380",
- 2264 => x"25d63877",
- 2265 => x"085877ff",
- 2266 => x"ad3880de",
- 2267 => x"cc0853bc",
- 2268 => x"1308a538",
- 2269 => x"7951fec7",
- 2270 => x"3f740853",
- 2271 => x"722dff14",
- 2272 => x"fc17fc17",
- 2273 => x"79812c5a",
- 2274 => x"57575473",
- 2275 => x"8025ffa8",
- 2276 => x"38d13980",
- 2277 => x"57ff9339",
- 2278 => x"7251bc13",
- 2279 => x"0854732d",
- 2280 => x"7951fe9b",
- 2281 => x"3f707080",
- 2282 => x"e5d40bfc",
- 2283 => x"05700852",
- 2284 => x"5270ff2e",
- 2285 => x"9138702d",
- 2286 => x"fc127008",
- 2287 => x"525270ff",
- 2288 => x"2e098106",
- 2289 => x"f1385050",
- 2290 => x"0404c2ff",
- 2291 => x"3f040000",
- 2292 => x"00000040",
- 2293 => x"30313233",
- 2294 => x"34353637",
- 2295 => x"38390000",
- 2296 => x"44485259",
- 2297 => x"53544f4e",
- 2298 => x"45205052",
- 2299 => x"4f475241",
- 2300 => x"4d2c2053",
- 2301 => x"4f4d4520",
- 2302 => x"53545249",
- 2303 => x"4e470000",
- 2304 => x"44485259",
- 2305 => x"53544f4e",
- 2306 => x"45205052",
- 2307 => x"4f475241",
- 2308 => x"4d2c2031",
- 2309 => x"27535420",
- 2310 => x"53545249",
- 2311 => x"4e470000",
- 2312 => x"44687279",
- 2313 => x"73746f6e",
- 2314 => x"65204265",
- 2315 => x"6e63686d",
- 2316 => x"61726b2c",
- 2317 => x"20566572",
- 2318 => x"73696f6e",
- 2319 => x"20322e31",
- 2320 => x"20284c61",
- 2321 => x"6e677561",
- 2322 => x"67653a20",
- 2323 => x"43290a00",
- 2324 => x"50726f67",
- 2325 => x"72616d20",
- 2326 => x"636f6d70",
- 2327 => x"696c6564",
- 2328 => x"20776974",
- 2329 => x"68202772",
- 2330 => x"65676973",
- 2331 => x"74657227",
- 2332 => x"20617474",
- 2333 => x"72696275",
- 2334 => x"74650a00",
- 2335 => x"45786563",
- 2336 => x"7574696f",
- 2337 => x"6e207374",
- 2338 => x"61727473",
- 2339 => x"2c202564",
- 2340 => x"2072756e",
- 2341 => x"73207468",
- 2342 => x"726f7567",
- 2343 => x"68204468",
- 2344 => x"72797374",
- 2345 => x"6f6e650a",
- 2346 => x"00000000",
- 2347 => x"44485259",
- 2348 => x"53544f4e",
- 2349 => x"45205052",
- 2350 => x"4f475241",
- 2351 => x"4d2c2032",
- 2352 => x"274e4420",
- 2353 => x"53545249",
- 2354 => x"4e470000",
- 2355 => x"45786563",
- 2356 => x"7574696f",
- 2357 => x"6e20656e",
- 2358 => x"64730a00",
- 2359 => x"46696e61",
- 2360 => x"6c207661",
- 2361 => x"6c756573",
- 2362 => x"206f6620",
- 2363 => x"74686520",
- 2364 => x"76617269",
- 2365 => x"61626c65",
- 2366 => x"73207573",
- 2367 => x"65642069",
- 2368 => x"6e207468",
- 2369 => x"65206265",
- 2370 => x"6e63686d",
- 2371 => x"61726b3a",
- 2372 => x"0a000000",
- 2373 => x"496e745f",
- 2374 => x"476c6f62",
- 2375 => x"3a202020",
- 2376 => x"20202020",
- 2377 => x"20202020",
- 2378 => x"2025640a",
- 2379 => x"00000000",
- 2380 => x"20202020",
- 2381 => x"20202020",
- 2382 => x"73686f75",
- 2383 => x"6c642062",
- 2384 => x"653a2020",
- 2385 => x"2025640a",
- 2386 => x"00000000",
- 2387 => x"426f6f6c",
- 2388 => x"5f476c6f",
- 2389 => x"623a2020",
- 2390 => x"20202020",
- 2391 => x"20202020",
- 2392 => x"2025640a",
- 2393 => x"00000000",
- 2394 => x"43685f31",
- 2395 => x"5f476c6f",
- 2396 => x"623a2020",
- 2397 => x"20202020",
- 2398 => x"20202020",
- 2399 => x"2025630a",
- 2400 => x"00000000",
- 2401 => x"20202020",
- 2402 => x"20202020",
- 2403 => x"73686f75",
- 2404 => x"6c642062",
- 2405 => x"653a2020",
- 2406 => x"2025630a",
- 2407 => x"00000000",
- 2408 => x"43685f32",
- 2409 => x"5f476c6f",
- 2410 => x"623a2020",
- 2411 => x"20202020",
- 2412 => x"20202020",
- 2413 => x"2025630a",
- 2414 => x"00000000",
- 2415 => x"4172725f",
- 2416 => x"315f476c",
- 2417 => x"6f625b38",
- 2418 => x"5d3a2020",
- 2419 => x"20202020",
- 2420 => x"2025640a",
- 2421 => x"00000000",
- 2422 => x"4172725f",
- 2423 => x"325f476c",
- 2424 => x"6f625b38",
- 2425 => x"5d5b375d",
- 2426 => x"3a202020",
- 2427 => x"2025640a",
- 2428 => x"00000000",
- 2429 => x"20202020",
- 2430 => x"20202020",
- 2431 => x"73686f75",
- 2432 => x"6c642062",
- 2433 => x"653a2020",
- 2434 => x"204e756d",
- 2435 => x"6265725f",
- 2436 => x"4f665f52",
- 2437 => x"756e7320",
- 2438 => x"2b203130",
- 2439 => x"0a000000",
- 2440 => x"5074725f",
- 2441 => x"476c6f62",
- 2442 => x"2d3e0a00",
- 2443 => x"20205074",
- 2444 => x"725f436f",
- 2445 => x"6d703a20",
- 2446 => x"20202020",
- 2447 => x"20202020",
- 2448 => x"2025640a",
- 2449 => x"00000000",
- 2450 => x"20202020",
- 2451 => x"20202020",
- 2452 => x"73686f75",
- 2453 => x"6c642062",
- 2454 => x"653a2020",
- 2455 => x"2028696d",
- 2456 => x"706c656d",
- 2457 => x"656e7461",
- 2458 => x"74696f6e",
- 2459 => x"2d646570",
- 2460 => x"656e6465",
- 2461 => x"6e74290a",
- 2462 => x"00000000",
- 2463 => x"20204469",
- 2464 => x"7363723a",
- 2465 => x"20202020",
- 2466 => x"20202020",
- 2467 => x"20202020",
- 2468 => x"2025640a",
- 2469 => x"00000000",
- 2470 => x"2020456e",
- 2471 => x"756d5f43",
- 2472 => x"6f6d703a",
- 2473 => x"20202020",
- 2474 => x"20202020",
- 2475 => x"2025640a",
- 2476 => x"00000000",
- 2477 => x"2020496e",
- 2478 => x"745f436f",
- 2479 => x"6d703a20",
- 2480 => x"20202020",
- 2481 => x"20202020",
- 2482 => x"2025640a",
- 2483 => x"00000000",
- 2484 => x"20205374",
- 2485 => x"725f436f",
- 2486 => x"6d703a20",
- 2487 => x"20202020",
- 2488 => x"20202020",
- 2489 => x"2025730a",
- 2490 => x"00000000",
- 2491 => x"20202020",
- 2492 => x"20202020",
- 2493 => x"73686f75",
- 2494 => x"6c642062",
- 2495 => x"653a2020",
- 2496 => x"20444852",
- 2497 => x"5953544f",
- 2498 => x"4e452050",
- 2499 => x"524f4752",
- 2500 => x"414d2c20",
- 2501 => x"534f4d45",
- 2502 => x"20535452",
- 2503 => x"494e470a",
- 2504 => x"00000000",
- 2505 => x"4e657874",
- 2506 => x"5f507472",
- 2507 => x"5f476c6f",
- 2508 => x"622d3e0a",
- 2509 => x"00000000",
- 2510 => x"20202020",
- 2511 => x"20202020",
- 2512 => x"73686f75",
- 2513 => x"6c642062",
- 2514 => x"653a2020",
- 2515 => x"2028696d",
- 2516 => x"706c656d",
- 2517 => x"656e7461",
- 2518 => x"74696f6e",
- 2519 => x"2d646570",
- 2520 => x"656e6465",
- 2521 => x"6e74292c",
- 2522 => x"2073616d",
- 2523 => x"65206173",
- 2524 => x"2061626f",
- 2525 => x"76650a00",
- 2526 => x"496e745f",
- 2527 => x"315f4c6f",
- 2528 => x"633a2020",
- 2529 => x"20202020",
- 2530 => x"20202020",
- 2531 => x"2025640a",
- 2532 => x"00000000",
- 2533 => x"496e745f",
- 2534 => x"325f4c6f",
- 2535 => x"633a2020",
- 2536 => x"20202020",
- 2537 => x"20202020",
- 2538 => x"2025640a",
- 2539 => x"00000000",
- 2540 => x"496e745f",
- 2541 => x"335f4c6f",
- 2542 => x"633a2020",
- 2543 => x"20202020",
- 2544 => x"20202020",
- 2545 => x"2025640a",
- 2546 => x"00000000",
- 2547 => x"456e756d",
- 2548 => x"5f4c6f63",
- 2549 => x"3a202020",
- 2550 => x"20202020",
- 2551 => x"20202020",
- 2552 => x"2025640a",
- 2553 => x"00000000",
- 2554 => x"5374725f",
- 2555 => x"315f4c6f",
- 2556 => x"633a2020",
- 2557 => x"20202020",
- 2558 => x"20202020",
- 2559 => x"2025730a",
- 2560 => x"00000000",
- 2561 => x"20202020",
- 2562 => x"20202020",
- 2563 => x"73686f75",
- 2564 => x"6c642062",
- 2565 => x"653a2020",
- 2566 => x"20444852",
- 2567 => x"5953544f",
- 2568 => x"4e452050",
- 2569 => x"524f4752",
- 2570 => x"414d2c20",
- 2571 => x"31275354",
- 2572 => x"20535452",
- 2573 => x"494e470a",
- 2574 => x"00000000",
- 2575 => x"5374725f",
- 2576 => x"325f4c6f",
- 2577 => x"633a2020",
- 2578 => x"20202020",
- 2579 => x"20202020",
- 2580 => x"2025730a",
- 2581 => x"00000000",
- 2582 => x"20202020",
- 2583 => x"20202020",
- 2584 => x"73686f75",
- 2585 => x"6c642062",
- 2586 => x"653a2020",
- 2587 => x"20444852",
- 2588 => x"5953544f",
- 2589 => x"4e452050",
- 2590 => x"524f4752",
- 2591 => x"414d2c20",
- 2592 => x"32274e44",
- 2593 => x"20535452",
- 2594 => x"494e470a",
- 2595 => x"00000000",
- 2596 => x"55736572",
- 2597 => x"2074696d",
- 2598 => x"653a2025",
- 2599 => x"640a0000",
- 2600 => x"4d696372",
- 2601 => x"6f736563",
- 2602 => x"6f6e6473",
- 2603 => x"20666f72",
- 2604 => x"206f6e65",
- 2605 => x"2072756e",
- 2606 => x"20746872",
- 2607 => x"6f756768",
- 2608 => x"20446872",
- 2609 => x"7973746f",
- 2610 => x"6e653a20",
- 2611 => x"00000000",
- 2612 => x"2564200a",
- 2613 => x"00000000",
- 2614 => x"44687279",
- 2615 => x"73746f6e",
- 2616 => x"65732070",
- 2617 => x"65722053",
- 2618 => x"65636f6e",
- 2619 => x"643a2020",
- 2620 => x"20202020",
- 2621 => x"20202020",
- 2622 => x"20202020",
- 2623 => x"20202020",
- 2624 => x"20202020",
- 2625 => x"00000000",
- 2626 => x"56415820",
- 2627 => x"4d495053",
- 2628 => x"20726174",
- 2629 => x"696e6720",
- 2630 => x"2a203130",
- 2631 => x"3030203d",
- 2632 => x"20256420",
- 2633 => x"0a000000",
- 2634 => x"50726f67",
- 2635 => x"72616d20",
- 2636 => x"636f6d70",
- 2637 => x"696c6564",
- 2638 => x"20776974",
- 2639 => x"686f7574",
- 2640 => x"20277265",
- 2641 => x"67697374",
- 2642 => x"65722720",
- 2643 => x"61747472",
- 2644 => x"69627574",
- 2645 => x"650a0000",
- 2646 => x"4d656173",
- 2647 => x"75726564",
- 2648 => x"2074696d",
- 2649 => x"6520746f",
- 2650 => x"6f20736d",
- 2651 => x"616c6c20",
- 2652 => x"746f206f",
- 2653 => x"62746169",
- 2654 => x"6e206d65",
- 2655 => x"616e696e",
- 2656 => x"6766756c",
- 2657 => x"20726573",
- 2658 => x"756c7473",
- 2659 => x"0a000000",
- 2660 => x"506c6561",
- 2661 => x"73652069",
- 2662 => x"6e637265",
- 2663 => x"61736520",
- 2664 => x"6e756d62",
- 2665 => x"6572206f",
- 2666 => x"66207275",
- 2667 => x"6e730a00",
- 2668 => x"44485259",
- 2669 => x"53544f4e",
- 2670 => x"45205052",
- 2671 => x"4f475241",
- 2672 => x"4d2c2033",
- 2673 => x"27524420",
- 2674 => x"53545249",
- 2675 => x"4e470000",
- 2676 => x"00010202",
- 2677 => x"03030303",
- 2678 => x"04040404",
- 2679 => x"04040404",
- 2680 => x"05050505",
- 2681 => x"05050505",
- 2682 => x"05050505",
- 2683 => x"05050505",
- 2684 => x"06060606",
- 2685 => x"06060606",
- 2686 => x"06060606",
- 2687 => x"06060606",
- 2688 => x"06060606",
- 2689 => x"06060606",
- 2690 => x"06060606",
- 2691 => x"06060606",
- 2692 => x"07070707",
- 2693 => x"07070707",
- 2694 => x"07070707",
- 2695 => x"07070707",
- 2696 => x"07070707",
- 2697 => x"07070707",
- 2698 => x"07070707",
- 2699 => x"07070707",
- 2700 => x"07070707",
- 2701 => x"07070707",
- 2702 => x"07070707",
- 2703 => x"07070707",
- 2704 => x"07070707",
- 2705 => x"07070707",
- 2706 => x"07070707",
- 2707 => x"07070707",
- 2708 => x"08080808",
- 2709 => x"08080808",
- 2710 => x"08080808",
- 2711 => x"08080808",
- 2712 => x"08080808",
- 2713 => x"08080808",
- 2714 => x"08080808",
- 2715 => x"08080808",
- 2716 => x"08080808",
- 2717 => x"08080808",
- 2718 => x"08080808",
- 2719 => x"08080808",
- 2720 => x"08080808",
- 2721 => x"08080808",
- 2722 => x"08080808",
- 2723 => x"08080808",
- 2724 => x"08080808",
- 2725 => x"08080808",
- 2726 => x"08080808",
- 2727 => x"08080808",
- 2728 => x"08080808",
- 2729 => x"08080808",
- 2730 => x"08080808",
- 2731 => x"08080808",
- 2732 => x"08080808",
- 2733 => x"08080808",
- 2734 => x"08080808",
- 2735 => x"08080808",
- 2736 => x"08080808",
- 2737 => x"08080808",
- 2738 => x"08080808",
- 2739 => x"08080808",
- 2740 => x"43000000",
- 2741 => x"64756d6d",
- 2742 => x"792e6578",
- 2743 => x"65000000",
- 2744 => x"00ffffff",
- 2745 => x"ff00ffff",
- 2746 => x"ffff00ff",
- 2747 => x"ffffff00",
- 2748 => x"00000000",
- 2749 => x"00000000",
- 2750 => x"00000000",
- 2751 => x"000032dc",
- 2752 => x"0000c350",
- 2753 => x"00000000",
- 2754 => x"00000000",
- 2755 => x"00000000",
- 2756 => x"00000000",
- 2757 => x"00000000",
- 2758 => x"00000000",
- 2759 => x"00000000",
- 2760 => x"00000000",
- 2761 => x"00000000",
- 2762 => x"00000000",
- 2763 => x"00000000",
- 2764 => x"00000000",
- 2765 => x"00000000",
- 2766 => x"ffffffff",
- 2767 => x"00000000",
- 2768 => x"00020000",
- 2769 => x"00000000",
- 2770 => x"00000000",
- 2771 => x"00002b44",
- 2772 => x"00002b44",
- 2773 => x"00002b4c",
- 2774 => x"00002b4c",
- 2775 => x"00002b54",
- 2776 => x"00002b54",
- 2777 => x"00002b5c",
- 2778 => x"00002b5c",
- 2779 => x"00002b64",
- 2780 => x"00002b64",
- 2781 => x"00002b6c",
- 2782 => x"00002b6c",
- 2783 => x"00002b74",
- 2784 => x"00002b74",
- 2785 => x"00002b7c",
- 2786 => x"00002b7c",
- 2787 => x"00002b84",
- 2788 => x"00002b84",
- 2789 => x"00002b8c",
- 2790 => x"00002b8c",
- 2791 => x"00002b94",
- 2792 => x"00002b94",
- 2793 => x"00002b9c",
- 2794 => x"00002b9c",
- 2795 => x"00002ba4",
- 2796 => x"00002ba4",
- 2797 => x"00002bac",
- 2798 => x"00002bac",
- 2799 => x"00002bb4",
- 2800 => x"00002bb4",
- 2801 => x"00002bbc",
- 2802 => x"00002bbc",
- 2803 => x"00002bc4",
- 2804 => x"00002bc4",
- 2805 => x"00002bcc",
- 2806 => x"00002bcc",
- 2807 => x"00002bd4",
- 2808 => x"00002bd4",
- 2809 => x"00002bdc",
- 2810 => x"00002bdc",
- 2811 => x"00002be4",
- 2812 => x"00002be4",
- 2813 => x"00002bec",
- 2814 => x"00002bec",
- 2815 => x"00002bf4",
- 2816 => x"00002bf4",
- 2817 => x"00002bfc",
- 2818 => x"00002bfc",
- 2819 => x"00002c04",
- 2820 => x"00002c04",
- 2821 => x"00002c0c",
- 2822 => x"00002c0c",
- 2823 => x"00002c14",
- 2824 => x"00002c14",
- 2825 => x"00002c1c",
- 2826 => x"00002c1c",
- 2827 => x"00002c24",
- 2828 => x"00002c24",
- 2829 => x"00002c2c",
- 2830 => x"00002c2c",
- 2831 => x"00002c34",
- 2832 => x"00002c34",
- 2833 => x"00002c3c",
- 2834 => x"00002c3c",
- 2835 => x"00002c44",
- 2836 => x"00002c44",
- 2837 => x"00002c4c",
- 2838 => x"00002c4c",
- 2839 => x"00002c54",
- 2840 => x"00002c54",
- 2841 => x"00002c5c",
- 2842 => x"00002c5c",
- 2843 => x"00002c64",
- 2844 => x"00002c64",
- 2845 => x"00002c6c",
- 2846 => x"00002c6c",
- 2847 => x"00002c74",
- 2848 => x"00002c74",
- 2849 => x"00002c7c",
- 2850 => x"00002c7c",
- 2851 => x"00002c84",
- 2852 => x"00002c84",
- 2853 => x"00002c8c",
- 2854 => x"00002c8c",
- 2855 => x"00002c94",
- 2856 => x"00002c94",
- 2857 => x"00002c9c",
- 2858 => x"00002c9c",
- 2859 => x"00002ca4",
- 2860 => x"00002ca4",
- 2861 => x"00002cac",
- 2862 => x"00002cac",
- 2863 => x"00002cb4",
- 2864 => x"00002cb4",
- 2865 => x"00002cbc",
- 2866 => x"00002cbc",
- 2867 => x"00002cc4",
- 2868 => x"00002cc4",
- 2869 => x"00002ccc",
- 2870 => x"00002ccc",
- 2871 => x"00002cd4",
- 2872 => x"00002cd4",
- 2873 => x"00002cdc",
- 2874 => x"00002cdc",
- 2875 => x"00002ce4",
- 2876 => x"00002ce4",
- 2877 => x"00002cec",
- 2878 => x"00002cec",
- 2879 => x"00002cf4",
- 2880 => x"00002cf4",
- 2881 => x"00002cfc",
- 2882 => x"00002cfc",
- 2883 => x"00002d04",
- 2884 => x"00002d04",
- 2885 => x"00002d0c",
- 2886 => x"00002d0c",
- 2887 => x"00002d14",
- 2888 => x"00002d14",
- 2889 => x"00002d1c",
- 2890 => x"00002d1c",
- 2891 => x"00002d24",
- 2892 => x"00002d24",
- 2893 => x"00002d2c",
- 2894 => x"00002d2c",
- 2895 => x"00002d34",
- 2896 => x"00002d34",
- 2897 => x"00002d3c",
- 2898 => x"00002d3c",
- 2899 => x"00002d44",
- 2900 => x"00002d44",
- 2901 => x"00002d4c",
- 2902 => x"00002d4c",
- 2903 => x"00002d54",
- 2904 => x"00002d54",
- 2905 => x"00002d5c",
- 2906 => x"00002d5c",
- 2907 => x"00002d64",
- 2908 => x"00002d64",
- 2909 => x"00002d6c",
- 2910 => x"00002d6c",
- 2911 => x"00002d74",
- 2912 => x"00002d74",
- 2913 => x"00002d7c",
- 2914 => x"00002d7c",
- 2915 => x"00002d84",
- 2916 => x"00002d84",
- 2917 => x"00002d8c",
- 2918 => x"00002d8c",
- 2919 => x"00002d94",
- 2920 => x"00002d94",
- 2921 => x"00002d9c",
- 2922 => x"00002d9c",
- 2923 => x"00002da4",
- 2924 => x"00002da4",
- 2925 => x"00002dac",
- 2926 => x"00002dac",
- 2927 => x"00002db4",
- 2928 => x"00002db4",
- 2929 => x"00002dbc",
- 2930 => x"00002dbc",
- 2931 => x"00002dc4",
- 2932 => x"00002dc4",
- 2933 => x"00002dcc",
- 2934 => x"00002dcc",
- 2935 => x"00002dd4",
- 2936 => x"00002dd4",
- 2937 => x"00002ddc",
- 2938 => x"00002ddc",
- 2939 => x"00002de4",
- 2940 => x"00002de4",
- 2941 => x"00002dec",
- 2942 => x"00002dec",
- 2943 => x"00002df4",
- 2944 => x"00002df4",
- 2945 => x"00002dfc",
- 2946 => x"00002dfc",
- 2947 => x"00002e04",
- 2948 => x"00002e04",
- 2949 => x"00002e0c",
- 2950 => x"00002e0c",
- 2951 => x"00002e14",
- 2952 => x"00002e14",
- 2953 => x"00002e1c",
- 2954 => x"00002e1c",
- 2955 => x"00002e24",
- 2956 => x"00002e24",
- 2957 => x"00002e2c",
- 2958 => x"00002e2c",
- 2959 => x"00002e34",
- 2960 => x"00002e34",
- 2961 => x"00002e3c",
- 2962 => x"00002e3c",
- 2963 => x"00002e44",
- 2964 => x"00002e44",
- 2965 => x"00002e4c",
- 2966 => x"00002e4c",
- 2967 => x"00002e54",
- 2968 => x"00002e54",
- 2969 => x"00002e5c",
- 2970 => x"00002e5c",
- 2971 => x"00002e64",
- 2972 => x"00002e64",
- 2973 => x"00002e6c",
- 2974 => x"00002e6c",
- 2975 => x"00002e74",
- 2976 => x"00002e74",
- 2977 => x"00002e7c",
- 2978 => x"00002e7c",
- 2979 => x"00002e84",
- 2980 => x"00002e84",
- 2981 => x"00002e8c",
- 2982 => x"00002e8c",
- 2983 => x"00002e94",
- 2984 => x"00002e94",
- 2985 => x"00002e9c",
- 2986 => x"00002e9c",
- 2987 => x"00002ea4",
- 2988 => x"00002ea4",
- 2989 => x"00002eac",
- 2990 => x"00002eac",
- 2991 => x"00002eb4",
- 2992 => x"00002eb4",
- 2993 => x"00002ebc",
- 2994 => x"00002ebc",
- 2995 => x"00002ec4",
- 2996 => x"00002ec4",
- 2997 => x"00002ecc",
- 2998 => x"00002ecc",
- 2999 => x"00002ed4",
- 3000 => x"00002ed4",
- 3001 => x"00002edc",
- 3002 => x"00002edc",
- 3003 => x"00002ee4",
- 3004 => x"00002ee4",
- 3005 => x"00002eec",
- 3006 => x"00002eec",
- 3007 => x"00002ef4",
- 3008 => x"00002ef4",
- 3009 => x"00002efc",
- 3010 => x"00002efc",
- 3011 => x"00002f04",
- 3012 => x"00002f04",
- 3013 => x"00002f0c",
- 3014 => x"00002f0c",
- 3015 => x"00002f14",
- 3016 => x"00002f14",
- 3017 => x"00002f1c",
- 3018 => x"00002f1c",
- 3019 => x"00002f24",
- 3020 => x"00002f24",
- 3021 => x"00002f2c",
- 3022 => x"00002f2c",
- 3023 => x"00002f34",
- 3024 => x"00002f34",
- 3025 => x"00002f3c",
- 3026 => x"00002f3c",
- 3027 => x"00002f50",
- 3028 => x"00000000",
- 3029 => x"000031b8",
- 3030 => x"00003214",
- 3031 => x"00003270",
- 3032 => x"00000000",
- 3033 => x"00000000",
- 3034 => x"00000000",
- 3035 => x"00000000",
- 3036 => x"00000000",
- 3037 => x"00000000",
- 3038 => x"00000000",
- 3039 => x"00000000",
- 3040 => x"00000000",
- 3041 => x"00002ad0",
- 3042 => x"00000000",
- 3043 => x"00000000",
- 3044 => x"00000000",
- 3045 => x"00000000",
- 3046 => x"00000000",
- 3047 => x"00000000",
- 3048 => x"00000000",
- 3049 => x"00000000",
- 3050 => x"00000000",
- 3051 => x"00000000",
- 3052 => x"00000000",
- 3053 => x"00000000",
- 3054 => x"00000000",
- 3055 => x"00000000",
- 3056 => x"00000000",
- 3057 => x"00000000",
- 3058 => x"00000000",
- 3059 => x"00000000",
- 3060 => x"00000000",
- 3061 => x"00000000",
- 3062 => x"00000000",
- 3063 => x"00000000",
- 3064 => x"00000000",
- 3065 => x"00000000",
- 3066 => x"00000000",
- 3067 => x"00000000",
- 3068 => x"00000000",
- 3069 => x"00000000",
- 3070 => x"00000001",
- 3071 => x"330eabcd",
- 3072 => x"1234e66d",
- 3073 => x"deec0005",
- 3074 => x"000b0000",
- 3075 => x"00000000",
- 3076 => x"00000000",
- 3077 => x"00000000",
- 3078 => x"00000000",
- 3079 => x"00000000",
- 3080 => x"00000000",
- 3081 => x"00000000",
- 3082 => x"00000000",
- 3083 => x"00000000",
- 3084 => x"00000000",
- 3085 => x"00000000",
- 3086 => x"00000000",
- 3087 => x"00000000",
- 3088 => x"00000000",
- 3089 => x"00000000",
- 3090 => x"00000000",
- 3091 => x"00000000",
- 3092 => x"00000000",
- 3093 => x"00000000",
- 3094 => x"00000000",
- 3095 => x"00000000",
- 3096 => x"00000000",
- 3097 => x"00000000",
- 3098 => x"00000000",
- 3099 => x"00000000",
- 3100 => x"00000000",
- 3101 => x"00000000",
- 3102 => x"00000000",
- 3103 => x"00000000",
- 3104 => x"00000000",
- 3105 => x"00000000",
- 3106 => x"00000000",
- 3107 => x"00000000",
- 3108 => x"00000000",
- 3109 => x"00000000",
- 3110 => x"00000000",
- 3111 => x"00000000",
- 3112 => x"00000000",
- 3113 => x"00000000",
- 3114 => x"00000000",
- 3115 => x"00000000",
- 3116 => x"00000000",
- 3117 => x"00000000",
- 3118 => x"00000000",
- 3119 => x"00000000",
- 3120 => x"00000000",
- 3121 => x"00000000",
- 3122 => x"00000000",
- 3123 => x"00000000",
- 3124 => x"00000000",
- 3125 => x"00000000",
- 3126 => x"00000000",
- 3127 => x"00000000",
- 3128 => x"00000000",
- 3129 => x"00000000",
- 3130 => x"00000000",
- 3131 => x"00000000",
- 3132 => x"00000000",
- 3133 => x"00000000",
- 3134 => x"00000000",
- 3135 => x"00000000",
- 3136 => x"00000000",
- 3137 => x"00000000",
- 3138 => x"00000000",
- 3139 => x"00000000",
- 3140 => x"00000000",
- 3141 => x"00000000",
- 3142 => x"00000000",
- 3143 => x"00000000",
- 3144 => x"00000000",
- 3145 => x"00000000",
- 3146 => x"00000000",
- 3147 => x"00000000",
- 3148 => x"00000000",
- 3149 => x"00000000",
- 3150 => x"00000000",
- 3151 => x"00000000",
- 3152 => x"00000000",
- 3153 => x"00000000",
- 3154 => x"00000000",
- 3155 => x"00000000",
- 3156 => x"00000000",
- 3157 => x"00000000",
- 3158 => x"00000000",
- 3159 => x"00000000",
- 3160 => x"00000000",
- 3161 => x"00000000",
- 3162 => x"00000000",
- 3163 => x"00000000",
- 3164 => x"00000000",
- 3165 => x"00000000",
- 3166 => x"00000000",
- 3167 => x"00000000",
- 3168 => x"00000000",
- 3169 => x"00000000",
- 3170 => x"00000000",
- 3171 => x"00000000",
- 3172 => x"00000000",
- 3173 => x"00000000",
- 3174 => x"00000000",
- 3175 => x"00000000",
- 3176 => x"00000000",
- 3177 => x"00000000",
- 3178 => x"00000000",
- 3179 => x"00000000",
- 3180 => x"00000000",
- 3181 => x"00000000",
- 3182 => x"00000000",
- 3183 => x"00000000",
- 3184 => x"00000000",
- 3185 => x"00000000",
- 3186 => x"00000000",
- 3187 => x"00000000",
- 3188 => x"00000000",
- 3189 => x"00000000",
- 3190 => x"00000000",
- 3191 => x"00000000",
- 3192 => x"00000000",
- 3193 => x"00000000",
- 3194 => x"00000000",
- 3195 => x"00000000",
- 3196 => x"00000000",
- 3197 => x"00000000",
- 3198 => x"00000000",
- 3199 => x"00000000",
- 3200 => x"00000000",
- 3201 => x"00000000",
- 3202 => x"00000000",
- 3203 => x"00000000",
- 3204 => x"00000000",
- 3205 => x"00000000",
- 3206 => x"00000000",
- 3207 => x"00000000",
- 3208 => x"00000000",
- 3209 => x"00000000",
- 3210 => x"00000000",
- 3211 => x"00000000",
- 3212 => x"00000000",
- 3213 => x"00000000",
- 3214 => x"00000000",
- 3215 => x"00000000",
- 3216 => x"00000000",
- 3217 => x"00000000",
- 3218 => x"00000000",
- 3219 => x"00000000",
- 3220 => x"00000000",
- 3221 => x"00000000",
- 3222 => x"00000000",
- 3223 => x"00000000",
- 3224 => x"00000000",
- 3225 => x"00000000",
- 3226 => x"00000000",
- 3227 => x"00000000",
- 3228 => x"00000000",
- 3229 => x"00000000",
- 3230 => x"00000000",
- 3231 => x"00000000",
- 3232 => x"00000000",
- 3233 => x"00000000",
- 3234 => x"00000000",
- 3235 => x"00000000",
- 3236 => x"00000000",
- 3237 => x"00000000",
- 3238 => x"00000000",
- 3239 => x"00000000",
- 3240 => x"00000000",
- 3241 => x"00000000",
- 3242 => x"00000000",
- 3243 => x"00000000",
- 3244 => x"00000000",
- 3245 => x"00000000",
- 3246 => x"00000000",
- 3247 => x"00000000",
- 3248 => x"00000000",
- 3249 => x"00000000",
- 3250 => x"00000000",
- 3251 => x"00002ad4",
- 3252 => x"ffffffff",
- 3253 => x"00000000",
- 3254 => x"ffffffff",
- 3255 => x"00000000",
- 3256 => x"00000000",
- others => x"00000000"
-);
-
-begin
-
-process (clk)
-begin
- if (clk'event and clk = '1') then
- if (memAWriteEnable = '1') and (memBWriteEnable = '1') and (memAAddr=memBAddr) and (memAWrite/=memBWrite) then
- report "write collision" severity failure;
- end if;
-
- if (memAWriteEnable = '1') then
- ram(to_integer(unsigned(memAAddr))) := memAWrite;
- memARead <= memAWrite;
- else
- memARead <= ram(to_integer(unsigned(memAAddr)));
- end if;
- end if;
-end process;
-
-process (clk)
-begin
- if (clk'event and clk = '1') then
- if (memBWriteEnable = '1') then
- ram(to_integer(unsigned(memBAddr))) := memBWrite;
- memBRead <= memBWrite;
- else
- memBRead <= ram(to_integer(unsigned(memBAddr)));
- end if;
- end if;
-end process;
-
-
-
-
-end dualport_ram_arch;
+-- ZPU
+--
+-- Copyright 2004-2008 oharboe - Øyvind Harboe - oyvind.harboe@zylin.com
+--
+-- The FreeBSD license
+--
+-- Redistribution and use in source and binary forms, with or without
+-- modification, are permitted provided that the following conditions
+-- are met:
+--
+-- 1. Redistributions of source code must retain the above copyright
+-- notice, this list of conditions and the following disclaimer.
+-- 2. Redistributions in binary form must reproduce the above
+-- copyright notice, this list of conditions and the following
+-- disclaimer in the documentation and/or other materials
+-- provided with the distribution.
+--
+-- THIS SOFTWARE IS PROVIDED BY THE ZPU PROJECT ``AS IS'' AND ANY
+-- EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+-- THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+-- PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+-- ZPU PROJECT OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+-- INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+-- (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+-- OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+-- HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+-- STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+-- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+-- ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+--
+-- The views and conclusions contained in the software and documentation
+-- are those of the authors and should not be interpreted as representing
+-- official policies, either expressed or implied, of the ZPU Project.
+
+library ieee;
+use ieee.std_logic_1164.all;
+use ieee.numeric_std.all;
+
+
+library work;
+use work.zpu_config.all;
+use work.zpupkg.all;
+
+entity dualport_ram is
+port (clk : in std_logic;
+ memAWriteEnable : in std_logic;
+ memAAddr : in std_logic_vector(maxAddrBitBRAM downto minAddrBit);
+ memAWrite : in std_logic_vector(wordSize-1 downto 0);
+ memARead : out std_logic_vector(wordSize-1 downto 0);
+ memBWriteEnable : in std_logic;
+ memBAddr : in std_logic_vector(maxAddrBitBRAM downto minAddrBit);
+ memBWrite : in std_logic_vector(wordSize-1 downto 0);
+ memBRead : out std_logic_vector(wordSize-1 downto 0));
+end dualport_ram;
+
+architecture dualport_ram_arch of dualport_ram is
+
+
+type ram_type is array(natural range 0 to ((2**(maxAddrBitBRAM+1))/4)-1) of std_logic_vector(wordSize-1 downto 0);
+
+shared variable ram : ram_type :=
+(
+ 0 => x"0b0b0b0b",
+ 1 => x"82700b0b",
+ 2 => x"80d5f40c",
+ 3 => x"3a0b0b80",
+ 4 => x"c4fb0400",
+ 5 => x"00000000",
+ 6 => x"00000000",
+ 7 => x"00000000",
+ 8 => x"80088408",
+ 9 => x"88080b0b",
+ 10 => x"80c5c22d",
+ 11 => x"880c840c",
+ 12 => x"800c0400",
+ 13 => x"00000000",
+ 14 => x"00000000",
+ 15 => x"00000000",
+ 16 => x"71fd0608",
+ 17 => x"72830609",
+ 18 => x"81058205",
+ 19 => x"832b2a83",
+ 20 => x"ffff0652",
+ 21 => x"04000000",
+ 22 => x"00000000",
+ 23 => x"00000000",
+ 24 => x"71fd0608",
+ 25 => x"83ffff73",
+ 26 => x"83060981",
+ 27 => x"05820583",
+ 28 => x"2b2b0906",
+ 29 => x"7383ffff",
+ 30 => x"0b0b0b0b",
+ 31 => x"83a70400",
+ 32 => x"72098105",
+ 33 => x"72057373",
+ 34 => x"09060906",
+ 35 => x"73097306",
+ 36 => x"070a8106",
+ 37 => x"53510400",
+ 38 => x"00000000",
+ 39 => x"00000000",
+ 40 => x"72722473",
+ 41 => x"732e0753",
+ 42 => x"51040000",
+ 43 => x"00000000",
+ 44 => x"00000000",
+ 45 => x"00000000",
+ 46 => x"00000000",
+ 47 => x"00000000",
+ 48 => x"71737109",
+ 49 => x"71068106",
+ 50 => x"30720a10",
+ 51 => x"0a720a10",
+ 52 => x"0a31050a",
+ 53 => x"81065151",
+ 54 => x"53510400",
+ 55 => x"00000000",
+ 56 => x"72722673",
+ 57 => x"732e0753",
+ 58 => x"51040000",
+ 59 => x"00000000",
+ 60 => x"00000000",
+ 61 => x"00000000",
+ 62 => x"00000000",
+ 63 => x"00000000",
+ 64 => x"00000000",
+ 65 => x"00000000",
+ 66 => x"00000000",
+ 67 => x"00000000",
+ 68 => x"00000000",
+ 69 => x"00000000",
+ 70 => x"00000000",
+ 71 => x"00000000",
+ 72 => x"0b0b0b88",
+ 73 => x"c3040000",
+ 74 => x"00000000",
+ 75 => x"00000000",
+ 76 => x"00000000",
+ 77 => x"00000000",
+ 78 => x"00000000",
+ 79 => x"00000000",
+ 80 => x"720a722b",
+ 81 => x"0a535104",
+ 82 => x"00000000",
+ 83 => x"00000000",
+ 84 => x"00000000",
+ 85 => x"00000000",
+ 86 => x"00000000",
+ 87 => x"00000000",
+ 88 => x"72729f06",
+ 89 => x"0981050b",
+ 90 => x"0b0b88a6",
+ 91 => x"05040000",
+ 92 => x"00000000",
+ 93 => x"00000000",
+ 94 => x"00000000",
+ 95 => x"00000000",
+ 96 => x"72722aff",
+ 97 => x"739f062a",
+ 98 => x"0974090a",
+ 99 => x"8106ff05",
+ 100 => x"06075351",
+ 101 => x"04000000",
+ 102 => x"00000000",
+ 103 => x"00000000",
+ 104 => x"71715351",
+ 105 => x"020d0406",
+ 106 => x"73830609",
+ 107 => x"81058205",
+ 108 => x"832b0b2b",
+ 109 => x"0772fc06",
+ 110 => x"0c515104",
+ 111 => x"00000000",
+ 112 => x"72098105",
+ 113 => x"72050970",
+ 114 => x"81050906",
+ 115 => x"0a810653",
+ 116 => x"51040000",
+ 117 => x"00000000",
+ 118 => x"00000000",
+ 119 => x"00000000",
+ 120 => x"72098105",
+ 121 => x"72050970",
+ 122 => x"81050906",
+ 123 => x"0a098106",
+ 124 => x"53510400",
+ 125 => x"00000000",
+ 126 => x"00000000",
+ 127 => x"00000000",
+ 128 => x"71098105",
+ 129 => x"52040000",
+ 130 => x"00000000",
+ 131 => x"00000000",
+ 132 => x"00000000",
+ 133 => x"00000000",
+ 134 => x"00000000",
+ 135 => x"00000000",
+ 136 => x"72720981",
+ 137 => x"05055351",
+ 138 => x"04000000",
+ 139 => x"00000000",
+ 140 => x"00000000",
+ 141 => x"00000000",
+ 142 => x"00000000",
+ 143 => x"00000000",
+ 144 => x"72097206",
+ 145 => x"73730906",
+ 146 => x"07535104",
+ 147 => x"00000000",
+ 148 => x"00000000",
+ 149 => x"00000000",
+ 150 => x"00000000",
+ 151 => x"00000000",
+ 152 => x"71fc0608",
+ 153 => x"72830609",
+ 154 => x"81058305",
+ 155 => x"1010102a",
+ 156 => x"81ff0652",
+ 157 => x"04000000",
+ 158 => x"00000000",
+ 159 => x"00000000",
+ 160 => x"71fc0608",
+ 161 => x"0b0b80d5",
+ 162 => x"e0738306",
+ 163 => x"10100508",
+ 164 => x"060b0b0b",
+ 165 => x"88a90400",
+ 166 => x"00000000",
+ 167 => x"00000000",
+ 168 => x"80088408",
+ 169 => x"88087575",
+ 170 => x"0b0b0bad",
+ 171 => x"aa2d5050",
+ 172 => x"80085688",
+ 173 => x"0c840c80",
+ 174 => x"0c510400",
+ 175 => x"00000000",
+ 176 => x"80088408",
+ 177 => x"88087575",
+ 178 => x"0b0b0bad",
+ 179 => x"ee2d5050",
+ 180 => x"80085688",
+ 181 => x"0c840c80",
+ 182 => x"0c510400",
+ 183 => x"00000000",
+ 184 => x"72097081",
+ 185 => x"0509060a",
+ 186 => x"8106ff05",
+ 187 => x"70547106",
+ 188 => x"73097274",
+ 189 => x"05ff0506",
+ 190 => x"07515151",
+ 191 => x"04000000",
+ 192 => x"72097081",
+ 193 => x"0509060a",
+ 194 => x"098106ff",
+ 195 => x"05705471",
+ 196 => x"06730972",
+ 197 => x"7405ff05",
+ 198 => x"06075151",
+ 199 => x"51040000",
+ 200 => x"05ff0504",
+ 201 => x"00000000",
+ 202 => x"00000000",
+ 203 => x"00000000",
+ 204 => x"00000000",
+ 205 => x"00000000",
+ 206 => x"00000000",
+ 207 => x"00000000",
+ 208 => x"810b0b0b",
+ 209 => x"80d5f00c",
+ 210 => x"51040000",
+ 211 => x"00000000",
+ 212 => x"00000000",
+ 213 => x"00000000",
+ 214 => x"00000000",
+ 215 => x"00000000",
+ 216 => x"71810552",
+ 217 => x"04000000",
+ 218 => x"00000000",
+ 219 => x"00000000",
+ 220 => x"00000000",
+ 221 => x"00000000",
+ 222 => x"00000000",
+ 223 => x"00000000",
+ 224 => x"00000000",
+ 225 => x"00000000",
+ 226 => x"00000000",
+ 227 => x"00000000",
+ 228 => x"00000000",
+ 229 => x"00000000",
+ 230 => x"00000000",
+ 231 => x"00000000",
+ 232 => x"02840572",
+ 233 => x"10100552",
+ 234 => x"04000000",
+ 235 => x"00000000",
+ 236 => x"00000000",
+ 237 => x"00000000",
+ 238 => x"00000000",
+ 239 => x"00000000",
+ 240 => x"00000000",
+ 241 => x"00000000",
+ 242 => x"00000000",
+ 243 => x"00000000",
+ 244 => x"00000000",
+ 245 => x"00000000",
+ 246 => x"00000000",
+ 247 => x"00000000",
+ 248 => x"717105ff",
+ 249 => x"05715351",
+ 250 => x"020d0400",
+ 251 => x"00000000",
+ 252 => x"00000000",
+ 253 => x"00000000",
+ 254 => x"00000000",
+ 255 => x"00000000",
+ 256 => x"82fd3fbf",
+ 257 => x"a03f0410",
+ 258 => x"10101010",
+ 259 => x"10101010",
+ 260 => x"10101010",
+ 261 => x"10101010",
+ 262 => x"10101010",
+ 263 => x"10101010",
+ 264 => x"10101010",
+ 265 => x"10105351",
+ 266 => x"047381ff",
+ 267 => x"06738306",
+ 268 => x"09810583",
+ 269 => x"05101010",
+ 270 => x"2b0772fc",
+ 271 => x"060c5151",
+ 272 => x"043c0472",
+ 273 => x"72807281",
+ 274 => x"06ff0509",
+ 275 => x"72060571",
+ 276 => x"1052720a",
+ 277 => x"100a5372",
+ 278 => x"ed385151",
+ 279 => x"535104ff",
+ 280 => x"3d0d0b0b",
+ 281 => x"80e5e408",
+ 282 => x"52710870",
+ 283 => x"882a8132",
+ 284 => x"70810651",
+ 285 => x"515170f1",
+ 286 => x"3873720c",
+ 287 => x"833d0d04",
+ 288 => x"80d5f008",
+ 289 => x"802ea438",
+ 290 => x"80d5f408",
+ 291 => x"822ebd38",
+ 292 => x"8380800b",
+ 293 => x"0b0b80e5",
+ 294 => x"e40c82a0",
+ 295 => x"800b80e5",
+ 296 => x"e80c8290",
+ 297 => x"800b80e5",
+ 298 => x"ec0c04f8",
+ 299 => x"808080a4",
+ 300 => x"0b0b0b80",
+ 301 => x"e5e40cf8",
+ 302 => x"80808280",
+ 303 => x"0b80e5e8",
+ 304 => x"0cf88080",
+ 305 => x"84800b80",
+ 306 => x"e5ec0c04",
+ 307 => x"80c0a880",
+ 308 => x"8c0b0b0b",
+ 309 => x"80e5e40c",
+ 310 => x"80c0a880",
+ 311 => x"940b80e5",
+ 312 => x"e80c0b0b",
+ 313 => x"80c7d00b",
+ 314 => x"80e5ec0c",
+ 315 => x"04f23d0d",
+ 316 => x"6080e5e8",
+ 317 => x"08565d82",
+ 318 => x"750c8059",
+ 319 => x"805a800b",
+ 320 => x"8f3d5d5b",
+ 321 => x"7a101015",
+ 322 => x"70087108",
+ 323 => x"719f2c7e",
+ 324 => x"852b5855",
+ 325 => x"557d5359",
+ 326 => x"5799993f",
+ 327 => x"7d7f7a72",
+ 328 => x"077c7207",
+ 329 => x"71716081",
+ 330 => x"05415f5d",
+ 331 => x"5b595755",
+ 332 => x"817b278f",
+ 333 => x"38767d0c",
+ 334 => x"77841e0c",
+ 335 => x"7c800c90",
+ 336 => x"3d0d0480",
+ 337 => x"e5e80855",
+ 338 => x"ffba3970",
+ 339 => x"7080e5f0",
+ 340 => x"335170a7",
+ 341 => x"3880d5fc",
+ 342 => x"08700852",
+ 343 => x"5270802e",
+ 344 => x"94388412",
+ 345 => x"80d5fc0c",
+ 346 => x"702d80d5",
+ 347 => x"fc087008",
+ 348 => x"525270ee",
+ 349 => x"38810b80",
+ 350 => x"e5f03450",
+ 351 => x"50040470",
+ 352 => x"0b0b80e5",
+ 353 => x"e008802e",
+ 354 => x"8e380b0b",
+ 355 => x"0b0b800b",
+ 356 => x"802e0981",
+ 357 => x"06833850",
+ 358 => x"040b0b80",
+ 359 => x"e5e0510b",
+ 360 => x"0b0bf4dc",
+ 361 => x"3f500404",
+ 362 => x"ff3d0d02",
+ 363 => x"8f053352",
+ 364 => x"718a2e8a",
+ 365 => x"387151fd",
+ 366 => x"a63f833d",
+ 367 => x"0d048d51",
+ 368 => x"fd9d3f71",
+ 369 => x"51fd983f",
+ 370 => x"833d0d04",
+ 371 => x"ce3d0db5",
+ 372 => x"3d707084",
+ 373 => x"0552088b",
+ 374 => x"a85c56a5",
+ 375 => x"3d5e5c80",
+ 376 => x"75708105",
+ 377 => x"5733765b",
+ 378 => x"55587378",
+ 379 => x"2e80c138",
+ 380 => x"8e3d5b73",
+ 381 => x"a52e0981",
+ 382 => x"0680c538",
+ 383 => x"78708105",
+ 384 => x"5a335473",
+ 385 => x"80e42e81",
+ 386 => x"b6387380",
+ 387 => x"e42480c6",
+ 388 => x"387380e3",
+ 389 => x"2ea13880",
+ 390 => x"52a55179",
+ 391 => x"2d805273",
+ 392 => x"51792d82",
+ 393 => x"18587870",
+ 394 => x"81055a33",
+ 395 => x"5473c438",
+ 396 => x"77800cb4",
+ 397 => x"3d0d047b",
+ 398 => x"841d8312",
+ 399 => x"33565d57",
+ 400 => x"80527351",
+ 401 => x"792d8118",
+ 402 => x"79708105",
+ 403 => x"5b335558",
+ 404 => x"73ffa038",
+ 405 => x"db397380",
+ 406 => x"f32e0981",
+ 407 => x"06ffb838",
+ 408 => x"7b841d71",
+ 409 => x"08595d56",
+ 410 => x"80773355",
+ 411 => x"5673762e",
+ 412 => x"8d388116",
+ 413 => x"70187033",
+ 414 => x"57555674",
+ 415 => x"f538ff16",
+ 416 => x"55807625",
+ 417 => x"ffa03876",
+ 418 => x"70810558",
+ 419 => x"33548052",
+ 420 => x"7351792d",
+ 421 => x"811875ff",
+ 422 => x"17575758",
+ 423 => x"807625ff",
+ 424 => x"85387670",
+ 425 => x"81055833",
+ 426 => x"54805273",
+ 427 => x"51792d81",
+ 428 => x"1875ff17",
+ 429 => x"57575875",
+ 430 => x"8024cc38",
+ 431 => x"fee8397b",
+ 432 => x"841d7108",
+ 433 => x"70719f2c",
+ 434 => x"5953595d",
+ 435 => x"56807524",
+ 436 => x"81913875",
+ 437 => x"7d7c5856",
+ 438 => x"54805773",
+ 439 => x"772e0981",
+ 440 => x"06b638b0",
+ 441 => x"7b3402b5",
+ 442 => x"05567a76",
+ 443 => x"2e9738ff",
+ 444 => x"16567533",
+ 445 => x"75708105",
+ 446 => x"57348117",
+ 447 => x"577a762e",
+ 448 => x"098106eb",
+ 449 => x"38807534",
+ 450 => x"767dff12",
+ 451 => x"57585675",
+ 452 => x"8024fef3",
+ 453 => x"38fe8f39",
+ 454 => x"8a527351",
+ 455 => x"9fd03f80",
+ 456 => x"0880c7d4",
+ 457 => x"05337670",
+ 458 => x"81055834",
+ 459 => x"8a527351",
+ 460 => x"9ef83f80",
+ 461 => x"08548008",
+ 462 => x"802effae",
+ 463 => x"388a5273",
+ 464 => x"519fab3f",
+ 465 => x"800880c7",
+ 466 => x"d4053376",
+ 467 => x"70810558",
+ 468 => x"348a5273",
+ 469 => x"519ed33f",
+ 470 => x"80085480",
+ 471 => x"08ffb938",
+ 472 => x"ff883974",
+ 473 => x"527653b4",
+ 474 => x"3dffb805",
+ 475 => x"51949a3f",
+ 476 => x"a33d0856",
+ 477 => x"fedd3980",
+ 478 => x"3d0d80c1",
+ 479 => x"0b81b4bc",
+ 480 => x"34800b81",
+ 481 => x"b6980c70",
+ 482 => x"800c823d",
+ 483 => x"0d04ff3d",
+ 484 => x"0d800b81",
+ 485 => x"b4bc3352",
+ 486 => x"527080c1",
+ 487 => x"2e993871",
+ 488 => x"81b69808",
+ 489 => x"0781b698",
+ 490 => x"0c80c20b",
+ 491 => x"81b4c034",
+ 492 => x"70800c83",
+ 493 => x"3d0d0481",
+ 494 => x"0b81b698",
+ 495 => x"080781b6",
+ 496 => x"980c80c2",
+ 497 => x"0b81b4c0",
+ 498 => x"3470800c",
+ 499 => x"833d0d04",
+ 500 => x"fd3d0d75",
+ 501 => x"70088a05",
+ 502 => x"535381b4",
+ 503 => x"bc335170",
+ 504 => x"80c12e8b",
+ 505 => x"3873f338",
+ 506 => x"70800c85",
+ 507 => x"3d0d04ff",
+ 508 => x"127081b4",
+ 509 => x"b8083174",
+ 510 => x"0c800c85",
+ 511 => x"3d0d04fc",
+ 512 => x"3d0d81b4",
+ 513 => x"c4085574",
+ 514 => x"802e8c38",
+ 515 => x"76750871",
+ 516 => x"0c81b4c4",
+ 517 => x"0856548c",
+ 518 => x"155381b4",
+ 519 => x"b808528a",
+ 520 => x"518fd43f",
+ 521 => x"73800c86",
+ 522 => x"3d0d04fb",
+ 523 => x"3d0d7770",
+ 524 => x"085656b0",
+ 525 => x"5381b4c4",
+ 526 => x"08527451",
+ 527 => x"ab943f85",
+ 528 => x"0b8c170c",
+ 529 => x"850b8c16",
+ 530 => x"0c750875",
+ 531 => x"0c81b4c4",
+ 532 => x"08547380",
+ 533 => x"2e8a3873",
+ 534 => x"08750c81",
+ 535 => x"b4c40854",
+ 536 => x"8c145381",
+ 537 => x"b4b80852",
+ 538 => x"8a518f8b",
+ 539 => x"3f841508",
+ 540 => x"ad38860b",
+ 541 => x"8c160c88",
+ 542 => x"15528816",
+ 543 => x"08518e97",
+ 544 => x"3f81b4c4",
+ 545 => x"08700876",
+ 546 => x"0c548c15",
+ 547 => x"7054548a",
+ 548 => x"52730851",
+ 549 => x"8ee13f73",
+ 550 => x"800c873d",
+ 551 => x"0d047508",
+ 552 => x"54b05373",
+ 553 => x"527551aa",
+ 554 => x"a93f7380",
+ 555 => x"0c873d0d",
+ 556 => x"04d93d0d",
+ 557 => x"b0519dcf",
+ 558 => x"3f800881",
+ 559 => x"b4b40cb0",
+ 560 => x"519dc43f",
+ 561 => x"800881b4",
+ 562 => x"c40c81b4",
+ 563 => x"b4088008",
+ 564 => x"0c800b80",
+ 565 => x"0884050c",
+ 566 => x"820b8008",
+ 567 => x"88050ca8",
+ 568 => x"0b80088c",
+ 569 => x"050c9f53",
+ 570 => x"80c7e052",
+ 571 => x"80089005",
+ 572 => x"51a9df3f",
+ 573 => x"a13d5e9f",
+ 574 => x"5380c880",
+ 575 => x"527d51a9",
+ 576 => x"d13f8a0b",
+ 577 => x"80f2f80c",
+ 578 => x"80d2a451",
+ 579 => x"f9be3f80",
+ 580 => x"c8a051f9",
+ 581 => x"b73f80d2",
+ 582 => x"a451f9b0",
+ 583 => x"3f80d684",
+ 584 => x"08802e89",
+ 585 => x"d33880c8",
+ 586 => x"d051f9a0",
+ 587 => x"3f80d2a4",
+ 588 => x"51f9993f",
+ 589 => x"80d68008",
+ 590 => x"5280c8fc",
+ 591 => x"51f98d3f",
+ 592 => x"80e69451",
+ 593 => x"b2ff3f81",
+ 594 => x"0b9a3d5e",
+ 595 => x"5b800b80",
+ 596 => x"d6800825",
+ 597 => x"82d43890",
+ 598 => x"3d5f80c1",
+ 599 => x"0b81b4bc",
+ 600 => x"34810b81",
+ 601 => x"b6980c80",
+ 602 => x"c20b81b4",
+ 603 => x"c0348240",
+ 604 => x"835a9f53",
+ 605 => x"80c9ac52",
+ 606 => x"7c51a8d6",
+ 607 => x"3f814180",
+ 608 => x"7d537e52",
+ 609 => x"568e943f",
+ 610 => x"8008762e",
+ 611 => x"09810683",
+ 612 => x"38815675",
+ 613 => x"81b6980c",
+ 614 => x"7f705856",
+ 615 => x"758325a2",
+ 616 => x"38751010",
+ 617 => x"16fd0542",
+ 618 => x"a93dffa4",
+ 619 => x"05538352",
+ 620 => x"76518cc3",
+ 621 => x"3f7f8105",
+ 622 => x"70417058",
+ 623 => x"56837624",
+ 624 => x"e0386154",
+ 625 => x"755380e6",
+ 626 => x"9c5281b4",
+ 627 => x"d0518cb7",
+ 628 => x"3f81b4c4",
+ 629 => x"08700858",
+ 630 => x"58b05377",
+ 631 => x"527651a7",
+ 632 => x"f13f850b",
+ 633 => x"8c190c85",
+ 634 => x"0b8c180c",
+ 635 => x"7708770c",
+ 636 => x"81b4c408",
+ 637 => x"5675802e",
+ 638 => x"8a387508",
+ 639 => x"770c81b4",
+ 640 => x"c408568c",
+ 641 => x"165381b4",
+ 642 => x"b808528a",
+ 643 => x"518be83f",
+ 644 => x"84170887",
+ 645 => x"ea38860b",
+ 646 => x"8c180c88",
+ 647 => x"17528818",
+ 648 => x"08518af3",
+ 649 => x"3f81b4c4",
+ 650 => x"08700878",
+ 651 => x"0c568c17",
+ 652 => x"7054598a",
+ 653 => x"52780851",
+ 654 => x"8bbd3f80",
+ 655 => x"c10b81b4",
+ 656 => x"c0335757",
+ 657 => x"767626a2",
+ 658 => x"3880c352",
+ 659 => x"76518ca1",
+ 660 => x"3f800861",
+ 661 => x"2e89e438",
+ 662 => x"81177081",
+ 663 => x"ff0681b4",
+ 664 => x"c0335858",
+ 665 => x"58757727",
+ 666 => x"e0387960",
+ 667 => x"29627054",
+ 668 => x"71535b59",
+ 669 => x"98b43f80",
+ 670 => x"0840787a",
+ 671 => x"31708729",
+ 672 => x"80083180",
+ 673 => x"088a0581",
+ 674 => x"b4bc3381",
+ 675 => x"b4b8085e",
+ 676 => x"5b525a56",
+ 677 => x"7780c12e",
+ 678 => x"89ce387b",
+ 679 => x"f738811b",
+ 680 => x"5b80d680",
+ 681 => x"087b25fd",
+ 682 => x"b13881b4",
+ 683 => x"ac51b095",
+ 684 => x"3f80c9cc",
+ 685 => x"51f6953f",
+ 686 => x"80d2a451",
+ 687 => x"f68e3f80",
+ 688 => x"c9dc51f6",
+ 689 => x"873f80d2",
+ 690 => x"a451f680",
+ 691 => x"3f81b4b8",
+ 692 => x"085280ca",
+ 693 => x"9451f5f4",
+ 694 => x"3f855280",
+ 695 => x"cab051f5",
+ 696 => x"eb3f81b6",
+ 697 => x"98085280",
+ 698 => x"cacc51f5",
+ 699 => x"df3f8152",
+ 700 => x"80cab051",
+ 701 => x"f5d63f81",
+ 702 => x"b4bc3352",
+ 703 => x"80cae851",
+ 704 => x"f5ca3f80",
+ 705 => x"c15280cb",
+ 706 => x"8451f5c0",
+ 707 => x"3f81b4c0",
+ 708 => x"335280cb",
+ 709 => x"a051f5b4",
+ 710 => x"3f80c252",
+ 711 => x"80cb8451",
+ 712 => x"f5aa3f81",
+ 713 => x"b4f00852",
+ 714 => x"80cbbc51",
+ 715 => x"f59e3f87",
+ 716 => x"5280cab0",
+ 717 => x"51f5953f",
+ 718 => x"80f2f808",
+ 719 => x"5280cbd8",
+ 720 => x"51f5893f",
+ 721 => x"80cbf451",
+ 722 => x"f5823f80",
+ 723 => x"cca051f4",
+ 724 => x"fb3f81b4",
+ 725 => x"c4087008",
+ 726 => x"535a80cc",
+ 727 => x"ac51f4ec",
+ 728 => x"3f80ccc8",
+ 729 => x"51f4e53f",
+ 730 => x"81b4c408",
+ 731 => x"84110853",
+ 732 => x"5680ccfc",
+ 733 => x"51f4d53f",
+ 734 => x"805280ca",
+ 735 => x"b051f4cc",
+ 736 => x"3f81b4c4",
+ 737 => x"08881108",
+ 738 => x"535880cd",
+ 739 => x"9851f4bc",
+ 740 => x"3f825280",
+ 741 => x"cab051f4",
+ 742 => x"b33f81b4",
+ 743 => x"c4088c11",
+ 744 => x"08535780",
+ 745 => x"cdb451f4",
+ 746 => x"a33f9152",
+ 747 => x"80cab051",
+ 748 => x"f49a3f81",
+ 749 => x"b4c40890",
+ 750 => x"055280cd",
+ 751 => x"d051f48c",
+ 752 => x"3f80cdec",
+ 753 => x"51f4853f",
+ 754 => x"80cea451",
+ 755 => x"f3fe3f81",
+ 756 => x"b4b40870",
+ 757 => x"08535f80",
+ 758 => x"ccac51f3",
+ 759 => x"ef3f80ce",
+ 760 => x"b851f3e8",
+ 761 => x"3f81b4b4",
+ 762 => x"08841108",
+ 763 => x"535b80cc",
+ 764 => x"fc51f3d8",
+ 765 => x"3f805280",
+ 766 => x"cab051f3",
+ 767 => x"cf3f81b4",
+ 768 => x"b4088811",
+ 769 => x"08535c80",
+ 770 => x"cd9851f3",
+ 771 => x"bf3f8152",
+ 772 => x"80cab051",
+ 773 => x"f3b63f81",
+ 774 => x"b4b4088c",
+ 775 => x"1108535a",
+ 776 => x"80cdb451",
+ 777 => x"f3a63f92",
+ 778 => x"5280cab0",
+ 779 => x"51f39d3f",
+ 780 => x"81b4b408",
+ 781 => x"90055280",
+ 782 => x"cdd051f3",
+ 783 => x"8f3f80cd",
+ 784 => x"ec51f388",
+ 785 => x"3f7f5280",
+ 786 => x"cef851f2",
+ 787 => x"ff3f8552",
+ 788 => x"80cab051",
+ 789 => x"f2f63f78",
+ 790 => x"5280cf94",
+ 791 => x"51f2ed3f",
+ 792 => x"8d5280ca",
+ 793 => x"b051f2e4",
+ 794 => x"3f615280",
+ 795 => x"cfb051f2",
+ 796 => x"db3f8752",
+ 797 => x"80cab051",
+ 798 => x"f2d23f60",
+ 799 => x"5280cfcc",
+ 800 => x"51f2c93f",
+ 801 => x"815280ca",
+ 802 => x"b051f2c0",
+ 803 => x"3f7d5280",
+ 804 => x"cfe851f2",
+ 805 => x"b73f80d0",
+ 806 => x"8451f2b0",
+ 807 => x"3f7c5280",
+ 808 => x"d0bc51f2",
+ 809 => x"a73f80d0",
+ 810 => x"d851f2a0",
+ 811 => x"3f80d2a4",
+ 812 => x"51f2993f",
+ 813 => x"81b4ac08",
+ 814 => x"81b4b008",
+ 815 => x"80e69408",
+ 816 => x"80e69808",
+ 817 => x"72713170",
+ 818 => x"74267574",
+ 819 => x"31707231",
+ 820 => x"80e68c0c",
+ 821 => x"444480e6",
+ 822 => x"900c80e6",
+ 823 => x"90085680",
+ 824 => x"d190555c",
+ 825 => x"595758f1",
+ 826 => x"e33f80e6",
+ 827 => x"8c085680",
+ 828 => x"762582a3",
+ 829 => x"3880d680",
+ 830 => x"0870719f",
+ 831 => x"2c9a3d53",
+ 832 => x"565680e6",
+ 833 => x"8c0880e6",
+ 834 => x"90084153",
+ 835 => x"7f547052",
+ 836 => x"5a89eb3f",
+ 837 => x"66685f80",
+ 838 => x"e5fc0c7d",
+ 839 => x"80e6800c",
+ 840 => x"80d68008",
+ 841 => x"709f2c58",
+ 842 => x"568058bd",
+ 843 => x"84c07855",
+ 844 => x"55765275",
+ 845 => x"53795187",
+ 846 => x"d13f953d",
+ 847 => x"80e68c08",
+ 848 => x"80e69008",
+ 849 => x"41557f56",
+ 850 => x"67694053",
+ 851 => x"7e547052",
+ 852 => x"5c89ab3f",
+ 853 => x"64665e80",
+ 854 => x"e6840c7c",
+ 855 => x"80e6880c",
+ 856 => x"80d68008",
+ 857 => x"709f2c40",
+ 858 => x"58805783",
+ 859 => x"dceb9480",
+ 860 => x"7755557e",
+ 861 => x"5277537b",
+ 862 => x"51878f3f",
+ 863 => x"64665d5b",
+ 864 => x"805e8ddd",
+ 865 => x"7e555580",
+ 866 => x"e68c0880",
+ 867 => x"e6900859",
+ 868 => x"52775379",
+ 869 => x"5186f33f",
+ 870 => x"66684054",
+ 871 => x"7e557a52",
+ 872 => x"7b53a93d",
+ 873 => x"ffa80551",
+ 874 => x"88d43f62",
+ 875 => x"645e81b4",
+ 876 => x"c80c7c81",
+ 877 => x"b4cc0c80",
+ 878 => x"d1a051f0",
+ 879 => x"8f3f80e6",
+ 880 => x"80085280",
+ 881 => x"d1d051f0",
+ 882 => x"833f80d1",
+ 883 => x"d851effc",
+ 884 => x"3f80e688",
+ 885 => x"085280d1",
+ 886 => x"d051eff0",
+ 887 => x"3f81b4cc",
+ 888 => x"085280d2",
+ 889 => x"8851efe4",
+ 890 => x"3f80d2a4",
+ 891 => x"51efdd3f",
+ 892 => x"800b800c",
+ 893 => x"a93d0d04",
+ 894 => x"80d2a851",
+ 895 => x"f6ac3977",
+ 896 => x"0857b053",
+ 897 => x"76527751",
+ 898 => x"9fc83f80",
+ 899 => x"c10b81b4",
+ 900 => x"c0335757",
+ 901 => x"f8ae3975",
+ 902 => x"8a3880e6",
+ 903 => x"90088126",
+ 904 => x"fdd33880",
+ 905 => x"d2d851ef",
+ 906 => x"a33f80d3",
+ 907 => x"9051ef9c",
+ 908 => x"3f80d2a4",
+ 909 => x"51ef953f",
+ 910 => x"80d68008",
+ 911 => x"70719f2c",
+ 912 => x"9a3d5356",
+ 913 => x"5680e68c",
+ 914 => x"0880e690",
+ 915 => x"0841537f",
+ 916 => x"5470525a",
+ 917 => x"87a83f66",
+ 918 => x"685f80e5",
+ 919 => x"fc0c7d80",
+ 920 => x"e6800c80",
+ 921 => x"d6800870",
+ 922 => x"9f2c5856",
+ 923 => x"8058bd84",
+ 924 => x"c0785555",
+ 925 => x"76527553",
+ 926 => x"7951858e",
+ 927 => x"3f953d80",
+ 928 => x"e68c0880",
+ 929 => x"e6900841",
+ 930 => x"557f5667",
+ 931 => x"6940537e",
+ 932 => x"5470525c",
+ 933 => x"86e83f64",
+ 934 => x"665e80e6",
+ 935 => x"840c7c80",
+ 936 => x"e6880c80",
+ 937 => x"d6800870",
+ 938 => x"9f2c4058",
+ 939 => x"805783dc",
+ 940 => x"eb948077",
+ 941 => x"55557e52",
+ 942 => x"77537b51",
+ 943 => x"84cc3f64",
+ 944 => x"665d5b80",
+ 945 => x"5e8ddd7e",
+ 946 => x"555580e6",
+ 947 => x"8c0880e6",
+ 948 => x"90085952",
+ 949 => x"77537951",
+ 950 => x"84b03f66",
+ 951 => x"6840547e",
+ 952 => x"557a527b",
+ 953 => x"53a93dff",
+ 954 => x"a8055186",
+ 955 => x"913f6264",
+ 956 => x"5e81b4c8",
+ 957 => x"0c7c81b4",
+ 958 => x"cc0c80d1",
+ 959 => x"a051edcc",
+ 960 => x"3f80e680",
+ 961 => x"085280d1",
+ 962 => x"d051edc0",
+ 963 => x"3f80d1d8",
+ 964 => x"51edb93f",
+ 965 => x"80e68808",
+ 966 => x"5280d1d0",
+ 967 => x"51edad3f",
+ 968 => x"81b4cc08",
+ 969 => x"5280d288",
+ 970 => x"51eda13f",
+ 971 => x"80d2a451",
+ 972 => x"ed9a3f80",
+ 973 => x"0b800ca9",
+ 974 => x"3d0d04a9",
+ 975 => x"3dffa005",
+ 976 => x"52805180",
+ 977 => x"d23f9f53",
+ 978 => x"80d3b052",
+ 979 => x"7c519d82",
+ 980 => x"3f7a7b81",
+ 981 => x"b4b80c81",
+ 982 => x"187081ff",
+ 983 => x"0681b4c0",
+ 984 => x"33595959",
+ 985 => x"5af5fe39",
+ 986 => x"ff16707b",
+ 987 => x"31600c5c",
+ 988 => x"800b811c",
+ 989 => x"5c5c80d6",
+ 990 => x"80087b25",
+ 991 => x"f3dc38f6",
+ 992 => x"a939ff3d",
+ 993 => x"0d738232",
+ 994 => x"70307072",
+ 995 => x"07802580",
+ 996 => x"0c525283",
+ 997 => x"3d0d04fe",
+ 998 => x"3d0d7476",
+ 999 => x"71535452",
+ 1000 => x"71822e83",
+ 1001 => x"38835171",
+ 1002 => x"812e9a38",
+ 1003 => x"8172269f",
+ 1004 => x"3871822e",
+ 1005 => x"b8387184",
+ 1006 => x"2ea93870",
+ 1007 => x"730c7080",
+ 1008 => x"0c843d0d",
+ 1009 => x"0480e40b",
+ 1010 => x"81b4b808",
+ 1011 => x"258b3880",
+ 1012 => x"730c7080",
+ 1013 => x"0c843d0d",
+ 1014 => x"0483730c",
+ 1015 => x"70800c84",
+ 1016 => x"3d0d0482",
+ 1017 => x"730c7080",
+ 1018 => x"0c843d0d",
+ 1019 => x"0481730c",
+ 1020 => x"70800c84",
+ 1021 => x"3d0d0480",
+ 1022 => x"3d0d7474",
+ 1023 => x"14820571",
+ 1024 => x"0c800c82",
+ 1025 => x"3d0d04f7",
+ 1026 => x"3d0d7b7d",
+ 1027 => x"7f618512",
+ 1028 => x"70822b75",
+ 1029 => x"11707471",
+ 1030 => x"70840553",
+ 1031 => x"0c5a5a5d",
+ 1032 => x"5b760c79",
+ 1033 => x"80f8180c",
+ 1034 => x"79861252",
+ 1035 => x"57585a5a",
+ 1036 => x"76762499",
+ 1037 => x"3876b329",
+ 1038 => x"822b7911",
+ 1039 => x"51537673",
+ 1040 => x"70840555",
+ 1041 => x"0c811454",
+ 1042 => x"757425f2",
+ 1043 => x"387681cc",
+ 1044 => x"2919fc11",
+ 1045 => x"088105fc",
+ 1046 => x"120c7a19",
+ 1047 => x"70089fa0",
+ 1048 => x"130c5856",
+ 1049 => x"850b81b4",
+ 1050 => x"b80c7580",
+ 1051 => x"0c8b3d0d",
+ 1052 => x"04fe3d0d",
+ 1053 => x"02930533",
+ 1054 => x"51800284",
+ 1055 => x"05970533",
+ 1056 => x"54527073",
+ 1057 => x"2e883871",
+ 1058 => x"800c843d",
+ 1059 => x"0d047081",
+ 1060 => x"b4bc3481",
+ 1061 => x"0b800c84",
+ 1062 => x"3d0d04f8",
+ 1063 => x"3d0d7a7c",
+ 1064 => x"5956820b",
+ 1065 => x"83195555",
+ 1066 => x"74167033",
+ 1067 => x"75335b51",
+ 1068 => x"5372792e",
+ 1069 => x"80c63880",
+ 1070 => x"c10b8116",
+ 1071 => x"81165656",
+ 1072 => x"57827525",
+ 1073 => x"e338ffa9",
+ 1074 => x"177081ff",
+ 1075 => x"06555973",
+ 1076 => x"82268338",
+ 1077 => x"87558153",
+ 1078 => x"7680d22e",
+ 1079 => x"98387752",
+ 1080 => x"75519bc3",
+ 1081 => x"3f805372",
+ 1082 => x"80082589",
+ 1083 => x"38871581",
+ 1084 => x"b4b80c81",
+ 1085 => x"5372800c",
+ 1086 => x"8a3d0d04",
+ 1087 => x"7281b4bc",
+ 1088 => x"34827525",
+ 1089 => x"ffa238ff",
+ 1090 => x"bd39ef3d",
+ 1091 => x"0d636567",
+ 1092 => x"5b427943",
+ 1093 => x"67695940",
+ 1094 => x"77415a80",
+ 1095 => x"5d805e61",
+ 1096 => x"7083ffff",
+ 1097 => x"0671902a",
+ 1098 => x"627083ff",
+ 1099 => x"ff067190",
+ 1100 => x"2a747229",
+ 1101 => x"74732975",
+ 1102 => x"73297774",
+ 1103 => x"2973902a",
+ 1104 => x"05721151",
+ 1105 => x"5856535f",
+ 1106 => x"5a575a58",
+ 1107 => x"55587373",
+ 1108 => x"27863884",
+ 1109 => x"80801656",
+ 1110 => x"73902a16",
+ 1111 => x"5b7883ff",
+ 1112 => x"ff067484",
+ 1113 => x"80802905",
+ 1114 => x"5c7a7c5a",
+ 1115 => x"5d785e77",
+ 1116 => x"7f296178",
+ 1117 => x"29057d05",
+ 1118 => x"5d7c7e56",
+ 1119 => x"7a0c7484",
+ 1120 => x"1b0c7980",
+ 1121 => x"0c933d0d",
+ 1122 => x"04f93d0d",
+ 1123 => x"797b7d54",
+ 1124 => x"58725977",
+ 1125 => x"30797030",
+ 1126 => x"7072079f",
+ 1127 => x"2a737131",
+ 1128 => x"5a525977",
+ 1129 => x"7956730c",
+ 1130 => x"53738413",
+ 1131 => x"0c54800c",
+ 1132 => x"893d0d04",
+ 1133 => x"f93d0d79",
+ 1134 => x"7b7d7f56",
+ 1135 => x"54525472",
+ 1136 => x"802ea038",
+ 1137 => x"70577158",
+ 1138 => x"a0733152",
+ 1139 => x"807225a1",
+ 1140 => x"38777074",
+ 1141 => x"2b577073",
+ 1142 => x"2a78752b",
+ 1143 => x"07565174",
+ 1144 => x"76535170",
+ 1145 => x"740c7184",
+ 1146 => x"150c7380",
+ 1147 => x"0c893d0d",
+ 1148 => x"04805677",
+ 1149 => x"72302b55",
+ 1150 => x"74765351",
+ 1151 => x"e639e43d",
+ 1152 => x"0d6ea13d",
+ 1153 => x"08a33d08",
+ 1154 => x"59575f80",
+ 1155 => x"764d774e",
+ 1156 => x"a33d08a5",
+ 1157 => x"3d08574b",
+ 1158 => x"754c5e7d",
+ 1159 => x"6c2486fb",
+ 1160 => x"38806a24",
+ 1161 => x"878f3869",
+ 1162 => x"6b58566b",
+ 1163 => x"6d5d467b",
+ 1164 => x"47754476",
+ 1165 => x"45646468",
+ 1166 => x"685c5c56",
+ 1167 => x"567481e7",
+ 1168 => x"38787627",
+ 1169 => x"82c73875",
+ 1170 => x"81ff2683",
+ 1171 => x"2b5583ff",
+ 1172 => x"ff76278c",
+ 1173 => x"389055fe",
+ 1174 => x"800a7627",
+ 1175 => x"83389855",
+ 1176 => x"75752a80",
+ 1177 => x"d3d00570",
+ 1178 => x"33a07731",
+ 1179 => x"71315755",
+ 1180 => x"5774802e",
+ 1181 => x"95387575",
+ 1182 => x"2ba07631",
+ 1183 => x"7a772b7c",
+ 1184 => x"722a077c",
+ 1185 => x"782b5d5b",
+ 1186 => x"59567590",
+ 1187 => x"2a7683ff",
+ 1188 => x"ff067154",
+ 1189 => x"7a535957",
+ 1190 => x"88803f80",
+ 1191 => x"085b87ea",
+ 1192 => x"3f800880",
+ 1193 => x"0879297c",
+ 1194 => x"902b7c90",
+ 1195 => x"2a075656",
+ 1196 => x"59737527",
+ 1197 => x"94388008",
+ 1198 => x"ff057615",
+ 1199 => x"55597574",
+ 1200 => x"26873874",
+ 1201 => x"742687b9",
+ 1202 => x"38765273",
+ 1203 => x"75315187",
+ 1204 => x"c93f8008",
+ 1205 => x"5587b33f",
+ 1206 => x"80088008",
+ 1207 => x"79297b83",
+ 1208 => x"ffff0677",
+ 1209 => x"902b0756",
+ 1210 => x"59577378",
+ 1211 => x"27963880",
+ 1212 => x"08ff0576",
+ 1213 => x"15555775",
+ 1214 => x"74268938",
+ 1215 => x"77742677",
+ 1216 => x"71315856",
+ 1217 => x"78902b77",
+ 1218 => x"0758805b",
+ 1219 => x"7a407741",
+ 1220 => x"7f615654",
+ 1221 => x"7d80d938",
+ 1222 => x"737f0c74",
+ 1223 => x"7f84050c",
+ 1224 => x"7e800c9e",
+ 1225 => x"3d0d0480",
+ 1226 => x"705c5874",
+ 1227 => x"7926dd38",
+ 1228 => x"7481ff26",
+ 1229 => x"832b5774",
+ 1230 => x"83ffff26",
+ 1231 => x"82a53874",
+ 1232 => x"772a80d3",
+ 1233 => x"d0057033",
+ 1234 => x"a0793171",
+ 1235 => x"31595c5d",
+ 1236 => x"7682b338",
+ 1237 => x"76547479",
+ 1238 => x"27833881",
+ 1239 => x"54797627",
+ 1240 => x"74075981",
+ 1241 => x"5878ffa2",
+ 1242 => x"38765880",
+ 1243 => x"5bff9d39",
+ 1244 => x"73527453",
+ 1245 => x"9e3de805",
+ 1246 => x"51fc8e3f",
+ 1247 => x"6769567f",
+ 1248 => x"0c747f84",
+ 1249 => x"050c7e80",
+ 1250 => x"0c9e3d0d",
+ 1251 => x"0475802e",
+ 1252 => x"81c43875",
+ 1253 => x"81ff2683",
+ 1254 => x"2b5583ff",
+ 1255 => x"ff76278c",
+ 1256 => x"389055fe",
+ 1257 => x"800a7627",
+ 1258 => x"83389855",
+ 1259 => x"75752a80",
+ 1260 => x"d3d00570",
+ 1261 => x"33a07731",
+ 1262 => x"7131575e",
+ 1263 => x"54748491",
+ 1264 => x"38787631",
+ 1265 => x"54817690",
+ 1266 => x"2a7783ff",
+ 1267 => x"ff065f5d",
+ 1268 => x"5b7b5273",
+ 1269 => x"5185c33f",
+ 1270 => x"80085785",
+ 1271 => x"ad3f8008",
+ 1272 => x"80087e29",
+ 1273 => x"78902b7c",
+ 1274 => x"902a0756",
+ 1275 => x"56597375",
+ 1276 => x"27943880",
+ 1277 => x"08ff0576",
+ 1278 => x"15555975",
+ 1279 => x"74268738",
+ 1280 => x"74742684",
+ 1281 => x"f3387b52",
+ 1282 => x"73753151",
+ 1283 => x"858c3f80",
+ 1284 => x"085584f6",
+ 1285 => x"3f800880",
+ 1286 => x"087e297b",
+ 1287 => x"83ffff06",
+ 1288 => x"77902b07",
+ 1289 => x"56595773",
+ 1290 => x"78279638",
+ 1291 => x"8008ff05",
+ 1292 => x"76155557",
+ 1293 => x"75742689",
+ 1294 => x"38777426",
+ 1295 => x"77713158",
+ 1296 => x"5a78902b",
+ 1297 => x"77077b41",
+ 1298 => x"417f6156",
+ 1299 => x"547d802e",
+ 1300 => x"fdc638fe",
+ 1301 => x"9b397552",
+ 1302 => x"815184ae",
+ 1303 => x"3f800856",
+ 1304 => x"feb13990",
+ 1305 => x"57fe800a",
+ 1306 => x"7527fdd3",
+ 1307 => x"38987571",
+ 1308 => x"2a80d3d0",
+ 1309 => x"057033a0",
+ 1310 => x"73317131",
+ 1311 => x"535d5e57",
+ 1312 => x"76802efd",
+ 1313 => x"cf38a077",
+ 1314 => x"3175782b",
+ 1315 => x"77722a07",
+ 1316 => x"77792b7b",
+ 1317 => x"7a2b7d74",
+ 1318 => x"2a077d7b",
+ 1319 => x"2b73902a",
+ 1320 => x"7483ffff",
+ 1321 => x"0671597f",
+ 1322 => x"772a585e",
+ 1323 => x"5c415f58",
+ 1324 => x"5c5483e6",
+ 1325 => x"3f800854",
+ 1326 => x"83d03f80",
+ 1327 => x"08800879",
+ 1328 => x"2975902b",
+ 1329 => x"7e902a07",
+ 1330 => x"56565973",
+ 1331 => x"75279938",
+ 1332 => x"8008ff05",
+ 1333 => x"7b155559",
+ 1334 => x"7a74268c",
+ 1335 => x"38737527",
+ 1336 => x"8738ff19",
+ 1337 => x"7b155559",
+ 1338 => x"76527375",
+ 1339 => x"315183aa",
+ 1340 => x"3f800855",
+ 1341 => x"83943f80",
+ 1342 => x"08800879",
+ 1343 => x"297d83ff",
+ 1344 => x"ff067790",
+ 1345 => x"2b075659",
+ 1346 => x"57737827",
+ 1347 => x"99388008",
+ 1348 => x"ff057b15",
+ 1349 => x"55577a74",
+ 1350 => x"268c3873",
+ 1351 => x"78278738",
+ 1352 => x"ff177b15",
+ 1353 => x"55577378",
+ 1354 => x"3179902b",
+ 1355 => x"78077083",
+ 1356 => x"ffff0671",
+ 1357 => x"902a7983",
+ 1358 => x"ffff067a",
+ 1359 => x"902a7372",
+ 1360 => x"29737329",
+ 1361 => x"74732976",
+ 1362 => x"74297390",
+ 1363 => x"2a057205",
+ 1364 => x"5755435f",
+ 1365 => x"5b585a57",
+ 1366 => x"595a747c",
+ 1367 => x"27863884",
+ 1368 => x"80801757",
+ 1369 => x"74902a17",
+ 1370 => x"7983ffff",
+ 1371 => x"06768480",
+ 1372 => x"80290557",
+ 1373 => x"57767a26",
+ 1374 => x"9a38767a",
+ 1375 => x"32703070",
+ 1376 => x"72078025",
+ 1377 => x"565a5b7c",
+ 1378 => x"7627fafe",
+ 1379 => x"3873802e",
+ 1380 => x"faf838ff",
+ 1381 => x"1858805b",
+ 1382 => x"faf239ff",
+ 1383 => x"76537754",
+ 1384 => x"9f3de805",
+ 1385 => x"525ef7e1",
+ 1386 => x"3f676957",
+ 1387 => x"4c754d69",
+ 1388 => x"8025f8f3",
+ 1389 => x"387d096a",
+ 1390 => x"6c5c537a",
+ 1391 => x"549f3de8",
+ 1392 => x"05525ef7",
+ 1393 => x"c43f6769",
+ 1394 => x"714c704d",
+ 1395 => x"5856f8db",
+ 1396 => x"39a07531",
+ 1397 => x"76762b7a",
+ 1398 => x"772b7c73",
+ 1399 => x"2a077c78",
+ 1400 => x"2b72902a",
+ 1401 => x"7383ffff",
+ 1402 => x"0671587e",
+ 1403 => x"762a5742",
+ 1404 => x"405d5d57",
+ 1405 => x"5881a33f",
+ 1406 => x"80085781",
+ 1407 => x"8d3f8008",
+ 1408 => x"80087e29",
+ 1409 => x"78902b7d",
+ 1410 => x"902a0756",
+ 1411 => x"56597375",
+ 1412 => x"27993880",
+ 1413 => x"08ff0576",
+ 1414 => x"15555975",
+ 1415 => x"74268c38",
+ 1416 => x"73752787",
+ 1417 => x"38ff1976",
+ 1418 => x"1555597b",
+ 1419 => x"52737531",
+ 1420 => x"5180e73f",
+ 1421 => x"80085580",
+ 1422 => x"d13f8008",
+ 1423 => x"80087e29",
+ 1424 => x"7c83ffff",
+ 1425 => x"06707890",
+ 1426 => x"2b075156",
+ 1427 => x"58587377",
+ 1428 => x"27993880",
+ 1429 => x"08ff0576",
+ 1430 => x"15555875",
+ 1431 => x"74268c38",
+ 1432 => x"73772787",
+ 1433 => x"38ff1876",
+ 1434 => x"15555878",
+ 1435 => x"902b7807",
+ 1436 => x"74783155",
+ 1437 => x"5bfada39",
+ 1438 => x"ff197615",
+ 1439 => x"5559fb86",
+ 1440 => x"39ff1976",
+ 1441 => x"155559f8",
+ 1442 => x"c0397070",
+ 1443 => x"70805375",
+ 1444 => x"52745181",
+ 1445 => x"913f5050",
+ 1446 => x"50047070",
+ 1447 => x"70815375",
+ 1448 => x"52745181",
+ 1449 => x"813f5050",
+ 1450 => x"5004fb3d",
+ 1451 => x"0d777955",
+ 1452 => x"55805675",
+ 1453 => x"7524ab38",
+ 1454 => x"8074249d",
+ 1455 => x"38805373",
+ 1456 => x"52745180",
+ 1457 => x"e13f8008",
+ 1458 => x"5475802e",
+ 1459 => x"85388008",
+ 1460 => x"30547380",
+ 1461 => x"0c873d0d",
+ 1462 => x"04733076",
+ 1463 => x"81325754",
+ 1464 => x"dc397430",
+ 1465 => x"55815673",
+ 1466 => x"8025d238",
+ 1467 => x"ec39fa3d",
+ 1468 => x"0d787a57",
+ 1469 => x"55805776",
+ 1470 => x"7524a438",
+ 1471 => x"759f2c54",
+ 1472 => x"81537574",
+ 1473 => x"32743152",
+ 1474 => x"74519b3f",
+ 1475 => x"80085476",
+ 1476 => x"802e8538",
+ 1477 => x"80083054",
+ 1478 => x"73800c88",
+ 1479 => x"3d0d0474",
+ 1480 => x"30558157",
+ 1481 => x"d739fc3d",
+ 1482 => x"0d767853",
+ 1483 => x"54815380",
+ 1484 => x"74732652",
+ 1485 => x"5572802e",
+ 1486 => x"98387080",
+ 1487 => x"2eab3880",
+ 1488 => x"7224a638",
+ 1489 => x"71107310",
+ 1490 => x"75722653",
+ 1491 => x"545272ea",
+ 1492 => x"38735178",
+ 1493 => x"83387451",
+ 1494 => x"70800c86",
+ 1495 => x"3d0d0472",
+ 1496 => x"0a100a72",
+ 1497 => x"0a100a53",
+ 1498 => x"5372802e",
+ 1499 => x"e4387174",
+ 1500 => x"26ed3873",
+ 1501 => x"72317574",
+ 1502 => x"07740a10",
+ 1503 => x"0a740a10",
+ 1504 => x"0a555556",
+ 1505 => x"54e33970",
+ 1506 => x"70735280",
+ 1507 => x"decc0851",
+ 1508 => x"933f5050",
+ 1509 => x"04707073",
+ 1510 => x"5280decc",
+ 1511 => x"085190ce",
+ 1512 => x"3f505004",
+ 1513 => x"f43d0d7e",
+ 1514 => x"608b1170",
+ 1515 => x"f8065b55",
+ 1516 => x"555d7296",
+ 1517 => x"26833890",
+ 1518 => x"58807824",
+ 1519 => x"74792607",
+ 1520 => x"55805474",
+ 1521 => x"742e0981",
+ 1522 => x"0680ca38",
+ 1523 => x"7c518d9e",
+ 1524 => x"3f7783f7",
+ 1525 => x"2680c538",
+ 1526 => x"77832a70",
+ 1527 => x"10101080",
+ 1528 => x"d6c4058c",
+ 1529 => x"11085858",
+ 1530 => x"5475772e",
+ 1531 => x"81f03884",
+ 1532 => x"1608fc06",
+ 1533 => x"8c170888",
+ 1534 => x"1808718c",
+ 1535 => x"120c8812",
+ 1536 => x"0c5b7605",
+ 1537 => x"84110881",
+ 1538 => x"0784120c",
+ 1539 => x"537c518c",
+ 1540 => x"de3f8816",
+ 1541 => x"5473800c",
+ 1542 => x"8e3d0d04",
+ 1543 => x"77892a78",
+ 1544 => x"832a5854",
+ 1545 => x"73802ebf",
+ 1546 => x"3877862a",
+ 1547 => x"b8055784",
+ 1548 => x"7427b438",
+ 1549 => x"80db1457",
+ 1550 => x"947427ab",
+ 1551 => x"38778c2a",
+ 1552 => x"80ee0557",
+ 1553 => x"80d47427",
+ 1554 => x"9e38778f",
+ 1555 => x"2a80f705",
+ 1556 => x"5782d474",
+ 1557 => x"27913877",
+ 1558 => x"922a80fc",
+ 1559 => x"05578ad4",
+ 1560 => x"74278438",
+ 1561 => x"80fe5776",
+ 1562 => x"10101080",
+ 1563 => x"d6c4058c",
+ 1564 => x"11085653",
+ 1565 => x"74732ea3",
+ 1566 => x"38841508",
+ 1567 => x"fc067079",
+ 1568 => x"31555673",
+ 1569 => x"8f2488e4",
+ 1570 => x"38738025",
+ 1571 => x"88e6388c",
+ 1572 => x"15085574",
+ 1573 => x"732e0981",
+ 1574 => x"06df3881",
+ 1575 => x"175980d6",
+ 1576 => x"d4085675",
+ 1577 => x"80d6cc2e",
+ 1578 => x"82cc3884",
+ 1579 => x"1608fc06",
+ 1580 => x"70793155",
+ 1581 => x"55738f24",
+ 1582 => x"bb3880d6",
+ 1583 => x"cc0b80d6",
+ 1584 => x"d80c80d6",
+ 1585 => x"cc0b80d6",
+ 1586 => x"d40c8074",
+ 1587 => x"2480db38",
+ 1588 => x"74168411",
+ 1589 => x"08810784",
+ 1590 => x"120c53fe",
+ 1591 => x"b0398816",
+ 1592 => x"8c110857",
+ 1593 => x"5975792e",
+ 1594 => x"098106fe",
+ 1595 => x"82388214",
+ 1596 => x"59ffab39",
+ 1597 => x"77167881",
+ 1598 => x"0784180c",
+ 1599 => x"7080d6d8",
+ 1600 => x"0c7080d6",
+ 1601 => x"d40c80d6",
+ 1602 => x"cc0b8c12",
+ 1603 => x"0c8c1108",
+ 1604 => x"88120c74",
+ 1605 => x"81078412",
+ 1606 => x"0c740574",
+ 1607 => x"710c5b7c",
+ 1608 => x"518acc3f",
+ 1609 => x"881654fd",
+ 1610 => x"ec3983ff",
+ 1611 => x"75278391",
+ 1612 => x"3874892a",
+ 1613 => x"75832a54",
+ 1614 => x"5473802e",
+ 1615 => x"bf387486",
+ 1616 => x"2ab80553",
+ 1617 => x"847427b4",
+ 1618 => x"3880db14",
+ 1619 => x"53947427",
+ 1620 => x"ab38748c",
+ 1621 => x"2a80ee05",
+ 1622 => x"5380d474",
+ 1623 => x"279e3874",
+ 1624 => x"8f2a80f7",
+ 1625 => x"055382d4",
+ 1626 => x"74279138",
+ 1627 => x"74922a80",
+ 1628 => x"fc05538a",
+ 1629 => x"d4742784",
+ 1630 => x"3880fe53",
+ 1631 => x"72101010",
+ 1632 => x"80d6c405",
+ 1633 => x"88110855",
+ 1634 => x"5773772e",
+ 1635 => x"868b3884",
+ 1636 => x"1408fc06",
+ 1637 => x"5b747b27",
+ 1638 => x"8d388814",
+ 1639 => x"08547377",
+ 1640 => x"2e098106",
+ 1641 => x"ea388c14",
+ 1642 => x"0880d6c4",
+ 1643 => x"0b840508",
+ 1644 => x"718c190c",
+ 1645 => x"7588190c",
+ 1646 => x"7788130c",
+ 1647 => x"5c57758c",
+ 1648 => x"150c7853",
+ 1649 => x"80792483",
+ 1650 => x"98387282",
+ 1651 => x"2c81712b",
+ 1652 => x"5656747b",
+ 1653 => x"2680ca38",
+ 1654 => x"7a750657",
+ 1655 => x"7682a338",
+ 1656 => x"78fc0684",
+ 1657 => x"05597410",
+ 1658 => x"707c0655",
+ 1659 => x"55738292",
+ 1660 => x"38841959",
+ 1661 => x"f13980d6",
+ 1662 => x"c40b8405",
+ 1663 => x"0879545b",
+ 1664 => x"788025c6",
+ 1665 => x"3882da39",
+ 1666 => x"74097b06",
+ 1667 => x"7080d6c4",
+ 1668 => x"0b84050c",
+ 1669 => x"5b741055",
+ 1670 => x"747b2685",
+ 1671 => x"387485bc",
+ 1672 => x"3880d6c4",
+ 1673 => x"0b880508",
+ 1674 => x"70841208",
+ 1675 => x"fc06707b",
+ 1676 => x"317b7226",
+ 1677 => x"8f722507",
+ 1678 => x"5d575c5c",
+ 1679 => x"5578802e",
+ 1680 => x"80d93879",
+ 1681 => x"1580d6bc",
+ 1682 => x"08199011",
+ 1683 => x"59545680",
+ 1684 => x"d6b808ff",
+ 1685 => x"2e8838a0",
+ 1686 => x"8f13e080",
+ 1687 => x"06577652",
+ 1688 => x"7c51888c",
+ 1689 => x"3f800854",
+ 1690 => x"8008ff2e",
+ 1691 => x"90388008",
+ 1692 => x"762782a7",
+ 1693 => x"387480d6",
+ 1694 => x"c42e829f",
+ 1695 => x"3880d6c4",
+ 1696 => x"0b880508",
+ 1697 => x"55841508",
+ 1698 => x"fc067079",
+ 1699 => x"31797226",
+ 1700 => x"8f722507",
+ 1701 => x"5d555a7a",
+ 1702 => x"83f23877",
+ 1703 => x"81078416",
+ 1704 => x"0c771570",
+ 1705 => x"80d6c40b",
+ 1706 => x"88050c74",
+ 1707 => x"81078412",
+ 1708 => x"0c567c51",
+ 1709 => x"87b93f88",
+ 1710 => x"15547380",
+ 1711 => x"0c8e3d0d",
+ 1712 => x"0474832a",
+ 1713 => x"70545480",
+ 1714 => x"7424819b",
+ 1715 => x"3872822c",
+ 1716 => x"81712b80",
+ 1717 => x"d6c80807",
+ 1718 => x"7080d6c4",
+ 1719 => x"0b84050c",
+ 1720 => x"75101010",
+ 1721 => x"80d6c405",
+ 1722 => x"88110871",
+ 1723 => x"8c1b0c70",
+ 1724 => x"881b0c79",
+ 1725 => x"88130c57",
+ 1726 => x"555c5575",
+ 1727 => x"8c150cfd",
+ 1728 => x"c1397879",
+ 1729 => x"10101080",
+ 1730 => x"d6c40570",
+ 1731 => x"565b5c8c",
+ 1732 => x"14085675",
+ 1733 => x"742ea338",
+ 1734 => x"841608fc",
+ 1735 => x"06707931",
+ 1736 => x"5853768f",
+ 1737 => x"2483f138",
+ 1738 => x"76802584",
+ 1739 => x"af388c16",
+ 1740 => x"08567574",
+ 1741 => x"2e098106",
+ 1742 => x"df388814",
+ 1743 => x"811a7083",
+ 1744 => x"06555a54",
+ 1745 => x"72c9387b",
+ 1746 => x"83065675",
+ 1747 => x"802efdb8",
+ 1748 => x"38ff1cf8",
+ 1749 => x"1b5b5c88",
+ 1750 => x"1a087a2e",
+ 1751 => x"ea38fdb5",
+ 1752 => x"39831953",
+ 1753 => x"fce43983",
+ 1754 => x"1470822c",
+ 1755 => x"81712b80",
+ 1756 => x"d6c80807",
+ 1757 => x"7080d6c4",
+ 1758 => x"0b84050c",
+ 1759 => x"76101010",
+ 1760 => x"80d6c405",
+ 1761 => x"88110871",
+ 1762 => x"8c1c0c70",
+ 1763 => x"881c0c7a",
+ 1764 => x"88130c58",
+ 1765 => x"535d5653",
+ 1766 => x"fee13980",
+ 1767 => x"d6880817",
+ 1768 => x"59800876",
+ 1769 => x"2e818b38",
+ 1770 => x"80d6b808",
+ 1771 => x"ff2e848e",
+ 1772 => x"38737631",
+ 1773 => x"1980d688",
+ 1774 => x"0c738706",
+ 1775 => x"70565372",
+ 1776 => x"802e8838",
+ 1777 => x"88733170",
+ 1778 => x"15555576",
+ 1779 => x"149fff06",
+ 1780 => x"a0807131",
+ 1781 => x"1670547e",
+ 1782 => x"53515385",
+ 1783 => x"933f8008",
+ 1784 => x"568008ff",
+ 1785 => x"2e819e38",
+ 1786 => x"80d68808",
+ 1787 => x"137080d6",
+ 1788 => x"880c7475",
+ 1789 => x"80d6c40b",
+ 1790 => x"88050c77",
+ 1791 => x"76311581",
+ 1792 => x"07555659",
+ 1793 => x"7a80d6c4",
+ 1794 => x"2e83c038",
+ 1795 => x"798f2682",
+ 1796 => x"ef38810b",
+ 1797 => x"84150c84",
+ 1798 => x"1508fc06",
+ 1799 => x"70793179",
+ 1800 => x"72268f72",
+ 1801 => x"25075d55",
+ 1802 => x"5a7a802e",
+ 1803 => x"fced3880",
+ 1804 => x"db398008",
+ 1805 => x"9fff0655",
+ 1806 => x"74feed38",
+ 1807 => x"7880d688",
+ 1808 => x"0c80d6c4",
+ 1809 => x"0b880508",
+ 1810 => x"7a188107",
+ 1811 => x"84120c55",
+ 1812 => x"80d6b408",
+ 1813 => x"79278638",
+ 1814 => x"7880d6b4",
+ 1815 => x"0c80d6b0",
+ 1816 => x"087927fc",
+ 1817 => x"a0387880",
+ 1818 => x"d6b00c84",
+ 1819 => x"1508fc06",
+ 1820 => x"70793179",
+ 1821 => x"72268f72",
+ 1822 => x"25075d55",
+ 1823 => x"5a7a802e",
+ 1824 => x"fc993888",
+ 1825 => x"39807457",
+ 1826 => x"53fedd39",
+ 1827 => x"7c5183df",
+ 1828 => x"3f800b80",
+ 1829 => x"0c8e3d0d",
+ 1830 => x"04807324",
+ 1831 => x"a5387282",
+ 1832 => x"2c81712b",
+ 1833 => x"80d6c808",
+ 1834 => x"077080d6",
+ 1835 => x"c40b8405",
+ 1836 => x"0c5c5a76",
+ 1837 => x"8c170c73",
+ 1838 => x"88170c75",
+ 1839 => x"88180cf9",
+ 1840 => x"fd398313",
+ 1841 => x"70822c81",
+ 1842 => x"712b80d6",
+ 1843 => x"c8080770",
+ 1844 => x"80d6c40b",
+ 1845 => x"84050c5d",
+ 1846 => x"5b53d839",
+ 1847 => x"7a75065c",
+ 1848 => x"7bfc9f38",
+ 1849 => x"84197510",
+ 1850 => x"5659f139",
+ 1851 => x"ff178105",
+ 1852 => x"59f7ab39",
+ 1853 => x"8c150888",
+ 1854 => x"1608718c",
+ 1855 => x"120c8812",
+ 1856 => x"0c597515",
+ 1857 => x"84110881",
+ 1858 => x"0784120c",
+ 1859 => x"587c5182",
+ 1860 => x"de3f8815",
+ 1861 => x"54fba339",
+ 1862 => x"77167881",
+ 1863 => x"0784180c",
+ 1864 => x"8c170888",
+ 1865 => x"1808718c",
+ 1866 => x"120c8812",
+ 1867 => x"0c5c7080",
+ 1868 => x"d6d80c70",
+ 1869 => x"80d6d40c",
+ 1870 => x"80d6cc0b",
+ 1871 => x"8c120c8c",
+ 1872 => x"11088812",
+ 1873 => x"0c778107",
+ 1874 => x"84120c77",
+ 1875 => x"0577710c",
+ 1876 => x"557c5182",
+ 1877 => x"9a3f8816",
+ 1878 => x"54f5ba39",
+ 1879 => x"72168411",
+ 1880 => x"08810784",
+ 1881 => x"120c588c",
+ 1882 => x"16088817",
+ 1883 => x"08718c12",
+ 1884 => x"0c88120c",
+ 1885 => x"577c5181",
+ 1886 => x"f63f8816",
+ 1887 => x"54f59639",
+ 1888 => x"7284150c",
+ 1889 => x"f41af806",
+ 1890 => x"70841d08",
+ 1891 => x"81060784",
+ 1892 => x"1d0c701c",
+ 1893 => x"5556850b",
+ 1894 => x"84150c85",
+ 1895 => x"0b88150c",
+ 1896 => x"8f7627fd",
+ 1897 => x"ab38881b",
+ 1898 => x"527c5184",
+ 1899 => x"c13f80d6",
+ 1900 => x"c40b8805",
+ 1901 => x"0880d688",
+ 1902 => x"085a55fd",
+ 1903 => x"93397880",
+ 1904 => x"d6880c73",
+ 1905 => x"80d6b80c",
+ 1906 => x"fbef3972",
+ 1907 => x"84150cfc",
+ 1908 => x"ff39fb3d",
+ 1909 => x"0d77707a",
+ 1910 => x"7c585553",
+ 1911 => x"568f7527",
+ 1912 => x"80e63872",
+ 1913 => x"76078306",
+ 1914 => x"517080dc",
+ 1915 => x"38757352",
+ 1916 => x"54707084",
+ 1917 => x"05520874",
+ 1918 => x"70840556",
+ 1919 => x"0c737170",
+ 1920 => x"84055308",
+ 1921 => x"71708405",
+ 1922 => x"530c7170",
+ 1923 => x"84055308",
+ 1924 => x"71708405",
+ 1925 => x"530c7170",
+ 1926 => x"84055308",
+ 1927 => x"71708405",
+ 1928 => x"530cf016",
+ 1929 => x"5654748f",
+ 1930 => x"26c73883",
+ 1931 => x"75279538",
+ 1932 => x"70708405",
+ 1933 => x"52087470",
+ 1934 => x"8405560c",
+ 1935 => x"fc155574",
+ 1936 => x"8326ed38",
+ 1937 => x"73715452",
+ 1938 => x"ff155170",
+ 1939 => x"ff2e9838",
+ 1940 => x"72708105",
+ 1941 => x"54337270",
+ 1942 => x"81055434",
+ 1943 => x"ff115170",
+ 1944 => x"ff2e0981",
+ 1945 => x"06ea3875",
+ 1946 => x"800c873d",
+ 1947 => x"0d040404",
+ 1948 => x"70707070",
+ 1949 => x"800b81b6",
+ 1950 => x"9c0c7651",
+ 1951 => x"87cc3f80",
+ 1952 => x"08538008",
+ 1953 => x"ff2e8938",
+ 1954 => x"72800c50",
+ 1955 => x"50505004",
+ 1956 => x"81b69c08",
+ 1957 => x"5473802e",
+ 1958 => x"ef387574",
+ 1959 => x"710c5272",
+ 1960 => x"800c5050",
+ 1961 => x"505004fb",
+ 1962 => x"3d0d7779",
+ 1963 => x"70720783",
+ 1964 => x"06535452",
+ 1965 => x"70933871",
+ 1966 => x"73730854",
+ 1967 => x"56547173",
+ 1968 => x"082e80c4",
+ 1969 => x"38737554",
+ 1970 => x"52713370",
+ 1971 => x"81ff0652",
+ 1972 => x"5470802e",
+ 1973 => x"9d387233",
+ 1974 => x"5570752e",
+ 1975 => x"09810695",
+ 1976 => x"38811281",
+ 1977 => x"14713370",
+ 1978 => x"81ff0654",
+ 1979 => x"56545270",
+ 1980 => x"e5387233",
+ 1981 => x"557381ff",
+ 1982 => x"067581ff",
+ 1983 => x"06717131",
+ 1984 => x"800c5552",
+ 1985 => x"873d0d04",
+ 1986 => x"7109f7fb",
+ 1987 => x"fdff1306",
+ 1988 => x"f8848281",
+ 1989 => x"80065271",
+ 1990 => x"97388414",
+ 1991 => x"84167108",
+ 1992 => x"54565471",
+ 1993 => x"75082ee0",
+ 1994 => x"38737554",
+ 1995 => x"52ff9a39",
+ 1996 => x"800b800c",
+ 1997 => x"873d0d04",
+ 1998 => x"fb3d0d77",
+ 1999 => x"705256fe",
+ 2000 => x"ad3f80d6",
+ 2001 => x"c40b8805",
+ 2002 => x"08841108",
+ 2003 => x"fc06707b",
+ 2004 => x"319fef05",
+ 2005 => x"e08006e0",
+ 2006 => x"80055255",
+ 2007 => x"55a08075",
+ 2008 => x"24943880",
+ 2009 => x"527551fe",
+ 2010 => x"873f80d6",
+ 2011 => x"cc081453",
+ 2012 => x"7280082e",
+ 2013 => x"8f387551",
+ 2014 => x"fdf53f80",
+ 2015 => x"5372800c",
+ 2016 => x"873d0d04",
+ 2017 => x"74305275",
+ 2018 => x"51fde53f",
+ 2019 => x"8008ff2e",
+ 2020 => x"a83880d6",
+ 2021 => x"c40b8805",
+ 2022 => x"08747631",
+ 2023 => x"81078412",
+ 2024 => x"0c5380d6",
+ 2025 => x"88087531",
+ 2026 => x"80d6880c",
+ 2027 => x"7551fdbf",
+ 2028 => x"3f810b80",
+ 2029 => x"0c873d0d",
+ 2030 => x"04805275",
+ 2031 => x"51fdb13f",
+ 2032 => x"80d6c40b",
+ 2033 => x"88050880",
+ 2034 => x"08713154",
+ 2035 => x"548f7325",
+ 2036 => x"ffa43880",
+ 2037 => x"0880d6b8",
+ 2038 => x"083180d6",
+ 2039 => x"880c7281",
+ 2040 => x"0784150c",
+ 2041 => x"7551fd87",
+ 2042 => x"3f8053ff",
+ 2043 => x"9039f73d",
+ 2044 => x"0d7b7d54",
+ 2045 => x"5a72802e",
+ 2046 => x"82833879",
+ 2047 => x"51fcef3f",
+ 2048 => x"f8138411",
+ 2049 => x"0870fe06",
+ 2050 => x"70138411",
+ 2051 => x"08fc065c",
+ 2052 => x"57585457",
+ 2053 => x"80d6cc08",
+ 2054 => x"742e82de",
+ 2055 => x"38778415",
+ 2056 => x"0c807381",
+ 2057 => x"06565974",
+ 2058 => x"792e81d5",
+ 2059 => x"38771484",
+ 2060 => x"11088106",
+ 2061 => x"565374a0",
+ 2062 => x"38771656",
+ 2063 => x"7881e638",
+ 2064 => x"88140855",
+ 2065 => x"7480d6cc",
+ 2066 => x"2e82f938",
+ 2067 => x"8c140870",
+ 2068 => x"8c170c75",
+ 2069 => x"88120c58",
+ 2070 => x"75810784",
+ 2071 => x"180c7517",
+ 2072 => x"76710c54",
+ 2073 => x"78819138",
+ 2074 => x"83ff7627",
+ 2075 => x"81c83875",
+ 2076 => x"892a7683",
+ 2077 => x"2a545473",
+ 2078 => x"802ebf38",
+ 2079 => x"75862ab8",
+ 2080 => x"05538474",
+ 2081 => x"27b43880",
+ 2082 => x"db145394",
+ 2083 => x"7427ab38",
+ 2084 => x"758c2a80",
+ 2085 => x"ee055380",
+ 2086 => x"d474279e",
+ 2087 => x"38758f2a",
+ 2088 => x"80f70553",
+ 2089 => x"82d47427",
+ 2090 => x"91387592",
+ 2091 => x"2a80fc05",
+ 2092 => x"538ad474",
+ 2093 => x"27843880",
+ 2094 => x"fe537210",
+ 2095 => x"101080d6",
+ 2096 => x"c4058811",
+ 2097 => x"08555573",
+ 2098 => x"752e82bf",
+ 2099 => x"38841408",
+ 2100 => x"fc065975",
+ 2101 => x"79278d38",
+ 2102 => x"88140854",
+ 2103 => x"73752e09",
+ 2104 => x"8106ea38",
+ 2105 => x"8c140870",
+ 2106 => x"8c190c74",
+ 2107 => x"88190c77",
+ 2108 => x"88120c55",
+ 2109 => x"768c150c",
+ 2110 => x"7951faf3",
+ 2111 => x"3f8b3d0d",
+ 2112 => x"04760877",
+ 2113 => x"71315876",
+ 2114 => x"05881808",
+ 2115 => x"56567480",
+ 2116 => x"d6cc2e80",
+ 2117 => x"e0388c17",
+ 2118 => x"08708c17",
+ 2119 => x"0c758812",
+ 2120 => x"0c53fe89",
+ 2121 => x"39881408",
+ 2122 => x"8c150870",
+ 2123 => x"8c130c59",
+ 2124 => x"88190cfe",
+ 2125 => x"a3397583",
+ 2126 => x"2a705454",
+ 2127 => x"80742481",
+ 2128 => x"98387282",
+ 2129 => x"2c81712b",
+ 2130 => x"80d6c808",
+ 2131 => x"0780d6c4",
+ 2132 => x"0b84050c",
+ 2133 => x"74101010",
+ 2134 => x"80d6c405",
+ 2135 => x"88110871",
+ 2136 => x"8c1b0c70",
+ 2137 => x"881b0c79",
+ 2138 => x"88130c56",
+ 2139 => x"5a55768c",
+ 2140 => x"150cff84",
+ 2141 => x"398159fd",
+ 2142 => x"b4397716",
+ 2143 => x"73810654",
+ 2144 => x"55729838",
+ 2145 => x"76087771",
+ 2146 => x"31587505",
+ 2147 => x"8c180888",
+ 2148 => x"1908718c",
+ 2149 => x"120c8812",
+ 2150 => x"0c555574",
+ 2151 => x"81078418",
+ 2152 => x"0c7680d6",
+ 2153 => x"c40b8805",
+ 2154 => x"0c80d6c0",
+ 2155 => x"087526fe",
+ 2156 => x"c73880d6",
+ 2157 => x"bc085279",
+ 2158 => x"51fafd3f",
+ 2159 => x"7951f9af",
+ 2160 => x"3ffeba39",
+ 2161 => x"81778c17",
+ 2162 => x"0c778817",
+ 2163 => x"0c758c19",
+ 2164 => x"0c758819",
+ 2165 => x"0c59fd80",
+ 2166 => x"39831470",
+ 2167 => x"822c8171",
+ 2168 => x"2b80d6c8",
+ 2169 => x"080780d6",
+ 2170 => x"c40b8405",
+ 2171 => x"0c751010",
+ 2172 => x"1080d6c4",
+ 2173 => x"05881108",
+ 2174 => x"718c1c0c",
+ 2175 => x"70881c0c",
+ 2176 => x"7a88130c",
+ 2177 => x"575b5653",
+ 2178 => x"fee43980",
+ 2179 => x"7324a338",
+ 2180 => x"72822c81",
+ 2181 => x"712b80d6",
+ 2182 => x"c8080780",
+ 2183 => x"d6c40b84",
+ 2184 => x"050c5874",
+ 2185 => x"8c180c73",
+ 2186 => x"88180c76",
+ 2187 => x"88160cfd",
+ 2188 => x"c3398313",
+ 2189 => x"70822c81",
+ 2190 => x"712b80d6",
+ 2191 => x"c8080780",
+ 2192 => x"d6c40b84",
+ 2193 => x"050c5953",
+ 2194 => x"da397070",
+ 2195 => x"7080e5f4",
+ 2196 => x"08893881",
+ 2197 => x"b6a00b80",
+ 2198 => x"e5f40c80",
+ 2199 => x"e5f40875",
+ 2200 => x"115252ff",
+ 2201 => x"537087fb",
+ 2202 => x"80802688",
+ 2203 => x"387080e5",
+ 2204 => x"f40c7153",
+ 2205 => x"72800c50",
+ 2206 => x"505004fd",
+ 2207 => x"3d0d800b",
+ 2208 => x"80d5f408",
+ 2209 => x"54547281",
+ 2210 => x"2e9b3873",
+ 2211 => x"80e5f80c",
+ 2212 => x"c3ee3fc2",
+ 2213 => x"eb3f80e5",
+ 2214 => x"cc528151",
+ 2215 => x"cc933f80",
+ 2216 => x"085180dd",
+ 2217 => x"3f7280e5",
+ 2218 => x"f80cc3d4",
+ 2219 => x"3fc2d13f",
+ 2220 => x"80e5cc52",
+ 2221 => x"8151cbf9",
+ 2222 => x"3f800851",
+ 2223 => x"80c33f00",
+ 2224 => x"ff3900ff",
+ 2225 => x"39f43d0d",
+ 2226 => x"7e80e5ec",
+ 2227 => x"08700870",
+ 2228 => x"81ff0692",
+ 2229 => x"3df80555",
+ 2230 => x"515a5759",
+ 2231 => x"c48f3f80",
+ 2232 => x"5477557b",
+ 2233 => x"7d585276",
+ 2234 => x"538e3df0",
+ 2235 => x"0551de8e",
+ 2236 => x"3f797b58",
+ 2237 => x"790c7684",
+ 2238 => x"1a0c7880",
+ 2239 => x"0c8e3d0d",
+ 2240 => x"04f73d0d",
+ 2241 => x"7b80decc",
+ 2242 => x"0882c811",
+ 2243 => x"085a545a",
+ 2244 => x"77802e80",
+ 2245 => x"da388188",
+ 2246 => x"18841908",
+ 2247 => x"ff058171",
+ 2248 => x"2b595559",
+ 2249 => x"80742480",
+ 2250 => x"ea388074",
+ 2251 => x"24b53873",
+ 2252 => x"822b7811",
+ 2253 => x"88055656",
+ 2254 => x"81801908",
+ 2255 => x"77065372",
+ 2256 => x"802eb638",
+ 2257 => x"78167008",
+ 2258 => x"53537951",
+ 2259 => x"74085372",
+ 2260 => x"2dff14fc",
+ 2261 => x"17fc1779",
+ 2262 => x"812c5a57",
+ 2263 => x"57547380",
+ 2264 => x"25d63877",
+ 2265 => x"085877ff",
+ 2266 => x"ad3880de",
+ 2267 => x"cc0853bc",
+ 2268 => x"1308a538",
+ 2269 => x"7951fec7",
+ 2270 => x"3f740853",
+ 2271 => x"722dff14",
+ 2272 => x"fc17fc17",
+ 2273 => x"79812c5a",
+ 2274 => x"57575473",
+ 2275 => x"8025ffa8",
+ 2276 => x"38d13980",
+ 2277 => x"57ff9339",
+ 2278 => x"7251bc13",
+ 2279 => x"0854732d",
+ 2280 => x"7951fe9b",
+ 2281 => x"3f707080",
+ 2282 => x"e5d40bfc",
+ 2283 => x"05700852",
+ 2284 => x"5270ff2e",
+ 2285 => x"9138702d",
+ 2286 => x"fc127008",
+ 2287 => x"525270ff",
+ 2288 => x"2e098106",
+ 2289 => x"f1385050",
+ 2290 => x"0404c2ff",
+ 2291 => x"3f040000",
+ 2292 => x"00000040",
+ 2293 => x"30313233",
+ 2294 => x"34353637",
+ 2295 => x"38390000",
+ 2296 => x"44485259",
+ 2297 => x"53544f4e",
+ 2298 => x"45205052",
+ 2299 => x"4f475241",
+ 2300 => x"4d2c2053",
+ 2301 => x"4f4d4520",
+ 2302 => x"53545249",
+ 2303 => x"4e470000",
+ 2304 => x"44485259",
+ 2305 => x"53544f4e",
+ 2306 => x"45205052",
+ 2307 => x"4f475241",
+ 2308 => x"4d2c2031",
+ 2309 => x"27535420",
+ 2310 => x"53545249",
+ 2311 => x"4e470000",
+ 2312 => x"44687279",
+ 2313 => x"73746f6e",
+ 2314 => x"65204265",
+ 2315 => x"6e63686d",
+ 2316 => x"61726b2c",
+ 2317 => x"20566572",
+ 2318 => x"73696f6e",
+ 2319 => x"20322e31",
+ 2320 => x"20284c61",
+ 2321 => x"6e677561",
+ 2322 => x"67653a20",
+ 2323 => x"43290a00",
+ 2324 => x"50726f67",
+ 2325 => x"72616d20",
+ 2326 => x"636f6d70",
+ 2327 => x"696c6564",
+ 2328 => x"20776974",
+ 2329 => x"68202772",
+ 2330 => x"65676973",
+ 2331 => x"74657227",
+ 2332 => x"20617474",
+ 2333 => x"72696275",
+ 2334 => x"74650a00",
+ 2335 => x"45786563",
+ 2336 => x"7574696f",
+ 2337 => x"6e207374",
+ 2338 => x"61727473",
+ 2339 => x"2c202564",
+ 2340 => x"2072756e",
+ 2341 => x"73207468",
+ 2342 => x"726f7567",
+ 2343 => x"68204468",
+ 2344 => x"72797374",
+ 2345 => x"6f6e650a",
+ 2346 => x"00000000",
+ 2347 => x"44485259",
+ 2348 => x"53544f4e",
+ 2349 => x"45205052",
+ 2350 => x"4f475241",
+ 2351 => x"4d2c2032",
+ 2352 => x"274e4420",
+ 2353 => x"53545249",
+ 2354 => x"4e470000",
+ 2355 => x"45786563",
+ 2356 => x"7574696f",
+ 2357 => x"6e20656e",
+ 2358 => x"64730a00",
+ 2359 => x"46696e61",
+ 2360 => x"6c207661",
+ 2361 => x"6c756573",
+ 2362 => x"206f6620",
+ 2363 => x"74686520",
+ 2364 => x"76617269",
+ 2365 => x"61626c65",
+ 2366 => x"73207573",
+ 2367 => x"65642069",
+ 2368 => x"6e207468",
+ 2369 => x"65206265",
+ 2370 => x"6e63686d",
+ 2371 => x"61726b3a",
+ 2372 => x"0a000000",
+ 2373 => x"496e745f",
+ 2374 => x"476c6f62",
+ 2375 => x"3a202020",
+ 2376 => x"20202020",
+ 2377 => x"20202020",
+ 2378 => x"2025640a",
+ 2379 => x"00000000",
+ 2380 => x"20202020",
+ 2381 => x"20202020",
+ 2382 => x"73686f75",
+ 2383 => x"6c642062",
+ 2384 => x"653a2020",
+ 2385 => x"2025640a",
+ 2386 => x"00000000",
+ 2387 => x"426f6f6c",
+ 2388 => x"5f476c6f",
+ 2389 => x"623a2020",
+ 2390 => x"20202020",
+ 2391 => x"20202020",
+ 2392 => x"2025640a",
+ 2393 => x"00000000",
+ 2394 => x"43685f31",
+ 2395 => x"5f476c6f",
+ 2396 => x"623a2020",
+ 2397 => x"20202020",
+ 2398 => x"20202020",
+ 2399 => x"2025630a",
+ 2400 => x"00000000",
+ 2401 => x"20202020",
+ 2402 => x"20202020",
+ 2403 => x"73686f75",
+ 2404 => x"6c642062",
+ 2405 => x"653a2020",
+ 2406 => x"2025630a",
+ 2407 => x"00000000",
+ 2408 => x"43685f32",
+ 2409 => x"5f476c6f",
+ 2410 => x"623a2020",
+ 2411 => x"20202020",
+ 2412 => x"20202020",
+ 2413 => x"2025630a",
+ 2414 => x"00000000",
+ 2415 => x"4172725f",
+ 2416 => x"315f476c",
+ 2417 => x"6f625b38",
+ 2418 => x"5d3a2020",
+ 2419 => x"20202020",
+ 2420 => x"2025640a",
+ 2421 => x"00000000",
+ 2422 => x"4172725f",
+ 2423 => x"325f476c",
+ 2424 => x"6f625b38",
+ 2425 => x"5d5b375d",
+ 2426 => x"3a202020",
+ 2427 => x"2025640a",
+ 2428 => x"00000000",
+ 2429 => x"20202020",
+ 2430 => x"20202020",
+ 2431 => x"73686f75",
+ 2432 => x"6c642062",
+ 2433 => x"653a2020",
+ 2434 => x"204e756d",
+ 2435 => x"6265725f",
+ 2436 => x"4f665f52",
+ 2437 => x"756e7320",
+ 2438 => x"2b203130",
+ 2439 => x"0a000000",
+ 2440 => x"5074725f",
+ 2441 => x"476c6f62",
+ 2442 => x"2d3e0a00",
+ 2443 => x"20205074",
+ 2444 => x"725f436f",
+ 2445 => x"6d703a20",
+ 2446 => x"20202020",
+ 2447 => x"20202020",
+ 2448 => x"2025640a",
+ 2449 => x"00000000",
+ 2450 => x"20202020",
+ 2451 => x"20202020",
+ 2452 => x"73686f75",
+ 2453 => x"6c642062",
+ 2454 => x"653a2020",
+ 2455 => x"2028696d",
+ 2456 => x"706c656d",
+ 2457 => x"656e7461",
+ 2458 => x"74696f6e",
+ 2459 => x"2d646570",
+ 2460 => x"656e6465",
+ 2461 => x"6e74290a",
+ 2462 => x"00000000",
+ 2463 => x"20204469",
+ 2464 => x"7363723a",
+ 2465 => x"20202020",
+ 2466 => x"20202020",
+ 2467 => x"20202020",
+ 2468 => x"2025640a",
+ 2469 => x"00000000",
+ 2470 => x"2020456e",
+ 2471 => x"756d5f43",
+ 2472 => x"6f6d703a",
+ 2473 => x"20202020",
+ 2474 => x"20202020",
+ 2475 => x"2025640a",
+ 2476 => x"00000000",
+ 2477 => x"2020496e",
+ 2478 => x"745f436f",
+ 2479 => x"6d703a20",
+ 2480 => x"20202020",
+ 2481 => x"20202020",
+ 2482 => x"2025640a",
+ 2483 => x"00000000",
+ 2484 => x"20205374",
+ 2485 => x"725f436f",
+ 2486 => x"6d703a20",
+ 2487 => x"20202020",
+ 2488 => x"20202020",
+ 2489 => x"2025730a",
+ 2490 => x"00000000",
+ 2491 => x"20202020",
+ 2492 => x"20202020",
+ 2493 => x"73686f75",
+ 2494 => x"6c642062",
+ 2495 => x"653a2020",
+ 2496 => x"20444852",
+ 2497 => x"5953544f",
+ 2498 => x"4e452050",
+ 2499 => x"524f4752",
+ 2500 => x"414d2c20",
+ 2501 => x"534f4d45",
+ 2502 => x"20535452",
+ 2503 => x"494e470a",
+ 2504 => x"00000000",
+ 2505 => x"4e657874",
+ 2506 => x"5f507472",
+ 2507 => x"5f476c6f",
+ 2508 => x"622d3e0a",
+ 2509 => x"00000000",
+ 2510 => x"20202020",
+ 2511 => x"20202020",
+ 2512 => x"73686f75",
+ 2513 => x"6c642062",
+ 2514 => x"653a2020",
+ 2515 => x"2028696d",
+ 2516 => x"706c656d",
+ 2517 => x"656e7461",
+ 2518 => x"74696f6e",
+ 2519 => x"2d646570",
+ 2520 => x"656e6465",
+ 2521 => x"6e74292c",
+ 2522 => x"2073616d",
+ 2523 => x"65206173",
+ 2524 => x"2061626f",
+ 2525 => x"76650a00",
+ 2526 => x"496e745f",
+ 2527 => x"315f4c6f",
+ 2528 => x"633a2020",
+ 2529 => x"20202020",
+ 2530 => x"20202020",
+ 2531 => x"2025640a",
+ 2532 => x"00000000",
+ 2533 => x"496e745f",
+ 2534 => x"325f4c6f",
+ 2535 => x"633a2020",
+ 2536 => x"20202020",
+ 2537 => x"20202020",
+ 2538 => x"2025640a",
+ 2539 => x"00000000",
+ 2540 => x"496e745f",
+ 2541 => x"335f4c6f",
+ 2542 => x"633a2020",
+ 2543 => x"20202020",
+ 2544 => x"20202020",
+ 2545 => x"2025640a",
+ 2546 => x"00000000",
+ 2547 => x"456e756d",
+ 2548 => x"5f4c6f63",
+ 2549 => x"3a202020",
+ 2550 => x"20202020",
+ 2551 => x"20202020",
+ 2552 => x"2025640a",
+ 2553 => x"00000000",
+ 2554 => x"5374725f",
+ 2555 => x"315f4c6f",
+ 2556 => x"633a2020",
+ 2557 => x"20202020",
+ 2558 => x"20202020",
+ 2559 => x"2025730a",
+ 2560 => x"00000000",
+ 2561 => x"20202020",
+ 2562 => x"20202020",
+ 2563 => x"73686f75",
+ 2564 => x"6c642062",
+ 2565 => x"653a2020",
+ 2566 => x"20444852",
+ 2567 => x"5953544f",
+ 2568 => x"4e452050",
+ 2569 => x"524f4752",
+ 2570 => x"414d2c20",
+ 2571 => x"31275354",
+ 2572 => x"20535452",
+ 2573 => x"494e470a",
+ 2574 => x"00000000",
+ 2575 => x"5374725f",
+ 2576 => x"325f4c6f",
+ 2577 => x"633a2020",
+ 2578 => x"20202020",
+ 2579 => x"20202020",
+ 2580 => x"2025730a",
+ 2581 => x"00000000",
+ 2582 => x"20202020",
+ 2583 => x"20202020",
+ 2584 => x"73686f75",
+ 2585 => x"6c642062",
+ 2586 => x"653a2020",
+ 2587 => x"20444852",
+ 2588 => x"5953544f",
+ 2589 => x"4e452050",
+ 2590 => x"524f4752",
+ 2591 => x"414d2c20",
+ 2592 => x"32274e44",
+ 2593 => x"20535452",
+ 2594 => x"494e470a",
+ 2595 => x"00000000",
+ 2596 => x"55736572",
+ 2597 => x"2074696d",
+ 2598 => x"653a2025",
+ 2599 => x"640a0000",
+ 2600 => x"4d696372",
+ 2601 => x"6f736563",
+ 2602 => x"6f6e6473",
+ 2603 => x"20666f72",
+ 2604 => x"206f6e65",
+ 2605 => x"2072756e",
+ 2606 => x"20746872",
+ 2607 => x"6f756768",
+ 2608 => x"20446872",
+ 2609 => x"7973746f",
+ 2610 => x"6e653a20",
+ 2611 => x"00000000",
+ 2612 => x"2564200a",
+ 2613 => x"00000000",
+ 2614 => x"44687279",
+ 2615 => x"73746f6e",
+ 2616 => x"65732070",
+ 2617 => x"65722053",
+ 2618 => x"65636f6e",
+ 2619 => x"643a2020",
+ 2620 => x"20202020",
+ 2621 => x"20202020",
+ 2622 => x"20202020",
+ 2623 => x"20202020",
+ 2624 => x"20202020",
+ 2625 => x"00000000",
+ 2626 => x"56415820",
+ 2627 => x"4d495053",
+ 2628 => x"20726174",
+ 2629 => x"696e6720",
+ 2630 => x"2a203130",
+ 2631 => x"3030203d",
+ 2632 => x"20256420",
+ 2633 => x"0a000000",
+ 2634 => x"50726f67",
+ 2635 => x"72616d20",
+ 2636 => x"636f6d70",
+ 2637 => x"696c6564",
+ 2638 => x"20776974",
+ 2639 => x"686f7574",
+ 2640 => x"20277265",
+ 2641 => x"67697374",
+ 2642 => x"65722720",
+ 2643 => x"61747472",
+ 2644 => x"69627574",
+ 2645 => x"650a0000",
+ 2646 => x"4d656173",
+ 2647 => x"75726564",
+ 2648 => x"2074696d",
+ 2649 => x"6520746f",
+ 2650 => x"6f20736d",
+ 2651 => x"616c6c20",
+ 2652 => x"746f206f",
+ 2653 => x"62746169",
+ 2654 => x"6e206d65",
+ 2655 => x"616e696e",
+ 2656 => x"6766756c",
+ 2657 => x"20726573",
+ 2658 => x"756c7473",
+ 2659 => x"0a000000",
+ 2660 => x"506c6561",
+ 2661 => x"73652069",
+ 2662 => x"6e637265",
+ 2663 => x"61736520",
+ 2664 => x"6e756d62",
+ 2665 => x"6572206f",
+ 2666 => x"66207275",
+ 2667 => x"6e730a00",
+ 2668 => x"44485259",
+ 2669 => x"53544f4e",
+ 2670 => x"45205052",
+ 2671 => x"4f475241",
+ 2672 => x"4d2c2033",
+ 2673 => x"27524420",
+ 2674 => x"53545249",
+ 2675 => x"4e470000",
+ 2676 => x"00010202",
+ 2677 => x"03030303",
+ 2678 => x"04040404",
+ 2679 => x"04040404",
+ 2680 => x"05050505",
+ 2681 => x"05050505",
+ 2682 => x"05050505",
+ 2683 => x"05050505",
+ 2684 => x"06060606",
+ 2685 => x"06060606",
+ 2686 => x"06060606",
+ 2687 => x"06060606",
+ 2688 => x"06060606",
+ 2689 => x"06060606",
+ 2690 => x"06060606",
+ 2691 => x"06060606",
+ 2692 => x"07070707",
+ 2693 => x"07070707",
+ 2694 => x"07070707",
+ 2695 => x"07070707",
+ 2696 => x"07070707",
+ 2697 => x"07070707",
+ 2698 => x"07070707",
+ 2699 => x"07070707",
+ 2700 => x"07070707",
+ 2701 => x"07070707",
+ 2702 => x"07070707",
+ 2703 => x"07070707",
+ 2704 => x"07070707",
+ 2705 => x"07070707",
+ 2706 => x"07070707",
+ 2707 => x"07070707",
+ 2708 => x"08080808",
+ 2709 => x"08080808",
+ 2710 => x"08080808",
+ 2711 => x"08080808",
+ 2712 => x"08080808",
+ 2713 => x"08080808",
+ 2714 => x"08080808",
+ 2715 => x"08080808",
+ 2716 => x"08080808",
+ 2717 => x"08080808",
+ 2718 => x"08080808",
+ 2719 => x"08080808",
+ 2720 => x"08080808",
+ 2721 => x"08080808",
+ 2722 => x"08080808",
+ 2723 => x"08080808",
+ 2724 => x"08080808",
+ 2725 => x"08080808",
+ 2726 => x"08080808",
+ 2727 => x"08080808",
+ 2728 => x"08080808",
+ 2729 => x"08080808",
+ 2730 => x"08080808",
+ 2731 => x"08080808",
+ 2732 => x"08080808",
+ 2733 => x"08080808",
+ 2734 => x"08080808",
+ 2735 => x"08080808",
+ 2736 => x"08080808",
+ 2737 => x"08080808",
+ 2738 => x"08080808",
+ 2739 => x"08080808",
+ 2740 => x"43000000",
+ 2741 => x"64756d6d",
+ 2742 => x"792e6578",
+ 2743 => x"65000000",
+ 2744 => x"00ffffff",
+ 2745 => x"ff00ffff",
+ 2746 => x"ffff00ff",
+ 2747 => x"ffffff00",
+ 2748 => x"00000000",
+ 2749 => x"00000000",
+ 2750 => x"00000000",
+ 2751 => x"000032dc",
+ 2752 => x"0000c350",
+ 2753 => x"00000000",
+ 2754 => x"00000000",
+ 2755 => x"00000000",
+ 2756 => x"00000000",
+ 2757 => x"00000000",
+ 2758 => x"00000000",
+ 2759 => x"00000000",
+ 2760 => x"00000000",
+ 2761 => x"00000000",
+ 2762 => x"00000000",
+ 2763 => x"00000000",
+ 2764 => x"00000000",
+ 2765 => x"00000000",
+ 2766 => x"ffffffff",
+ 2767 => x"00000000",
+ 2768 => x"00020000",
+ 2769 => x"00000000",
+ 2770 => x"00000000",
+ 2771 => x"00002b44",
+ 2772 => x"00002b44",
+ 2773 => x"00002b4c",
+ 2774 => x"00002b4c",
+ 2775 => x"00002b54",
+ 2776 => x"00002b54",
+ 2777 => x"00002b5c",
+ 2778 => x"00002b5c",
+ 2779 => x"00002b64",
+ 2780 => x"00002b64",
+ 2781 => x"00002b6c",
+ 2782 => x"00002b6c",
+ 2783 => x"00002b74",
+ 2784 => x"00002b74",
+ 2785 => x"00002b7c",
+ 2786 => x"00002b7c",
+ 2787 => x"00002b84",
+ 2788 => x"00002b84",
+ 2789 => x"00002b8c",
+ 2790 => x"00002b8c",
+ 2791 => x"00002b94",
+ 2792 => x"00002b94",
+ 2793 => x"00002b9c",
+ 2794 => x"00002b9c",
+ 2795 => x"00002ba4",
+ 2796 => x"00002ba4",
+ 2797 => x"00002bac",
+ 2798 => x"00002bac",
+ 2799 => x"00002bb4",
+ 2800 => x"00002bb4",
+ 2801 => x"00002bbc",
+ 2802 => x"00002bbc",
+ 2803 => x"00002bc4",
+ 2804 => x"00002bc4",
+ 2805 => x"00002bcc",
+ 2806 => x"00002bcc",
+ 2807 => x"00002bd4",
+ 2808 => x"00002bd4",
+ 2809 => x"00002bdc",
+ 2810 => x"00002bdc",
+ 2811 => x"00002be4",
+ 2812 => x"00002be4",
+ 2813 => x"00002bec",
+ 2814 => x"00002bec",
+ 2815 => x"00002bf4",
+ 2816 => x"00002bf4",
+ 2817 => x"00002bfc",
+ 2818 => x"00002bfc",
+ 2819 => x"00002c04",
+ 2820 => x"00002c04",
+ 2821 => x"00002c0c",
+ 2822 => x"00002c0c",
+ 2823 => x"00002c14",
+ 2824 => x"00002c14",
+ 2825 => x"00002c1c",
+ 2826 => x"00002c1c",
+ 2827 => x"00002c24",
+ 2828 => x"00002c24",
+ 2829 => x"00002c2c",
+ 2830 => x"00002c2c",
+ 2831 => x"00002c34",
+ 2832 => x"00002c34",
+ 2833 => x"00002c3c",
+ 2834 => x"00002c3c",
+ 2835 => x"00002c44",
+ 2836 => x"00002c44",
+ 2837 => x"00002c4c",
+ 2838 => x"00002c4c",
+ 2839 => x"00002c54",
+ 2840 => x"00002c54",
+ 2841 => x"00002c5c",
+ 2842 => x"00002c5c",
+ 2843 => x"00002c64",
+ 2844 => x"00002c64",
+ 2845 => x"00002c6c",
+ 2846 => x"00002c6c",
+ 2847 => x"00002c74",
+ 2848 => x"00002c74",
+ 2849 => x"00002c7c",
+ 2850 => x"00002c7c",
+ 2851 => x"00002c84",
+ 2852 => x"00002c84",
+ 2853 => x"00002c8c",
+ 2854 => x"00002c8c",
+ 2855 => x"00002c94",
+ 2856 => x"00002c94",
+ 2857 => x"00002c9c",
+ 2858 => x"00002c9c",
+ 2859 => x"00002ca4",
+ 2860 => x"00002ca4",
+ 2861 => x"00002cac",
+ 2862 => x"00002cac",
+ 2863 => x"00002cb4",
+ 2864 => x"00002cb4",
+ 2865 => x"00002cbc",
+ 2866 => x"00002cbc",
+ 2867 => x"00002cc4",
+ 2868 => x"00002cc4",
+ 2869 => x"00002ccc",
+ 2870 => x"00002ccc",
+ 2871 => x"00002cd4",
+ 2872 => x"00002cd4",
+ 2873 => x"00002cdc",
+ 2874 => x"00002cdc",
+ 2875 => x"00002ce4",
+ 2876 => x"00002ce4",
+ 2877 => x"00002cec",
+ 2878 => x"00002cec",
+ 2879 => x"00002cf4",
+ 2880 => x"00002cf4",
+ 2881 => x"00002cfc",
+ 2882 => x"00002cfc",
+ 2883 => x"00002d04",
+ 2884 => x"00002d04",
+ 2885 => x"00002d0c",
+ 2886 => x"00002d0c",
+ 2887 => x"00002d14",
+ 2888 => x"00002d14",
+ 2889 => x"00002d1c",
+ 2890 => x"00002d1c",
+ 2891 => x"00002d24",
+ 2892 => x"00002d24",
+ 2893 => x"00002d2c",
+ 2894 => x"00002d2c",
+ 2895 => x"00002d34",
+ 2896 => x"00002d34",
+ 2897 => x"00002d3c",
+ 2898 => x"00002d3c",
+ 2899 => x"00002d44",
+ 2900 => x"00002d44",
+ 2901 => x"00002d4c",
+ 2902 => x"00002d4c",
+ 2903 => x"00002d54",
+ 2904 => x"00002d54",
+ 2905 => x"00002d5c",
+ 2906 => x"00002d5c",
+ 2907 => x"00002d64",
+ 2908 => x"00002d64",
+ 2909 => x"00002d6c",
+ 2910 => x"00002d6c",
+ 2911 => x"00002d74",
+ 2912 => x"00002d74",
+ 2913 => x"00002d7c",
+ 2914 => x"00002d7c",
+ 2915 => x"00002d84",
+ 2916 => x"00002d84",
+ 2917 => x"00002d8c",
+ 2918 => x"00002d8c",
+ 2919 => x"00002d94",
+ 2920 => x"00002d94",
+ 2921 => x"00002d9c",
+ 2922 => x"00002d9c",
+ 2923 => x"00002da4",
+ 2924 => x"00002da4",
+ 2925 => x"00002dac",
+ 2926 => x"00002dac",
+ 2927 => x"00002db4",
+ 2928 => x"00002db4",
+ 2929 => x"00002dbc",
+ 2930 => x"00002dbc",
+ 2931 => x"00002dc4",
+ 2932 => x"00002dc4",
+ 2933 => x"00002dcc",
+ 2934 => x"00002dcc",
+ 2935 => x"00002dd4",
+ 2936 => x"00002dd4",
+ 2937 => x"00002ddc",
+ 2938 => x"00002ddc",
+ 2939 => x"00002de4",
+ 2940 => x"00002de4",
+ 2941 => x"00002dec",
+ 2942 => x"00002dec",
+ 2943 => x"00002df4",
+ 2944 => x"00002df4",
+ 2945 => x"00002dfc",
+ 2946 => x"00002dfc",
+ 2947 => x"00002e04",
+ 2948 => x"00002e04",
+ 2949 => x"00002e0c",
+ 2950 => x"00002e0c",
+ 2951 => x"00002e14",
+ 2952 => x"00002e14",
+ 2953 => x"00002e1c",
+ 2954 => x"00002e1c",
+ 2955 => x"00002e24",
+ 2956 => x"00002e24",
+ 2957 => x"00002e2c",
+ 2958 => x"00002e2c",
+ 2959 => x"00002e34",
+ 2960 => x"00002e34",
+ 2961 => x"00002e3c",
+ 2962 => x"00002e3c",
+ 2963 => x"00002e44",
+ 2964 => x"00002e44",
+ 2965 => x"00002e4c",
+ 2966 => x"00002e4c",
+ 2967 => x"00002e54",
+ 2968 => x"00002e54",
+ 2969 => x"00002e5c",
+ 2970 => x"00002e5c",
+ 2971 => x"00002e64",
+ 2972 => x"00002e64",
+ 2973 => x"00002e6c",
+ 2974 => x"00002e6c",
+ 2975 => x"00002e74",
+ 2976 => x"00002e74",
+ 2977 => x"00002e7c",
+ 2978 => x"00002e7c",
+ 2979 => x"00002e84",
+ 2980 => x"00002e84",
+ 2981 => x"00002e8c",
+ 2982 => x"00002e8c",
+ 2983 => x"00002e94",
+ 2984 => x"00002e94",
+ 2985 => x"00002e9c",
+ 2986 => x"00002e9c",
+ 2987 => x"00002ea4",
+ 2988 => x"00002ea4",
+ 2989 => x"00002eac",
+ 2990 => x"00002eac",
+ 2991 => x"00002eb4",
+ 2992 => x"00002eb4",
+ 2993 => x"00002ebc",
+ 2994 => x"00002ebc",
+ 2995 => x"00002ec4",
+ 2996 => x"00002ec4",
+ 2997 => x"00002ecc",
+ 2998 => x"00002ecc",
+ 2999 => x"00002ed4",
+ 3000 => x"00002ed4",
+ 3001 => x"00002edc",
+ 3002 => x"00002edc",
+ 3003 => x"00002ee4",
+ 3004 => x"00002ee4",
+ 3005 => x"00002eec",
+ 3006 => x"00002eec",
+ 3007 => x"00002ef4",
+ 3008 => x"00002ef4",
+ 3009 => x"00002efc",
+ 3010 => x"00002efc",
+ 3011 => x"00002f04",
+ 3012 => x"00002f04",
+ 3013 => x"00002f0c",
+ 3014 => x"00002f0c",
+ 3015 => x"00002f14",
+ 3016 => x"00002f14",
+ 3017 => x"00002f1c",
+ 3018 => x"00002f1c",
+ 3019 => x"00002f24",
+ 3020 => x"00002f24",
+ 3021 => x"00002f2c",
+ 3022 => x"00002f2c",
+ 3023 => x"00002f34",
+ 3024 => x"00002f34",
+ 3025 => x"00002f3c",
+ 3026 => x"00002f3c",
+ 3027 => x"00002f50",
+ 3028 => x"00000000",
+ 3029 => x"000031b8",
+ 3030 => x"00003214",
+ 3031 => x"00003270",
+ 3032 => x"00000000",
+ 3033 => x"00000000",
+ 3034 => x"00000000",
+ 3035 => x"00000000",
+ 3036 => x"00000000",
+ 3037 => x"00000000",
+ 3038 => x"00000000",
+ 3039 => x"00000000",
+ 3040 => x"00000000",
+ 3041 => x"00002ad0",
+ 3042 => x"00000000",
+ 3043 => x"00000000",
+ 3044 => x"00000000",
+ 3045 => x"00000000",
+ 3046 => x"00000000",
+ 3047 => x"00000000",
+ 3048 => x"00000000",
+ 3049 => x"00000000",
+ 3050 => x"00000000",
+ 3051 => x"00000000",
+ 3052 => x"00000000",
+ 3053 => x"00000000",
+ 3054 => x"00000000",
+ 3055 => x"00000000",
+ 3056 => x"00000000",
+ 3057 => x"00000000",
+ 3058 => x"00000000",
+ 3059 => x"00000000",
+ 3060 => x"00000000",
+ 3061 => x"00000000",
+ 3062 => x"00000000",
+ 3063 => x"00000000",
+ 3064 => x"00000000",
+ 3065 => x"00000000",
+ 3066 => x"00000000",
+ 3067 => x"00000000",
+ 3068 => x"00000000",
+ 3069 => x"00000000",
+ 3070 => x"00000001",
+ 3071 => x"330eabcd",
+ 3072 => x"1234e66d",
+ 3073 => x"deec0005",
+ 3074 => x"000b0000",
+ 3075 => x"00000000",
+ 3076 => x"00000000",
+ 3077 => x"00000000",
+ 3078 => x"00000000",
+ 3079 => x"00000000",
+ 3080 => x"00000000",
+ 3081 => x"00000000",
+ 3082 => x"00000000",
+ 3083 => x"00000000",
+ 3084 => x"00000000",
+ 3085 => x"00000000",
+ 3086 => x"00000000",
+ 3087 => x"00000000",
+ 3088 => x"00000000",
+ 3089 => x"00000000",
+ 3090 => x"00000000",
+ 3091 => x"00000000",
+ 3092 => x"00000000",
+ 3093 => x"00000000",
+ 3094 => x"00000000",
+ 3095 => x"00000000",
+ 3096 => x"00000000",
+ 3097 => x"00000000",
+ 3098 => x"00000000",
+ 3099 => x"00000000",
+ 3100 => x"00000000",
+ 3101 => x"00000000",
+ 3102 => x"00000000",
+ 3103 => x"00000000",
+ 3104 => x"00000000",
+ 3105 => x"00000000",
+ 3106 => x"00000000",
+ 3107 => x"00000000",
+ 3108 => x"00000000",
+ 3109 => x"00000000",
+ 3110 => x"00000000",
+ 3111 => x"00000000",
+ 3112 => x"00000000",
+ 3113 => x"00000000",
+ 3114 => x"00000000",
+ 3115 => x"00000000",
+ 3116 => x"00000000",
+ 3117 => x"00000000",
+ 3118 => x"00000000",
+ 3119 => x"00000000",
+ 3120 => x"00000000",
+ 3121 => x"00000000",
+ 3122 => x"00000000",
+ 3123 => x"00000000",
+ 3124 => x"00000000",
+ 3125 => x"00000000",
+ 3126 => x"00000000",
+ 3127 => x"00000000",
+ 3128 => x"00000000",
+ 3129 => x"00000000",
+ 3130 => x"00000000",
+ 3131 => x"00000000",
+ 3132 => x"00000000",
+ 3133 => x"00000000",
+ 3134 => x"00000000",
+ 3135 => x"00000000",
+ 3136 => x"00000000",
+ 3137 => x"00000000",
+ 3138 => x"00000000",
+ 3139 => x"00000000",
+ 3140 => x"00000000",
+ 3141 => x"00000000",
+ 3142 => x"00000000",
+ 3143 => x"00000000",
+ 3144 => x"00000000",
+ 3145 => x"00000000",
+ 3146 => x"00000000",
+ 3147 => x"00000000",
+ 3148 => x"00000000",
+ 3149 => x"00000000",
+ 3150 => x"00000000",
+ 3151 => x"00000000",
+ 3152 => x"00000000",
+ 3153 => x"00000000",
+ 3154 => x"00000000",
+ 3155 => x"00000000",
+ 3156 => x"00000000",
+ 3157 => x"00000000",
+ 3158 => x"00000000",
+ 3159 => x"00000000",
+ 3160 => x"00000000",
+ 3161 => x"00000000",
+ 3162 => x"00000000",
+ 3163 => x"00000000",
+ 3164 => x"00000000",
+ 3165 => x"00000000",
+ 3166 => x"00000000",
+ 3167 => x"00000000",
+ 3168 => x"00000000",
+ 3169 => x"00000000",
+ 3170 => x"00000000",
+ 3171 => x"00000000",
+ 3172 => x"00000000",
+ 3173 => x"00000000",
+ 3174 => x"00000000",
+ 3175 => x"00000000",
+ 3176 => x"00000000",
+ 3177 => x"00000000",
+ 3178 => x"00000000",
+ 3179 => x"00000000",
+ 3180 => x"00000000",
+ 3181 => x"00000000",
+ 3182 => x"00000000",
+ 3183 => x"00000000",
+ 3184 => x"00000000",
+ 3185 => x"00000000",
+ 3186 => x"00000000",
+ 3187 => x"00000000",
+ 3188 => x"00000000",
+ 3189 => x"00000000",
+ 3190 => x"00000000",
+ 3191 => x"00000000",
+ 3192 => x"00000000",
+ 3193 => x"00000000",
+ 3194 => x"00000000",
+ 3195 => x"00000000",
+ 3196 => x"00000000",
+ 3197 => x"00000000",
+ 3198 => x"00000000",
+ 3199 => x"00000000",
+ 3200 => x"00000000",
+ 3201 => x"00000000",
+ 3202 => x"00000000",
+ 3203 => x"00000000",
+ 3204 => x"00000000",
+ 3205 => x"00000000",
+ 3206 => x"00000000",
+ 3207 => x"00000000",
+ 3208 => x"00000000",
+ 3209 => x"00000000",
+ 3210 => x"00000000",
+ 3211 => x"00000000",
+ 3212 => x"00000000",
+ 3213 => x"00000000",
+ 3214 => x"00000000",
+ 3215 => x"00000000",
+ 3216 => x"00000000",
+ 3217 => x"00000000",
+ 3218 => x"00000000",
+ 3219 => x"00000000",
+ 3220 => x"00000000",
+ 3221 => x"00000000",
+ 3222 => x"00000000",
+ 3223 => x"00000000",
+ 3224 => x"00000000",
+ 3225 => x"00000000",
+ 3226 => x"00000000",
+ 3227 => x"00000000",
+ 3228 => x"00000000",
+ 3229 => x"00000000",
+ 3230 => x"00000000",
+ 3231 => x"00000000",
+ 3232 => x"00000000",
+ 3233 => x"00000000",
+ 3234 => x"00000000",
+ 3235 => x"00000000",
+ 3236 => x"00000000",
+ 3237 => x"00000000",
+ 3238 => x"00000000",
+ 3239 => x"00000000",
+ 3240 => x"00000000",
+ 3241 => x"00000000",
+ 3242 => x"00000000",
+ 3243 => x"00000000",
+ 3244 => x"00000000",
+ 3245 => x"00000000",
+ 3246 => x"00000000",
+ 3247 => x"00000000",
+ 3248 => x"00000000",
+ 3249 => x"00000000",
+ 3250 => x"00000000",
+ 3251 => x"00002ad4",
+ 3252 => x"ffffffff",
+ 3253 => x"00000000",
+ 3254 => x"ffffffff",
+ 3255 => x"00000000",
+ 3256 => x"00000000",
+ others => x"00000000"
+);
+
+begin
+
+process (clk)
+begin
+ if (clk'event and clk = '1') then
+ if (memAWriteEnable = '1') and (memBWriteEnable = '1') and (memAAddr=memBAddr) and (memAWrite/=memBWrite) then
+ report "write collision" severity failure;
+ end if;
+
+ if (memAWriteEnable = '1') then
+ ram(to_integer(unsigned(memAAddr))) := memAWrite;
+ memARead <= memAWrite;
+ else
+ memARead <= ram(to_integer(unsigned(memAAddr)));
+ end if;
+ end if;
+end process;
+
+process (clk)
+begin
+ if (clk'event and clk = '1') then
+ if (memBWriteEnable = '1') then
+ ram(to_integer(unsigned(memBAddr))) := memBWrite;
+ memBRead <= memBWrite;
+ else
+ memBRead <= ram(to_integer(unsigned(memBAddr)));
+ end if;
+ end if;
+end process;
+
+
+
+
+end dualport_ram_arch;
diff --git a/zpu/hdl/example/helloworld.vhd b/zpu/hdl/example/helloworld.vhd
index a11bbb7..cc8d8c6 100644
--- a/zpu/hdl/example/helloworld.vhd
+++ b/zpu/hdl/example/helloworld.vhd
@@ -1,3154 +1,3154 @@
--- ZPU
---
--- Copyright 2004-2008 oharboe - Øyvind Harboe - oyvind.harboe@zylin.com
---
--- The FreeBSD license
---
--- Redistribution and use in source and binary forms, with or without
--- modification, are permitted provided that the following conditions
--- are met:
---
--- 1. Redistributions of source code must retain the above copyright
--- notice, this list of conditions and the following disclaimer.
--- 2. Redistributions in binary form must reproduce the above
--- copyright notice, this list of conditions and the following
--- disclaimer in the documentation and/or other materials
--- provided with the distribution.
---
--- THIS SOFTWARE IS PROVIDED BY THE ZPU PROJECT ``AS IS'' AND ANY
--- EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
--- THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
--- PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
--- ZPU PROJECT OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
--- INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
--- (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
--- OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
--- HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
--- STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
--- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
--- ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
---
--- The views and conclusions contained in the software and documentation
--- are those of the authors and should not be interpreted as representing
--- official policies, either expressed or implied, of the ZPU Project.
-
-library ieee;
-use ieee.std_logic_1164.all;
-use ieee.numeric_std.all;
-
-
-library work;
-use work.zpu_config.all;
-use work.zpupkg.all;
-
-entity dualport_ram is
-port (clk : in std_logic;
- memAWriteEnable : in std_logic;
- memAAddr : in std_logic_vector(maxAddrBitBRAM downto minAddrBit);
- memAWrite : in std_logic_vector(wordSize-1 downto 0);
- memARead : out std_logic_vector(wordSize-1 downto 0);
- memBWriteEnable : in std_logic;
- memBAddr : in std_logic_vector(maxAddrBitBRAM downto minAddrBit);
- memBWrite : in std_logic_vector(wordSize-1 downto 0);
- memBRead : out std_logic_vector(wordSize-1 downto 0));
-end dualport_ram;
-
-architecture dualport_ram_arch of dualport_ram is
-
-
-type ram_type is array(natural range 0 to ((2**(maxAddrBitBRAM+1))/4)-1) of std_logic_vector(wordSize-1 downto 0);
-
-shared variable ram : ram_type :=
-(
-0 => x"0b0b0b0b",
-1 => x"82700b0b",
-2 => x"80cfd80c",
-3 => x"3a0b0b80",
-4 => x"c6d00400",
-5 => x"00000000",
-6 => x"00000000",
-7 => x"00000000",
-8 => x"80088408",
-9 => x"88080b0b",
-10 => x"80c7972d",
-11 => x"880c840c",
-12 => x"800c0400",
-13 => x"00000000",
-14 => x"00000000",
-15 => x"00000000",
-16 => x"71fd0608",
-17 => x"72830609",
-18 => x"81058205",
-19 => x"832b2a83",
-20 => x"ffff0652",
-21 => x"04000000",
-22 => x"00000000",
-23 => x"00000000",
-24 => x"71fd0608",
-25 => x"83ffff73",
-26 => x"83060981",
-27 => x"05820583",
-28 => x"2b2b0906",
-29 => x"7383ffff",
-30 => x"0b0b0b0b",
-31 => x"83a70400",
-32 => x"72098105",
-33 => x"72057373",
-34 => x"09060906",
-35 => x"73097306",
-36 => x"070a8106",
-37 => x"53510400",
-38 => x"00000000",
-39 => x"00000000",
-40 => x"72722473",
-41 => x"732e0753",
-42 => x"51040000",
-43 => x"00000000",
-44 => x"00000000",
-45 => x"00000000",
-46 => x"00000000",
-47 => x"00000000",
-48 => x"71737109",
-49 => x"71068106",
-50 => x"30720a10",
-51 => x"0a720a10",
-52 => x"0a31050a",
-53 => x"81065151",
-54 => x"53510400",
-55 => x"00000000",
-56 => x"72722673",
-57 => x"732e0753",
-58 => x"51040000",
-59 => x"00000000",
-60 => x"00000000",
-61 => x"00000000",
-62 => x"00000000",
-63 => x"00000000",
-64 => x"00000000",
-65 => x"00000000",
-66 => x"00000000",
-67 => x"00000000",
-68 => x"00000000",
-69 => x"00000000",
-70 => x"00000000",
-71 => x"00000000",
-72 => x"0b0b0b88",
-73 => x"c4040000",
-74 => x"00000000",
-75 => x"00000000",
-76 => x"00000000",
-77 => x"00000000",
-78 => x"00000000",
-79 => x"00000000",
-80 => x"720a722b",
-81 => x"0a535104",
-82 => x"00000000",
-83 => x"00000000",
-84 => x"00000000",
-85 => x"00000000",
-86 => x"00000000",
-87 => x"00000000",
-88 => x"72729f06",
-89 => x"0981050b",
-90 => x"0b0b88a7",
-91 => x"05040000",
-92 => x"00000000",
-93 => x"00000000",
-94 => x"00000000",
-95 => x"00000000",
-96 => x"72722aff",
-97 => x"739f062a",
-98 => x"0974090a",
-99 => x"8106ff05",
-100 => x"06075351",
-101 => x"04000000",
-102 => x"00000000",
-103 => x"00000000",
-104 => x"71715351",
-105 => x"020d0406",
-106 => x"73830609",
-107 => x"81058205",
-108 => x"832b0b2b",
-109 => x"0772fc06",
-110 => x"0c515104",
-111 => x"00000000",
-112 => x"72098105",
-113 => x"72050970",
-114 => x"81050906",
-115 => x"0a810653",
-116 => x"51040000",
-117 => x"00000000",
-118 => x"00000000",
-119 => x"00000000",
-120 => x"72098105",
-121 => x"72050970",
-122 => x"81050906",
-123 => x"0a098106",
-124 => x"53510400",
-125 => x"00000000",
-126 => x"00000000",
-127 => x"00000000",
-128 => x"71098105",
-129 => x"52040000",
-130 => x"00000000",
-131 => x"00000000",
-132 => x"00000000",
-133 => x"00000000",
-134 => x"00000000",
-135 => x"00000000",
-136 => x"72720981",
-137 => x"05055351",
-138 => x"04000000",
-139 => x"00000000",
-140 => x"00000000",
-141 => x"00000000",
-142 => x"00000000",
-143 => x"00000000",
-144 => x"72097206",
-145 => x"73730906",
-146 => x"07535104",
-147 => x"00000000",
-148 => x"00000000",
-149 => x"00000000",
-150 => x"00000000",
-151 => x"00000000",
-152 => x"71fc0608",
-153 => x"72830609",
-154 => x"81058305",
-155 => x"1010102a",
-156 => x"81ff0652",
-157 => x"04000000",
-158 => x"00000000",
-159 => x"00000000",
-160 => x"71fc0608",
-161 => x"0b0b80cf",
-162 => x"c4738306",
-163 => x"10100508",
-164 => x"060b0b0b",
-165 => x"88aa0400",
-166 => x"00000000",
-167 => x"00000000",
-168 => x"80088408",
-169 => x"88087575",
-170 => x"0b0b0b8b",
-171 => x"9f2d5050",
-172 => x"80085688",
-173 => x"0c840c80",
-174 => x"0c510400",
-175 => x"00000000",
-176 => x"80088408",
-177 => x"88087575",
-178 => x"0b0b0b8b",
-179 => x"e32d5050",
-180 => x"80085688",
-181 => x"0c840c80",
-182 => x"0c510400",
-183 => x"00000000",
-184 => x"72097081",
-185 => x"0509060a",
-186 => x"8106ff05",
-187 => x"70547106",
-188 => x"73097274",
-189 => x"05ff0506",
-190 => x"07515151",
-191 => x"04000000",
-192 => x"72097081",
-193 => x"0509060a",
-194 => x"098106ff",
-195 => x"05705471",
-196 => x"06730972",
-197 => x"7405ff05",
-198 => x"06075151",
-199 => x"51040000",
-200 => x"05ff0504",
-201 => x"00000000",
-202 => x"00000000",
-203 => x"00000000",
-204 => x"00000000",
-205 => x"00000000",
-206 => x"00000000",
-207 => x"00000000",
-208 => x"810b0b0b",
-209 => x"80cfd40c",
-210 => x"51040000",
-211 => x"00000000",
-212 => x"00000000",
-213 => x"00000000",
-214 => x"00000000",
-215 => x"00000000",
-216 => x"71810552",
-217 => x"04000000",
-218 => x"00000000",
-219 => x"00000000",
-220 => x"00000000",
-221 => x"00000000",
-222 => x"00000000",
-223 => x"00000000",
-224 => x"00000000",
-225 => x"00000000",
-226 => x"00000000",
-227 => x"00000000",
-228 => x"00000000",
-229 => x"00000000",
-230 => x"00000000",
-231 => x"00000000",
-232 => x"02840572",
-233 => x"10100552",
-234 => x"04000000",
-235 => x"00000000",
-236 => x"00000000",
-237 => x"00000000",
-238 => x"00000000",
-239 => x"00000000",
-240 => x"00000000",
-241 => x"00000000",
-242 => x"00000000",
-243 => x"00000000",
-244 => x"00000000",
-245 => x"00000000",
-246 => x"00000000",
-247 => x"00000000",
-248 => x"717105ff",
-249 => x"05715351",
-250 => x"020d0400",
-251 => x"00000000",
-252 => x"00000000",
-253 => x"00000000",
-254 => x"00000000",
-255 => x"00000000",
-256 => x"82c53f80",
-257 => x"c6d93f04",
-258 => x"10101010",
-259 => x"10101010",
-260 => x"10101010",
-261 => x"10101010",
-262 => x"10101010",
-263 => x"10101010",
-264 => x"10101010",
-265 => x"10101053",
-266 => x"51047381",
-267 => x"ff067383",
-268 => x"06098105",
-269 => x"83051010",
-270 => x"102b0772",
-271 => x"fc060c51",
-272 => x"51043c04",
-273 => x"72728072",
-274 => x"8106ff05",
-275 => x"09720605",
-276 => x"71105272",
-277 => x"0a100a53",
-278 => x"72ed3851",
-279 => x"51535104",
-280 => x"fe3d0d0b",
-281 => x"0b80dfc0",
-282 => x"08538413",
-283 => x"0870882a",
-284 => x"70810651",
-285 => x"52527080",
-286 => x"2ef03871",
-287 => x"81ff0680",
-288 => x"0c843d0d",
-289 => x"04ff3d0d",
-290 => x"0b0b80df",
-291 => x"c0085271",
-292 => x"0870882a",
-293 => x"81327081",
-294 => x"06515151",
-295 => x"70f13873",
-296 => x"720c833d",
-297 => x"0d0480cf",
-298 => x"d408802e",
-299 => x"a43880cf",
-300 => x"d808822e",
-301 => x"bd388380",
-302 => x"800b0b0b",
-303 => x"80dfc00c",
-304 => x"82a0800b",
-305 => x"80dfc40c",
-306 => x"8290800b",
-307 => x"80dfc80c",
-308 => x"04f88080",
-309 => x"80a40b0b",
-310 => x"0b80dfc0",
-311 => x"0cf88080",
-312 => x"82800b80",
-313 => x"dfc40cf8",
-314 => x"80808480",
-315 => x"0b80dfc8",
-316 => x"0c0480c0",
-317 => x"a8808c0b",
-318 => x"0b0b80df",
-319 => x"c00c80c0",
-320 => x"a880940b",
-321 => x"80dfc40c",
-322 => x"0b0b80cf",
-323 => x"8c0b80df",
-324 => x"c80c0470",
-325 => x"7080dfcc",
-326 => x"335170a7",
-327 => x"3880cfe0",
-328 => x"08700852",
-329 => x"5270802e",
-330 => x"94388412",
-331 => x"80cfe00c",
-332 => x"702d80cf",
-333 => x"e0087008",
-334 => x"525270ee",
-335 => x"38810b80",
-336 => x"dfcc3450",
-337 => x"50040470",
-338 => x"0b0b80df",
-339 => x"bc08802e",
-340 => x"8e380b0b",
-341 => x"0b0b800b",
-342 => x"802e0981",
-343 => x"06833850",
-344 => x"040b0b80",
-345 => x"dfbc510b",
-346 => x"0b0bf594",
-347 => x"3f500404",
-348 => x"fe3d0d89",
-349 => x"5380cf90",
-350 => x"5182c13f",
-351 => x"80cfa051",
-352 => x"82ba3f81",
-353 => x"0a0b80df",
-354 => x"d80cff0b",
-355 => x"80dfdc0c",
-356 => x"ff135372",
-357 => x"8025de38",
-358 => x"72800c84",
-359 => x"3d0d04fb",
-360 => x"3d0d7779",
-361 => x"55558056",
-362 => x"757524ab",
-363 => x"38807424",
-364 => x"9d388053",
-365 => x"73527451",
-366 => x"80e13f80",
-367 => x"08547580",
-368 => x"2e853880",
-369 => x"08305473",
-370 => x"800c873d",
-371 => x"0d047330",
-372 => x"76813257",
-373 => x"54dc3974",
-374 => x"30558156",
-375 => x"738025d2",
-376 => x"38ec39fa",
-377 => x"3d0d787a",
-378 => x"57558057",
-379 => x"767524a4",
-380 => x"38759f2c",
-381 => x"54815375",
-382 => x"74327431",
-383 => x"5274519b",
-384 => x"3f800854",
-385 => x"76802e85",
-386 => x"38800830",
-387 => x"5473800c",
-388 => x"883d0d04",
-389 => x"74305581",
-390 => x"57d739fc",
-391 => x"3d0d7678",
-392 => x"53548153",
-393 => x"80747326",
-394 => x"52557280",
-395 => x"2e983870",
-396 => x"802eab38",
-397 => x"807224a6",
-398 => x"38711073",
-399 => x"10757226",
-400 => x"53545272",
-401 => x"ea387351",
-402 => x"78833874",
-403 => x"5170800c",
-404 => x"863d0d04",
-405 => x"720a100a",
-406 => x"720a100a",
-407 => x"53537280",
-408 => x"2ee43871",
-409 => x"7426ed38",
-410 => x"73723175",
-411 => x"7407740a",
-412 => x"100a740a",
-413 => x"100a5555",
-414 => x"5654e339",
-415 => x"f73d0d7c",
-416 => x"70525380",
-417 => x"f93f7254",
-418 => x"80085580",
-419 => x"cfb05681",
-420 => x"57800881",
-421 => x"055a8b3d",
-422 => x"e4115953",
-423 => x"8259f413",
-424 => x"527b8811",
-425 => x"08525381",
-426 => x"b23f8008",
-427 => x"30708008",
-428 => x"079f2c8a",
-429 => x"07800c53",
-430 => x"8b3d0d04",
-431 => x"f63d0d7c",
-432 => x"80cfe408",
-433 => x"71535553",
-434 => x"b53f7255",
-435 => x"80085680",
-436 => x"cfb05781",
-437 => x"58800881",
-438 => x"055b8c3d",
-439 => x"e4115a53",
-440 => x"825af413",
-441 => x"52881408",
-442 => x"5180f03f",
-443 => x"80083070",
-444 => x"8008079f",
-445 => x"2c8a0780",
-446 => x"0c548c3d",
-447 => x"0d047070",
-448 => x"70707570",
-449 => x"71830653",
-450 => x"555270b4",
-451 => x"38717008",
-452 => x"7009f7fb",
-453 => x"fdff1206",
-454 => x"f8848281",
-455 => x"80065452",
-456 => x"53719b38",
-457 => x"84137008",
-458 => x"7009f7fb",
-459 => x"fdff1206",
-460 => x"f8848281",
-461 => x"80065452",
-462 => x"5371802e",
-463 => x"e7387252",
-464 => x"71335372",
-465 => x"802e8a38",
-466 => x"81127033",
-467 => x"545272f8",
-468 => x"38717431",
-469 => x"800c5050",
-470 => x"505004f2",
-471 => x"3d0d6062",
-472 => x"88110870",
-473 => x"58565f5a",
-474 => x"73802e81",
-475 => x"8c388c1a",
-476 => x"2270832a",
-477 => x"81328106",
-478 => x"56587486",
-479 => x"38901a08",
-480 => x"91387951",
-481 => x"90b73fff",
-482 => x"55800880",
-483 => x"ec388c1a",
-484 => x"22587d08",
-485 => x"55807883",
-486 => x"ffff0670",
-487 => x"0a100a81",
-488 => x"06415c57",
-489 => x"7e772e80",
-490 => x"d7387690",
-491 => x"38740884",
-492 => x"16088817",
-493 => x"57585676",
-494 => x"802ef238",
-495 => x"76548880",
-496 => x"77278438",
-497 => x"88805473",
-498 => x"5375529c",
-499 => x"1a0851a4",
-500 => x"1a085877",
-501 => x"2d800b80",
-502 => x"082582e0",
-503 => x"38800816",
-504 => x"77800831",
-505 => x"7f880508",
-506 => x"80083170",
-507 => x"6188050c",
-508 => x"5b585678",
-509 => x"ffb43880",
-510 => x"5574800c",
-511 => x"903d0d04",
-512 => x"7a813281",
-513 => x"06774056",
-514 => x"75802e81",
-515 => x"bd387690",
-516 => x"38740884",
-517 => x"16088817",
-518 => x"57585976",
-519 => x"802ef238",
-520 => x"881a0878",
-521 => x"83ffff06",
-522 => x"70892a81",
-523 => x"06565956",
-524 => x"73802e82",
-525 => x"f8387577",
-526 => x"278b3877",
-527 => x"872a8106",
-528 => x"5c7b82b5",
-529 => x"38767627",
-530 => x"83387656",
-531 => x"75537852",
-532 => x"79085185",
-533 => x"833f881a",
-534 => x"08763188",
-535 => x"1b0c7908",
-536 => x"167a0c76",
-537 => x"56751977",
-538 => x"77317f88",
-539 => x"05087831",
-540 => x"70618805",
-541 => x"0c415859",
-542 => x"7e802efe",
-543 => x"fa388c1a",
-544 => x"2258ff8a",
-545 => x"39787954",
-546 => x"7c537b52",
-547 => x"5684c93f",
-548 => x"881a0879",
-549 => x"31881b0c",
-550 => x"7908197a",
-551 => x"0c7c7631",
-552 => x"5d7c8e38",
-553 => x"79518ff2",
-554 => x"3f800881",
-555 => x"8f388008",
-556 => x"5f751c77",
-557 => x"77317f88",
-558 => x"05087831",
-559 => x"70618805",
-560 => x"0c5d585c",
-561 => x"7a802efe",
-562 => x"ae387681",
-563 => x"83387408",
-564 => x"84160888",
-565 => x"1757585c",
-566 => x"76802ef2",
-567 => x"3876538a",
-568 => x"527b5182",
-569 => x"d33f8008",
-570 => x"7c318105",
-571 => x"5d800884",
-572 => x"3881175d",
-573 => x"815f7c59",
-574 => x"767d2783",
-575 => x"38765994",
-576 => x"1a08881b",
-577 => x"08115758",
-578 => x"807a085c",
-579 => x"54901a08",
-580 => x"7b278338",
-581 => x"81547579",
-582 => x"25843873",
-583 => x"ba387779",
-584 => x"24fee238",
-585 => x"77537b52",
-586 => x"9c1a0851",
-587 => x"a41a0859",
-588 => x"782d8008",
-589 => x"56800880",
-590 => x"24fee238",
-591 => x"8c1a2280",
-592 => x"c0075e7d",
-593 => x"8c1b23ff",
-594 => x"5574800c",
-595 => x"903d0d04",
-596 => x"7effa338",
-597 => x"ff873975",
-598 => x"537b527a",
-599 => x"5182f93f",
-600 => x"7908167a",
-601 => x"0c79518e",
-602 => x"b13f8008",
-603 => x"cf387c76",
-604 => x"315d7cfe",
-605 => x"bc38feac",
-606 => x"39901a08",
-607 => x"7a087131",
-608 => x"78117056",
-609 => x"5a575280",
-610 => x"cfe40851",
-611 => x"84943f80",
-612 => x"08802eff",
-613 => x"a7388008",
-614 => x"901b0c80",
-615 => x"08167a0c",
-616 => x"77941b0c",
-617 => x"76881b0c",
-618 => x"7656fd99",
-619 => x"39790858",
-620 => x"901a0878",
-621 => x"27833881",
-622 => x"54757727",
-623 => x"843873b3",
-624 => x"38941a08",
-625 => x"54737726",
-626 => x"80d33873",
-627 => x"5378529c",
-628 => x"1a0851a4",
-629 => x"1a085877",
-630 => x"2d800856",
-631 => x"80088024",
-632 => x"fd83388c",
-633 => x"1a2280c0",
-634 => x"075e7d8c",
-635 => x"1b23ff55",
-636 => x"fed73975",
-637 => x"53785277",
-638 => x"5181dd3f",
-639 => x"7908167a",
-640 => x"0c79518d",
-641 => x"953f8008",
-642 => x"802efcd9",
-643 => x"388c1a22",
-644 => x"80c0075e",
-645 => x"7d8c1b23",
-646 => x"ff55fead",
-647 => x"39767754",
-648 => x"79537852",
-649 => x"5681b13f",
-650 => x"881a0877",
-651 => x"31881b0c",
-652 => x"7908177a",
-653 => x"0cfcae39",
-654 => x"fa3d0d7a",
-655 => x"79028805",
-656 => x"a7053355",
-657 => x"53548374",
-658 => x"2780df38",
-659 => x"71830651",
-660 => x"7080d738",
-661 => x"71715755",
-662 => x"83517582",
-663 => x"802913ff",
-664 => x"12525670",
-665 => x"8025f338",
-666 => x"837427bc",
-667 => x"38740876",
-668 => x"327009f7",
-669 => x"fbfdff12",
-670 => x"06f88482",
-671 => x"81800651",
-672 => x"5170802e",
-673 => x"98387451",
-674 => x"80527033",
-675 => x"5772772e",
-676 => x"b9388111",
-677 => x"81135351",
-678 => x"837227ee",
-679 => x"38fc1484",
-680 => x"16565473",
-681 => x"8326c638",
-682 => x"7452ff14",
-683 => x"5170ff2e",
-684 => x"97387133",
-685 => x"5472742e",
-686 => x"98388112",
-687 => x"ff125252",
-688 => x"70ff2e09",
-689 => x"8106eb38",
-690 => x"80517080",
-691 => x"0c883d0d",
-692 => x"0471800c",
-693 => x"883d0d04",
-694 => x"fa3d0d78",
-695 => x"7a7c7272",
-696 => x"72595755",
-697 => x"58565774",
-698 => x"7727b238",
-699 => x"75155176",
-700 => x"7127aa38",
-701 => x"707618ff",
-702 => x"18535353",
-703 => x"70ff2e96",
-704 => x"38ff12ff",
-705 => x"14545272",
-706 => x"337234ff",
-707 => x"115170ff",
-708 => x"2e098106",
-709 => x"ec387680",
-710 => x"0c883d0d",
-711 => x"048f7627",
-712 => x"80e63874",
-713 => x"77078306",
-714 => x"517080dc",
-715 => x"38767552",
-716 => x"53707084",
-717 => x"05520873",
-718 => x"70840555",
-719 => x"0c727170",
-720 => x"84055308",
-721 => x"71708405",
-722 => x"530c7170",
-723 => x"84055308",
-724 => x"71708405",
-725 => x"530c7170",
-726 => x"84055308",
-727 => x"71708405",
-728 => x"530cf015",
-729 => x"5553738f",
-730 => x"26c73883",
-731 => x"74279538",
-732 => x"70708405",
-733 => x"52087370",
-734 => x"8405550c",
-735 => x"fc145473",
-736 => x"8326ed38",
-737 => x"72715452",
-738 => x"ff145170",
-739 => x"ff2eff86",
-740 => x"38727081",
-741 => x"05543372",
-742 => x"70810554",
-743 => x"34ff1151",
-744 => x"ea39ef3d",
-745 => x"0d636567",
-746 => x"405d427b",
-747 => x"802e8582",
-748 => x"386151a9",
-749 => x"e73ff81c",
-750 => x"70841208",
-751 => x"70fc0670",
-752 => x"628b0570",
-753 => x"f8064159",
-754 => x"455c5f41",
-755 => x"57967427",
-756 => x"82c53880",
-757 => x"7b247e7c",
-758 => x"26075880",
-759 => x"5477742e",
-760 => x"09810682",
-761 => x"ab38787b",
-762 => x"2581fe38",
-763 => x"781780d7",
-764 => x"a00b8805",
-765 => x"085b5679",
-766 => x"762e84c5",
-767 => x"38841608",
-768 => x"70fe0617",
-769 => x"84110881",
-770 => x"06415555",
-771 => x"7e828d38",
-772 => x"74fc0658",
-773 => x"79762e84",
-774 => x"e3387818",
-775 => x"5f7e7b25",
-776 => x"81ff387c",
-777 => x"81065473",
-778 => x"82c13876",
-779 => x"77083184",
-780 => x"1108fc06",
-781 => x"56577580",
-782 => x"2e913879",
-783 => x"762e84f0",
-784 => x"38741819",
-785 => x"58777b25",
-786 => x"84913876",
-787 => x"802e829b",
-788 => x"38781556",
-789 => x"7a762482",
-790 => x"92388c17",
-791 => x"08881808",
-792 => x"718c120c",
-793 => x"88120c5e",
-794 => x"75598817",
-795 => x"61fc055b",
-796 => x"5679a426",
-797 => x"85ff387b",
-798 => x"76595593",
-799 => x"7a2780c9",
-800 => x"387b7084",
-801 => x"055d087c",
-802 => x"56760c74",
-803 => x"70840556",
-804 => x"088c180c",
-805 => x"9017589b",
-806 => x"7a27ae38",
-807 => x"74708405",
-808 => x"5608780c",
-809 => x"74708405",
-810 => x"56089418",
-811 => x"0c981758",
-812 => x"a37a2795",
-813 => x"38747084",
-814 => x"05560878",
-815 => x"0c747084",
-816 => x"0556089c",
-817 => x"180ca017",
-818 => x"58747084",
-819 => x"05560875",
-820 => x"5f787084",
-821 => x"055a0c77",
-822 => x"7e708405",
-823 => x"40087170",
-824 => x"8405530c",
-825 => x"7e08710c",
-826 => x"5d787b31",
-827 => x"56758f26",
-828 => x"80c93884",
-829 => x"17088106",
-830 => x"79078418",
-831 => x"0c781784",
-832 => x"11088107",
-833 => x"84120c5b",
-834 => x"6151a791",
-835 => x"3f881754",
-836 => x"73800c93",
-837 => x"3d0d0490",
-838 => x"5bfdb839",
-839 => x"7756fe83",
-840 => x"398c1608",
-841 => x"88170871",
-842 => x"8c120c88",
-843 => x"120c587e",
-844 => x"707c3157",
-845 => x"598f7627",
-846 => x"ffb9387a",
-847 => x"17841808",
-848 => x"81067c07",
-849 => x"84190c76",
-850 => x"81078412",
-851 => x"0c761184",
-852 => x"11088107",
-853 => x"84120c5b",
-854 => x"88055261",
-855 => x"518fda3f",
-856 => x"6151a6b9",
-857 => x"3f881754",
-858 => x"ffa6397d",
-859 => x"52615197",
-860 => x"d73f8008",
-861 => x"5a800880",
-862 => x"2e81ab38",
-863 => x"8008f805",
-864 => x"60840508",
-865 => x"fe066105",
-866 => x"58557477",
-867 => x"2e83f238",
-868 => x"fc195877",
-869 => x"a42681b0",
-870 => x"387b8008",
-871 => x"56579378",
-872 => x"2780dc38",
-873 => x"7b707084",
-874 => x"05520880",
-875 => x"08708405",
-876 => x"800c0c80",
-877 => x"08717084",
-878 => x"0553085d",
-879 => x"567b7670",
-880 => x"8405580c",
-881 => x"579b7827",
-882 => x"b6387670",
-883 => x"84055808",
-884 => x"75708405",
-885 => x"570c7670",
-886 => x"84055808",
-887 => x"75708405",
-888 => x"570ca378",
-889 => x"27993876",
-890 => x"70840558",
-891 => x"08757084",
-892 => x"05570c76",
-893 => x"70840558",
-894 => x"08757084",
-895 => x"05570c76",
-896 => x"70840558",
-897 => x"08775e75",
-898 => x"70840557",
-899 => x"0c747d70",
-900 => x"84055f08",
-901 => x"71708405",
-902 => x"530c7d08",
-903 => x"710c5f7b",
-904 => x"5261518e",
-905 => x"943f6151",
-906 => x"a4f33f79",
-907 => x"800c933d",
-908 => x"0d047d52",
-909 => x"61519690",
-910 => x"3f800880",
-911 => x"0c933d0d",
-912 => x"04841608",
-913 => x"55fbc939",
-914 => x"77537b52",
-915 => x"800851a2",
-916 => x"a53f7b52",
-917 => x"61518de1",
-918 => x"3fcc398c",
-919 => x"16088817",
-920 => x"08718c12",
-921 => x"0c88120c",
-922 => x"5d8c1708",
-923 => x"88180871",
-924 => x"8c120c88",
-925 => x"120c5977",
-926 => x"59fbef39",
-927 => x"7818901c",
-928 => x"40557e75",
-929 => x"24fb9c38",
-930 => x"7a177080",
-931 => x"d7a00b88",
-932 => x"050c757c",
-933 => x"31810784",
-934 => x"120c5684",
-935 => x"17088106",
-936 => x"7b078418",
-937 => x"0c6151a3",
-938 => x"f43f8817",
-939 => x"54fce139",
-940 => x"74181990",
-941 => x"1c5e5a7c",
-942 => x"7a24fb8f",
-943 => x"388c1708",
-944 => x"88180871",
-945 => x"8c120c88",
-946 => x"120c5e88",
-947 => x"1761fc05",
-948 => x"575975a4",
-949 => x"2681b638",
-950 => x"7b795955",
-951 => x"93762780",
-952 => x"c9387b70",
-953 => x"84055d08",
-954 => x"7c56790c",
-955 => x"74708405",
-956 => x"56088c18",
-957 => x"0c901758",
-958 => x"9b7627ae",
-959 => x"38747084",
-960 => x"05560878",
-961 => x"0c747084",
-962 => x"05560894",
-963 => x"180c9817",
-964 => x"58a37627",
-965 => x"95387470",
-966 => x"84055608",
-967 => x"780c7470",
-968 => x"84055608",
-969 => x"9c180ca0",
-970 => x"17587470",
-971 => x"84055608",
-972 => x"75417870",
-973 => x"84055a0c",
-974 => x"77607084",
-975 => x"05420871",
-976 => x"70840553",
-977 => x"0c600871",
-978 => x"0c5e7a17",
-979 => x"7080d7a0",
-980 => x"0b88050c",
-981 => x"7a7c3181",
-982 => x"0784120c",
-983 => x"58841708",
-984 => x"81067b07",
-985 => x"84180c61",
-986 => x"51a2b23f",
-987 => x"78547380",
-988 => x"0c933d0d",
-989 => x"0479537b",
-990 => x"5275519f",
-991 => x"f93ffae9",
-992 => x"39841508",
-993 => x"fc061960",
-994 => x"5859fadd",
-995 => x"3975537b",
-996 => x"5278519f",
-997 => x"e13f7a17",
-998 => x"7080d7a0",
-999 => x"0b88050c",
-1000 => x"7a7c3181",
-1001 => x"0784120c",
-1002 => x"58841708",
-1003 => x"81067b07",
-1004 => x"84180c61",
-1005 => x"51a1e63f",
-1006 => x"7854ffb2",
-1007 => x"39fa3d0d",
-1008 => x"7880cfe4",
-1009 => x"085455b8",
-1010 => x"1308802e",
-1011 => x"81af388c",
-1012 => x"15227083",
-1013 => x"ffff0670",
-1014 => x"832a8132",
-1015 => x"81065555",
-1016 => x"5672802e",
-1017 => x"80da3873",
-1018 => x"842a8132",
-1019 => x"810657ff",
-1020 => x"537680f2",
-1021 => x"3873822a",
-1022 => x"81065473",
-1023 => x"802eb938",
-1024 => x"b0150854",
-1025 => x"73802e9c",
-1026 => x"3880c015",
-1027 => x"5373732e",
-1028 => x"8f387352",
-1029 => x"80cfe408",
-1030 => x"518a9e3f",
-1031 => x"8c152256",
-1032 => x"76b0160c",
-1033 => x"75db0657",
-1034 => x"768c1623",
-1035 => x"800b8416",
-1036 => x"0c901508",
-1037 => x"750c7656",
-1038 => x"75880754",
-1039 => x"738c1623",
-1040 => x"90150880",
-1041 => x"2ebf388c",
-1042 => x"15227081",
-1043 => x"06555373",
-1044 => x"9c38720a",
-1045 => x"100a8106",
-1046 => x"56758538",
-1047 => x"94150854",
-1048 => x"7388160c",
-1049 => x"80537280",
-1050 => x"0c883d0d",
-1051 => x"04800b88",
-1052 => x"160c9415",
-1053 => x"08309816",
-1054 => x"0c8053ea",
-1055 => x"39725182",
-1056 => x"a63ffecb",
-1057 => x"3974518f",
-1058 => x"bc3f8c15",
-1059 => x"22708106",
-1060 => x"55537380",
-1061 => x"2effbb38",
-1062 => x"d439f83d",
-1063 => x"0d7a5776",
-1064 => x"802e8197",
-1065 => x"3880cfe4",
-1066 => x"0854b814",
-1067 => x"08802e80",
-1068 => x"eb388c17",
-1069 => x"2270902b",
-1070 => x"70902c70",
-1071 => x"832a8132",
-1072 => x"81065b5b",
-1073 => x"57557780",
-1074 => x"cb389017",
-1075 => x"08567580",
-1076 => x"2e80c138",
-1077 => x"76087631",
-1078 => x"76780c79",
-1079 => x"83065555",
-1080 => x"73853894",
-1081 => x"17085877",
-1082 => x"88180c80",
-1083 => x"7525a538",
-1084 => x"74537552",
-1085 => x"9c170851",
-1086 => x"a4170854",
-1087 => x"732d800b",
-1088 => x"80082580",
-1089 => x"c9388008",
-1090 => x"16758008",
-1091 => x"31565674",
-1092 => x"8024dd38",
-1093 => x"800b800c",
-1094 => x"8a3d0d04",
-1095 => x"73518187",
-1096 => x"3f8c1722",
-1097 => x"70902b70",
-1098 => x"902c7083",
-1099 => x"2a813281",
-1100 => x"065b5b57",
-1101 => x"5577dd38",
-1102 => x"ff9039a1",
-1103 => x"9a5280cf",
-1104 => x"e408518c",
-1105 => x"d03f8008",
-1106 => x"800c8a3d",
-1107 => x"0d048c17",
-1108 => x"2280c007",
-1109 => x"58778c18",
-1110 => x"23ff0b80",
-1111 => x"0c8a3d0d",
-1112 => x"04fa3d0d",
-1113 => x"797080dc",
-1114 => x"298c1154",
-1115 => x"7a535657",
-1116 => x"8fd63f80",
-1117 => x"08800855",
-1118 => x"56800880",
-1119 => x"2ea23880",
-1120 => x"088c0554",
-1121 => x"800b8008",
-1122 => x"0c768008",
-1123 => x"84050c73",
-1124 => x"80088805",
-1125 => x"0c745380",
-1126 => x"5273519c",
-1127 => x"f53f7554",
-1128 => x"73800c88",
-1129 => x"3d0d0470",
-1130 => x"707074a8",
-1131 => x"e60bbc12",
-1132 => x"0c53810b",
-1133 => x"b8140c80",
-1134 => x"0b84dc14",
-1135 => x"0c830b84",
-1136 => x"e0140c84",
-1137 => x"e81384e4",
-1138 => x"140c8413",
-1139 => x"08518070",
-1140 => x"720c7084",
-1141 => x"130c7088",
-1142 => x"130c5284",
-1143 => x"0b8c1223",
-1144 => x"718e1223",
-1145 => x"7190120c",
-1146 => x"7194120c",
-1147 => x"7198120c",
-1148 => x"709c120c",
-1149 => x"80c1d50b",
-1150 => x"a0120c80",
-1151 => x"c2a10ba4",
-1152 => x"120c80c3",
-1153 => x"9d0ba812",
-1154 => x"0c80c3ee",
-1155 => x"0bac120c",
-1156 => x"88130872",
-1157 => x"710c7284",
-1158 => x"120c7288",
-1159 => x"120c5189",
-1160 => x"0b8c1223",
-1161 => x"810b8e12",
-1162 => x"23719012",
-1163 => x"0c719412",
-1164 => x"0c719812",
-1165 => x"0c709c12",
-1166 => x"0c80c1d5",
-1167 => x"0ba0120c",
-1168 => x"80c2a10b",
-1169 => x"a4120c80",
-1170 => x"c39d0ba8",
-1171 => x"120c80c3",
-1172 => x"ee0bac12",
-1173 => x"0c8c1308",
-1174 => x"72710c72",
-1175 => x"84120c72",
-1176 => x"88120c51",
-1177 => x"8a0b8c12",
-1178 => x"23820b8e",
-1179 => x"12237190",
-1180 => x"120c7194",
-1181 => x"120c7198",
-1182 => x"120c709c",
-1183 => x"120c80c1",
-1184 => x"d50ba012",
-1185 => x"0c80c2a1",
-1186 => x"0ba4120c",
-1187 => x"80c39d0b",
-1188 => x"a8120c80",
-1189 => x"c3ee0bac",
-1190 => x"120c5050",
-1191 => x"5004f83d",
-1192 => x"0d7a80cf",
-1193 => x"e408b811",
-1194 => x"08575758",
-1195 => x"7481ec38",
-1196 => x"a8e60bbc",
-1197 => x"170c810b",
-1198 => x"b8170c74",
-1199 => x"84dc170c",
-1200 => x"830b84e0",
-1201 => x"170c84e8",
-1202 => x"1684e417",
-1203 => x"0c841608",
-1204 => x"75710c75",
-1205 => x"84120c75",
-1206 => x"88120c59",
-1207 => x"840b8c1a",
-1208 => x"23748e1a",
-1209 => x"2374901a",
-1210 => x"0c74941a",
-1211 => x"0c74981a",
-1212 => x"0c789c1a",
-1213 => x"0c80c1d5",
-1214 => x"0ba01a0c",
-1215 => x"80c2a10b",
-1216 => x"a41a0c80",
-1217 => x"c39d0ba8",
-1218 => x"1a0c80c3",
-1219 => x"ee0bac1a",
-1220 => x"0c881608",
-1221 => x"75710c75",
-1222 => x"84120c75",
-1223 => x"88120c57",
-1224 => x"890b8c18",
-1225 => x"23810b8e",
-1226 => x"18237490",
-1227 => x"180c7494",
-1228 => x"180c7498",
-1229 => x"180c769c",
-1230 => x"180c80c1",
-1231 => x"d50ba018",
-1232 => x"0c80c2a1",
-1233 => x"0ba4180c",
-1234 => x"80c39d0b",
-1235 => x"a8180c80",
-1236 => x"c3ee0bac",
-1237 => x"180c8c16",
-1238 => x"0875710c",
-1239 => x"7584120c",
-1240 => x"7588120c",
-1241 => x"548a0b8c",
-1242 => x"1523820b",
-1243 => x"8e152374",
-1244 => x"90150c74",
-1245 => x"94150c74",
-1246 => x"98150c73",
-1247 => x"9c150c80",
-1248 => x"c1d50ba0",
-1249 => x"150c80c2",
-1250 => x"a10ba415",
-1251 => x"0c80c39d",
-1252 => x"0ba8150c",
-1253 => x"80c3ee0b",
-1254 => x"ac150c84",
-1255 => x"dc168811",
-1256 => x"08841208",
-1257 => x"ff055757",
-1258 => x"57807524",
-1259 => x"9f388c16",
-1260 => x"2270902b",
-1261 => x"70902c51",
-1262 => x"55597380",
-1263 => x"2e80ed38",
-1264 => x"80dc16ff",
-1265 => x"16565674",
-1266 => x"8025e338",
-1267 => x"76085574",
-1268 => x"802e8f38",
-1269 => x"74881108",
-1270 => x"841208ff",
-1271 => x"05575757",
-1272 => x"c83982fc",
-1273 => x"5277518a",
-1274 => x"df3f8008",
-1275 => x"80085556",
-1276 => x"8008802e",
-1277 => x"a3388008",
-1278 => x"8c057580",
-1279 => x"080c5484",
-1280 => x"0b800884",
-1281 => x"050c7380",
-1282 => x"0888050c",
-1283 => x"82f05374",
-1284 => x"52735197",
-1285 => x"fd3f7554",
-1286 => x"7374780c",
-1287 => x"5573ffb4",
-1288 => x"388c780c",
-1289 => x"800b800c",
-1290 => x"8a3d0d04",
-1291 => x"810b8c17",
-1292 => x"2373760c",
-1293 => x"7388170c",
-1294 => x"7384170c",
-1295 => x"7390170c",
-1296 => x"7394170c",
-1297 => x"7398170c",
-1298 => x"ff0b8e17",
-1299 => x"2373b017",
-1300 => x"0c73b417",
-1301 => x"0c7380c4",
-1302 => x"170c7380",
-1303 => x"c8170c75",
-1304 => x"800c8a3d",
-1305 => x"0d047070",
-1306 => x"a19a5273",
-1307 => x"5186a63f",
-1308 => x"50500470",
-1309 => x"70a19a52",
-1310 => x"80cfe408",
-1311 => x"5186963f",
-1312 => x"505004fb",
-1313 => x"3d0d7770",
-1314 => x"52569890",
-1315 => x"3f80d7a0",
-1316 => x"0b880508",
-1317 => x"841108fc",
-1318 => x"06707b31",
-1319 => x"9fef05e0",
-1320 => x"8006e080",
-1321 => x"05525555",
-1322 => x"a0807524",
-1323 => x"94388052",
-1324 => x"755197ea",
-1325 => x"3f80d7a8",
-1326 => x"08145372",
-1327 => x"80082e8f",
-1328 => x"38755197",
-1329 => x"d83f8053",
-1330 => x"72800c87",
-1331 => x"3d0d0474",
-1332 => x"30527551",
-1333 => x"97c83f80",
-1334 => x"08ff2ea8",
-1335 => x"3880d7a0",
-1336 => x"0b880508",
-1337 => x"74763181",
-1338 => x"0784120c",
-1339 => x"5380d6e4",
-1340 => x"08753180",
-1341 => x"d6e40c75",
-1342 => x"5197a23f",
-1343 => x"810b800c",
-1344 => x"873d0d04",
-1345 => x"80527551",
-1346 => x"97943f80",
-1347 => x"d7a00b88",
-1348 => x"05088008",
-1349 => x"71315454",
-1350 => x"8f7325ff",
-1351 => x"a4388008",
-1352 => x"80d79408",
-1353 => x"3180d6e4",
-1354 => x"0c728107",
-1355 => x"84150c75",
-1356 => x"5196ea3f",
-1357 => x"8053ff90",
-1358 => x"39f73d0d",
-1359 => x"7b7d545a",
-1360 => x"72802e82",
-1361 => x"83387951",
-1362 => x"96d23ff8",
-1363 => x"13841108",
-1364 => x"70fe0670",
-1365 => x"13841108",
-1366 => x"fc065c57",
-1367 => x"58545780",
-1368 => x"d7a80874",
-1369 => x"2e82de38",
-1370 => x"7784150c",
-1371 => x"80738106",
-1372 => x"56597479",
-1373 => x"2e81d538",
-1374 => x"77148411",
-1375 => x"08810656",
-1376 => x"5374a038",
-1377 => x"77165678",
-1378 => x"81e63888",
-1379 => x"14085574",
-1380 => x"80d7a82e",
-1381 => x"82f9388c",
-1382 => x"1408708c",
-1383 => x"170c7588",
-1384 => x"120c5875",
-1385 => x"81078418",
-1386 => x"0c751776",
-1387 => x"710c5478",
-1388 => x"81913883",
-1389 => x"ff762781",
-1390 => x"c8387589",
-1391 => x"2a76832a",
-1392 => x"54547380",
-1393 => x"2ebf3875",
-1394 => x"862ab805",
-1395 => x"53847427",
-1396 => x"b43880db",
-1397 => x"14539474",
-1398 => x"27ab3875",
-1399 => x"8c2a80ee",
-1400 => x"055380d4",
-1401 => x"74279e38",
-1402 => x"758f2a80",
-1403 => x"f7055382",
-1404 => x"d4742791",
-1405 => x"3875922a",
-1406 => x"80fc0553",
-1407 => x"8ad47427",
-1408 => x"843880fe",
-1409 => x"53721010",
-1410 => x"1080d7a0",
-1411 => x"05881108",
-1412 => x"55557375",
-1413 => x"2e82bf38",
-1414 => x"841408fc",
-1415 => x"06597579",
-1416 => x"278d3888",
-1417 => x"14085473",
-1418 => x"752e0981",
-1419 => x"06ea388c",
-1420 => x"1408708c",
-1421 => x"190c7488",
-1422 => x"190c7788",
-1423 => x"120c5576",
-1424 => x"8c150c79",
-1425 => x"5194d63f",
-1426 => x"8b3d0d04",
-1427 => x"76087771",
-1428 => x"31587605",
-1429 => x"88180856",
-1430 => x"567480d7",
-1431 => x"a82e80e0",
-1432 => x"388c1708",
-1433 => x"708c170c",
-1434 => x"7588120c",
-1435 => x"53fe8939",
-1436 => x"8814088c",
-1437 => x"1508708c",
-1438 => x"130c5988",
-1439 => x"190cfea3",
-1440 => x"3975832a",
-1441 => x"70545480",
-1442 => x"74248198",
-1443 => x"3872822c",
-1444 => x"81712b80",
-1445 => x"d7a40807",
-1446 => x"80d7a00b",
-1447 => x"84050c74",
-1448 => x"10101080",
-1449 => x"d7a00588",
-1450 => x"1108718c",
-1451 => x"1b0c7088",
-1452 => x"1b0c7988",
-1453 => x"130c565a",
-1454 => x"55768c15",
-1455 => x"0cff8439",
-1456 => x"8159fdb4",
-1457 => x"39771673",
-1458 => x"81065455",
-1459 => x"72983876",
-1460 => x"08777131",
-1461 => x"5875058c",
-1462 => x"18088819",
-1463 => x"08718c12",
-1464 => x"0c88120c",
-1465 => x"55557481",
-1466 => x"0784180c",
-1467 => x"7680d7a0",
-1468 => x"0b88050c",
-1469 => x"80d79c08",
-1470 => x"7526fec7",
-1471 => x"3880d798",
-1472 => x"08527951",
-1473 => x"fafd3f79",
-1474 => x"5193923f",
-1475 => x"feba3981",
-1476 => x"778c170c",
-1477 => x"7788170c",
-1478 => x"758c190c",
-1479 => x"7588190c",
-1480 => x"59fd8039",
-1481 => x"83147082",
-1482 => x"2c81712b",
-1483 => x"80d7a408",
-1484 => x"0780d7a0",
-1485 => x"0b84050c",
-1486 => x"75101010",
-1487 => x"80d7a005",
-1488 => x"88110871",
-1489 => x"8c1c0c70",
-1490 => x"881c0c7a",
-1491 => x"88130c57",
-1492 => x"5b5653fe",
-1493 => x"e4398073",
-1494 => x"24a33872",
-1495 => x"822c8171",
-1496 => x"2b80d7a4",
-1497 => x"080780d7",
-1498 => x"a00b8405",
-1499 => x"0c58748c",
-1500 => x"180c7388",
-1501 => x"180c7688",
-1502 => x"160cfdc3",
-1503 => x"39831370",
-1504 => x"822c8171",
-1505 => x"2b80d7a4",
-1506 => x"080780d7",
-1507 => x"a00b8405",
-1508 => x"0c5953da",
-1509 => x"39f93d0d",
-1510 => x"797b5853",
-1511 => x"800b80cf",
-1512 => x"e4085356",
-1513 => x"72722ebc",
-1514 => x"3884dc13",
-1515 => x"5574762e",
-1516 => x"b3388815",
-1517 => x"08841608",
-1518 => x"ff055454",
-1519 => x"80732499",
-1520 => x"388c1422",
-1521 => x"70902b53",
-1522 => x"587180d4",
-1523 => x"3880dc14",
-1524 => x"ff145454",
-1525 => x"728025e9",
-1526 => x"38740855",
-1527 => x"74d43880",
-1528 => x"cfe40852",
-1529 => x"84dc1255",
-1530 => x"74802ead",
-1531 => x"38881508",
-1532 => x"841608ff",
-1533 => x"05545480",
-1534 => x"73249838",
-1535 => x"8c142270",
-1536 => x"902b5358",
-1537 => x"71ad3880",
-1538 => x"dc14ff14",
-1539 => x"54547280",
-1540 => x"25ea3874",
-1541 => x"085574d5",
-1542 => x"3875800c",
-1543 => x"893d0d04",
-1544 => x"7351762d",
-1545 => x"75800807",
-1546 => x"80dc15ff",
-1547 => x"15555556",
-1548 => x"ffa23973",
-1549 => x"51762d75",
-1550 => x"80080780",
-1551 => x"dc15ff15",
-1552 => x"555556ca",
-1553 => x"39ea3d0d",
-1554 => x"688c1122",
-1555 => x"700a100a",
-1556 => x"81065758",
-1557 => x"567480e4",
-1558 => x"388e1622",
-1559 => x"70902b70",
-1560 => x"902c5155",
-1561 => x"58807424",
-1562 => x"b138983d",
-1563 => x"c4055373",
-1564 => x"5280cfe4",
-1565 => x"08519481",
-1566 => x"3f800b80",
-1567 => x"08249738",
-1568 => x"7983e080",
-1569 => x"06547380",
-1570 => x"c0802e81",
-1571 => x"8f387382",
-1572 => x"80802e81",
-1573 => x"91388c16",
-1574 => x"22577690",
-1575 => x"80075473",
-1576 => x"8c172388",
-1577 => x"805280cf",
-1578 => x"e4085181",
-1579 => x"9b3f8008",
-1580 => x"9d388c16",
-1581 => x"22820755",
-1582 => x"748c1723",
-1583 => x"80c31670",
-1584 => x"770c9017",
-1585 => x"0c810b94",
-1586 => x"170c983d",
-1587 => x"0d0480cf",
-1588 => x"e408a8e6",
-1589 => x"0bbc120c",
-1590 => x"588c1622",
-1591 => x"81800754",
-1592 => x"738c1723",
-1593 => x"8008760c",
-1594 => x"80089017",
-1595 => x"0c88800b",
-1596 => x"94170c74",
-1597 => x"802ed338",
-1598 => x"8e162270",
-1599 => x"902b7090",
-1600 => x"2c535654",
-1601 => x"9afe3f80",
-1602 => x"08802eff",
-1603 => x"bd388c16",
-1604 => x"22810757",
-1605 => x"768c1723",
-1606 => x"983d0d04",
-1607 => x"810b8c17",
-1608 => x"225855fe",
-1609 => x"f539a816",
-1610 => x"0880c39d",
-1611 => x"2e098106",
-1612 => x"fee4388c",
-1613 => x"16228880",
-1614 => x"0754738c",
-1615 => x"17238880",
-1616 => x"0b80cc17",
-1617 => x"0cfedc39",
-1618 => x"f43d0d7e",
-1619 => x"608b1170",
-1620 => x"f8065b55",
-1621 => x"555d7296",
-1622 => x"26833890",
-1623 => x"58807824",
-1624 => x"74792607",
-1625 => x"55805474",
-1626 => x"742e0981",
-1627 => x"0680ca38",
-1628 => x"7c518ea8",
-1629 => x"3f7783f7",
-1630 => x"2680c538",
-1631 => x"77832a70",
-1632 => x"10101080",
-1633 => x"d7a0058c",
-1634 => x"11085858",
-1635 => x"5475772e",
-1636 => x"81f03884",
-1637 => x"1608fc06",
-1638 => x"8c170888",
-1639 => x"1808718c",
-1640 => x"120c8812",
-1641 => x"0c5b7605",
-1642 => x"84110881",
-1643 => x"0784120c",
-1644 => x"537c518d",
-1645 => x"e83f8816",
-1646 => x"5473800c",
-1647 => x"8e3d0d04",
-1648 => x"77892a78",
-1649 => x"832a5854",
-1650 => x"73802ebf",
-1651 => x"3877862a",
-1652 => x"b8055784",
-1653 => x"7427b438",
-1654 => x"80db1457",
-1655 => x"947427ab",
-1656 => x"38778c2a",
-1657 => x"80ee0557",
-1658 => x"80d47427",
-1659 => x"9e38778f",
-1660 => x"2a80f705",
-1661 => x"5782d474",
-1662 => x"27913877",
-1663 => x"922a80fc",
-1664 => x"05578ad4",
-1665 => x"74278438",
-1666 => x"80fe5776",
-1667 => x"10101080",
-1668 => x"d7a0058c",
-1669 => x"11085653",
-1670 => x"74732ea3",
-1671 => x"38841508",
-1672 => x"fc067079",
-1673 => x"31555673",
-1674 => x"8f2488e4",
-1675 => x"38738025",
-1676 => x"88e6388c",
-1677 => x"15085574",
-1678 => x"732e0981",
-1679 => x"06df3881",
-1680 => x"175980d7",
-1681 => x"b0085675",
-1682 => x"80d7a82e",
-1683 => x"82cc3884",
-1684 => x"1608fc06",
-1685 => x"70793155",
-1686 => x"55738f24",
-1687 => x"bb3880d7",
-1688 => x"a80b80d7",
-1689 => x"b40c80d7",
-1690 => x"a80b80d7",
-1691 => x"b00c8074",
-1692 => x"2480db38",
-1693 => x"74168411",
-1694 => x"08810784",
-1695 => x"120c53fe",
-1696 => x"b0398816",
-1697 => x"8c110857",
-1698 => x"5975792e",
-1699 => x"098106fe",
-1700 => x"82388214",
-1701 => x"59ffab39",
-1702 => x"77167881",
-1703 => x"0784180c",
-1704 => x"7080d7b4",
-1705 => x"0c7080d7",
-1706 => x"b00c80d7",
-1707 => x"a80b8c12",
-1708 => x"0c8c1108",
-1709 => x"88120c74",
-1710 => x"81078412",
-1711 => x"0c740574",
-1712 => x"710c5b7c",
-1713 => x"518bd63f",
-1714 => x"881654fd",
-1715 => x"ec3983ff",
-1716 => x"75278391",
-1717 => x"3874892a",
-1718 => x"75832a54",
-1719 => x"5473802e",
-1720 => x"bf387486",
-1721 => x"2ab80553",
-1722 => x"847427b4",
-1723 => x"3880db14",
-1724 => x"53947427",
-1725 => x"ab38748c",
-1726 => x"2a80ee05",
-1727 => x"5380d474",
-1728 => x"279e3874",
-1729 => x"8f2a80f7",
-1730 => x"055382d4",
-1731 => x"74279138",
-1732 => x"74922a80",
-1733 => x"fc05538a",
-1734 => x"d4742784",
-1735 => x"3880fe53",
-1736 => x"72101010",
-1737 => x"80d7a005",
-1738 => x"88110855",
-1739 => x"5773772e",
-1740 => x"868b3884",
-1741 => x"1408fc06",
-1742 => x"5b747b27",
-1743 => x"8d388814",
-1744 => x"08547377",
-1745 => x"2e098106",
-1746 => x"ea388c14",
-1747 => x"0880d7a0",
-1748 => x"0b840508",
-1749 => x"718c190c",
-1750 => x"7588190c",
-1751 => x"7788130c",
-1752 => x"5c57758c",
-1753 => x"150c7853",
-1754 => x"80792483",
-1755 => x"98387282",
-1756 => x"2c81712b",
-1757 => x"5656747b",
-1758 => x"2680ca38",
-1759 => x"7a750657",
-1760 => x"7682a338",
-1761 => x"78fc0684",
-1762 => x"05597410",
-1763 => x"707c0655",
-1764 => x"55738292",
-1765 => x"38841959",
-1766 => x"f13980d7",
-1767 => x"a00b8405",
-1768 => x"0879545b",
-1769 => x"788025c6",
-1770 => x"3882da39",
-1771 => x"74097b06",
-1772 => x"7080d7a0",
-1773 => x"0b84050c",
-1774 => x"5b741055",
-1775 => x"747b2685",
-1776 => x"387485bc",
-1777 => x"3880d7a0",
-1778 => x"0b880508",
-1779 => x"70841208",
-1780 => x"fc06707b",
-1781 => x"317b7226",
-1782 => x"8f722507",
-1783 => x"5d575c5c",
-1784 => x"5578802e",
-1785 => x"80d93879",
-1786 => x"1580d798",
-1787 => x"08199011",
-1788 => x"59545680",
-1789 => x"d79408ff",
-1790 => x"2e8838a0",
-1791 => x"8f13e080",
-1792 => x"06577652",
-1793 => x"7c518996",
-1794 => x"3f800854",
-1795 => x"8008ff2e",
-1796 => x"90388008",
-1797 => x"762782a7",
-1798 => x"387480d7",
-1799 => x"a02e829f",
-1800 => x"3880d7a0",
-1801 => x"0b880508",
-1802 => x"55841508",
-1803 => x"fc067079",
-1804 => x"31797226",
-1805 => x"8f722507",
-1806 => x"5d555a7a",
-1807 => x"83f23877",
-1808 => x"81078416",
-1809 => x"0c771570",
-1810 => x"80d7a00b",
-1811 => x"88050c74",
-1812 => x"81078412",
-1813 => x"0c567c51",
-1814 => x"88c33f88",
-1815 => x"15547380",
-1816 => x"0c8e3d0d",
-1817 => x"0474832a",
-1818 => x"70545480",
-1819 => x"7424819b",
-1820 => x"3872822c",
-1821 => x"81712b80",
-1822 => x"d7a40807",
-1823 => x"7080d7a0",
-1824 => x"0b84050c",
-1825 => x"75101010",
-1826 => x"80d7a005",
-1827 => x"88110871",
-1828 => x"8c1b0c70",
-1829 => x"881b0c79",
-1830 => x"88130c57",
-1831 => x"555c5575",
-1832 => x"8c150cfd",
-1833 => x"c1397879",
-1834 => x"10101080",
-1835 => x"d7a00570",
-1836 => x"565b5c8c",
-1837 => x"14085675",
-1838 => x"742ea338",
-1839 => x"841608fc",
-1840 => x"06707931",
-1841 => x"5853768f",
-1842 => x"2483f138",
-1843 => x"76802584",
-1844 => x"af388c16",
-1845 => x"08567574",
-1846 => x"2e098106",
-1847 => x"df388814",
-1848 => x"811a7083",
-1849 => x"06555a54",
-1850 => x"72c9387b",
-1851 => x"83065675",
-1852 => x"802efdb8",
-1853 => x"38ff1cf8",
-1854 => x"1b5b5c88",
-1855 => x"1a087a2e",
-1856 => x"ea38fdb5",
-1857 => x"39831953",
-1858 => x"fce43983",
-1859 => x"1470822c",
-1860 => x"81712b80",
-1861 => x"d7a40807",
-1862 => x"7080d7a0",
-1863 => x"0b84050c",
-1864 => x"76101010",
-1865 => x"80d7a005",
-1866 => x"88110871",
-1867 => x"8c1c0c70",
-1868 => x"881c0c7a",
-1869 => x"88130c58",
-1870 => x"535d5653",
-1871 => x"fee13980",
-1872 => x"d6e40817",
-1873 => x"59800876",
-1874 => x"2e818b38",
-1875 => x"80d79408",
-1876 => x"ff2e848e",
-1877 => x"38737631",
-1878 => x"1980d6e4",
-1879 => x"0c738706",
-1880 => x"70565372",
-1881 => x"802e8838",
-1882 => x"88733170",
-1883 => x"15555576",
-1884 => x"149fff06",
-1885 => x"a0807131",
-1886 => x"1670547e",
-1887 => x"53515386",
-1888 => x"9d3f8008",
-1889 => x"568008ff",
-1890 => x"2e819e38",
-1891 => x"80d6e408",
-1892 => x"137080d6",
-1893 => x"e40c7475",
-1894 => x"80d7a00b",
-1895 => x"88050c77",
-1896 => x"76311581",
-1897 => x"07555659",
-1898 => x"7a80d7a0",
-1899 => x"2e83c038",
-1900 => x"798f2682",
-1901 => x"ef38810b",
-1902 => x"84150c84",
-1903 => x"1508fc06",
-1904 => x"70793179",
-1905 => x"72268f72",
-1906 => x"25075d55",
-1907 => x"5a7a802e",
-1908 => x"fced3880",
-1909 => x"db398008",
-1910 => x"9fff0655",
-1911 => x"74feed38",
-1912 => x"7880d6e4",
-1913 => x"0c80d7a0",
-1914 => x"0b880508",
-1915 => x"7a188107",
-1916 => x"84120c55",
-1917 => x"80d79008",
-1918 => x"79278638",
-1919 => x"7880d790",
-1920 => x"0c80d78c",
-1921 => x"087927fc",
-1922 => x"a0387880",
-1923 => x"d78c0c84",
-1924 => x"1508fc06",
-1925 => x"70793179",
-1926 => x"72268f72",
-1927 => x"25075d55",
-1928 => x"5a7a802e",
-1929 => x"fc993888",
-1930 => x"39807457",
-1931 => x"53fedd39",
-1932 => x"7c5184e9",
-1933 => x"3f800b80",
-1934 => x"0c8e3d0d",
-1935 => x"04807324",
-1936 => x"a5387282",
-1937 => x"2c81712b",
-1938 => x"80d7a408",
-1939 => x"077080d7",
-1940 => x"a00b8405",
-1941 => x"0c5c5a76",
-1942 => x"8c170c73",
-1943 => x"88170c75",
-1944 => x"88180cf9",
-1945 => x"fd398313",
-1946 => x"70822c81",
-1947 => x"712b80d7",
-1948 => x"a4080770",
-1949 => x"80d7a00b",
-1950 => x"84050c5d",
-1951 => x"5b53d839",
-1952 => x"7a75065c",
-1953 => x"7bfc9f38",
-1954 => x"84197510",
-1955 => x"5659f139",
-1956 => x"ff178105",
-1957 => x"59f7ab39",
-1958 => x"8c150888",
-1959 => x"1608718c",
-1960 => x"120c8812",
-1961 => x"0c597515",
-1962 => x"84110881",
-1963 => x"0784120c",
-1964 => x"587c5183",
-1965 => x"e83f8815",
-1966 => x"54fba339",
-1967 => x"77167881",
-1968 => x"0784180c",
-1969 => x"8c170888",
-1970 => x"1808718c",
-1971 => x"120c8812",
-1972 => x"0c5c7080",
-1973 => x"d7b40c70",
-1974 => x"80d7b00c",
-1975 => x"80d7a80b",
-1976 => x"8c120c8c",
-1977 => x"11088812",
-1978 => x"0c778107",
-1979 => x"84120c77",
-1980 => x"0577710c",
-1981 => x"557c5183",
-1982 => x"a43f8816",
-1983 => x"54f5ba39",
-1984 => x"72168411",
-1985 => x"08810784",
-1986 => x"120c588c",
-1987 => x"16088817",
-1988 => x"08718c12",
-1989 => x"0c88120c",
-1990 => x"577c5183",
-1991 => x"803f8816",
-1992 => x"54f59639",
-1993 => x"7284150c",
-1994 => x"f41af806",
-1995 => x"70841d08",
-1996 => x"81060784",
-1997 => x"1d0c701c",
-1998 => x"5556850b",
-1999 => x"84150c85",
-2000 => x"0b88150c",
-2001 => x"8f7627fd",
-2002 => x"ab38881b",
-2003 => x"527c51eb",
-2004 => x"e83f80d7",
-2005 => x"a00b8805",
-2006 => x"0880d6e4",
-2007 => x"085a55fd",
-2008 => x"93397880",
-2009 => x"d6e40c73",
-2010 => x"80d7940c",
-2011 => x"fbef3972",
-2012 => x"84150cfc",
-2013 => x"ff39fb3d",
-2014 => x"0d77707a",
-2015 => x"7c585553",
-2016 => x"568f7527",
-2017 => x"80e63872",
-2018 => x"76078306",
-2019 => x"517080dc",
-2020 => x"38757352",
-2021 => x"54707084",
-2022 => x"05520874",
-2023 => x"70840556",
-2024 => x"0c737170",
-2025 => x"84055308",
-2026 => x"71708405",
-2027 => x"530c7170",
-2028 => x"84055308",
-2029 => x"71708405",
-2030 => x"530c7170",
-2031 => x"84055308",
-2032 => x"71708405",
-2033 => x"530cf016",
-2034 => x"5654748f",
-2035 => x"26c73883",
-2036 => x"75279538",
-2037 => x"70708405",
-2038 => x"52087470",
-2039 => x"8405560c",
-2040 => x"fc155574",
-2041 => x"8326ed38",
-2042 => x"73715452",
-2043 => x"ff155170",
-2044 => x"ff2e9838",
-2045 => x"72708105",
-2046 => x"54337270",
-2047 => x"81055434",
-2048 => x"ff115170",
-2049 => x"ff2e0981",
-2050 => x"06ea3875",
-2051 => x"800c873d",
-2052 => x"0d04fb3d",
-2053 => x"0d777a71",
-2054 => x"028c05a3",
-2055 => x"05335854",
-2056 => x"54568373",
-2057 => x"2780d438",
-2058 => x"75830651",
-2059 => x"7080cc38",
-2060 => x"74882b75",
-2061 => x"07707190",
-2062 => x"2b075551",
-2063 => x"8f7327a7",
-2064 => x"38737270",
-2065 => x"8405540c",
-2066 => x"71747170",
-2067 => x"8405530c",
-2068 => x"74717084",
-2069 => x"05530c74",
-2070 => x"71708405",
-2071 => x"530cf014",
-2072 => x"5452728f",
-2073 => x"26db3883",
-2074 => x"73279038",
-2075 => x"73727084",
-2076 => x"05540cfc",
-2077 => x"13537283",
-2078 => x"26f238ff",
-2079 => x"135170ff",
-2080 => x"2e933874",
-2081 => x"72708105",
-2082 => x"5434ff11",
-2083 => x"5170ff2e",
-2084 => x"098106ef",
-2085 => x"3875800c",
-2086 => x"873d0d04",
-2087 => x"04047070",
-2088 => x"7070800b",
-2089 => x"80dfe00c",
-2090 => x"765184f3",
-2091 => x"3f800853",
-2092 => x"8008ff2e",
-2093 => x"89387280",
-2094 => x"0c505050",
-2095 => x"500480df",
-2096 => x"e0085473",
-2097 => x"802eef38",
-2098 => x"7574710c",
-2099 => x"5272800c",
-2100 => x"50505050",
-2101 => x"04f93d0d",
-2102 => x"797c557b",
-2103 => x"548e1122",
-2104 => x"70902b70",
-2105 => x"902c5557",
-2106 => x"80cfe408",
-2107 => x"53585683",
-2108 => x"f63f8008",
-2109 => x"57800b80",
-2110 => x"08249338",
-2111 => x"80d01608",
-2112 => x"80080580",
-2113 => x"d0170c76",
-2114 => x"800c893d",
-2115 => x"0d048c16",
-2116 => x"2283dfff",
-2117 => x"0655748c",
-2118 => x"17237680",
-2119 => x"0c893d0d",
-2120 => x"04fa3d0d",
-2121 => x"788c1122",
-2122 => x"70882a70",
-2123 => x"81065157",
-2124 => x"585674a9",
-2125 => x"388c1622",
-2126 => x"83dfff06",
-2127 => x"55748c17",
-2128 => x"237a5479",
-2129 => x"538e1622",
-2130 => x"70902b70",
-2131 => x"902c5456",
-2132 => x"80cfe408",
-2133 => x"525681b2",
-2134 => x"3f883d0d",
-2135 => x"04825480",
-2136 => x"538e1622",
-2137 => x"70902b70",
-2138 => x"902c5456",
-2139 => x"80cfe408",
-2140 => x"525782bb",
-2141 => x"3f8c1622",
-2142 => x"83dfff06",
-2143 => x"55748c17",
-2144 => x"237a5479",
-2145 => x"538e1622",
-2146 => x"70902b70",
-2147 => x"902c5456",
-2148 => x"80cfe408",
-2149 => x"525680f2",
-2150 => x"3f883d0d",
-2151 => x"04f93d0d",
-2152 => x"797c557b",
-2153 => x"548e1122",
-2154 => x"70902b70",
-2155 => x"902c5557",
-2156 => x"80cfe408",
-2157 => x"53585681",
-2158 => x"f63f8008",
-2159 => x"578008ff",
-2160 => x"2e99388c",
-2161 => x"1622a080",
-2162 => x"0755748c",
-2163 => x"17238008",
-2164 => x"80d0170c",
-2165 => x"76800c89",
-2166 => x"3d0d048c",
-2167 => x"162283df",
-2168 => x"ff065574",
-2169 => x"8c172376",
-2170 => x"800c893d",
-2171 => x"0d047070",
-2172 => x"70748e11",
-2173 => x"2270902b",
-2174 => x"70902c55",
-2175 => x"51515380",
-2176 => x"cfe40851",
-2177 => x"bd3f5050",
-2178 => x"5004fb3d",
-2179 => x"0d800b80",
-2180 => x"dfe00c7a",
-2181 => x"53795278",
-2182 => x"5182ff3f",
-2183 => x"80085580",
-2184 => x"08ff2e88",
-2185 => x"3874800c",
-2186 => x"873d0d04",
-2187 => x"80dfe008",
-2188 => x"5675802e",
-2189 => x"f0387776",
-2190 => x"710c5474",
-2191 => x"800c873d",
-2192 => x"0d047070",
-2193 => x"7070800b",
-2194 => x"80dfe00c",
-2195 => x"765184cc",
-2196 => x"3f800853",
-2197 => x"8008ff2e",
-2198 => x"89387280",
-2199 => x"0c505050",
-2200 => x"500480df",
-2201 => x"e0085473",
-2202 => x"802eef38",
-2203 => x"7574710c",
-2204 => x"5272800c",
-2205 => x"50505050",
-2206 => x"04fc3d0d",
-2207 => x"800b80df",
-2208 => x"e00c7852",
-2209 => x"775187b3",
-2210 => x"3f800854",
-2211 => x"8008ff2e",
-2212 => x"88387380",
-2213 => x"0c863d0d",
-2214 => x"0480dfe0",
-2215 => x"08557480",
-2216 => x"2ef03876",
-2217 => x"75710c53",
-2218 => x"73800c86",
-2219 => x"3d0d04fb",
-2220 => x"3d0d800b",
-2221 => x"80dfe00c",
-2222 => x"7a537952",
-2223 => x"7851848e",
-2224 => x"3f800855",
-2225 => x"8008ff2e",
-2226 => x"88387480",
-2227 => x"0c873d0d",
-2228 => x"0480dfe0",
-2229 => x"08567580",
-2230 => x"2ef03877",
-2231 => x"76710c54",
-2232 => x"74800c87",
-2233 => x"3d0d04fb",
-2234 => x"3d0d800b",
-2235 => x"80dfe00c",
-2236 => x"7a537952",
-2237 => x"78518296",
-2238 => x"3f800855",
-2239 => x"8008ff2e",
-2240 => x"88387480",
-2241 => x"0c873d0d",
-2242 => x"0480dfe0",
-2243 => x"08567580",
-2244 => x"2ef03877",
-2245 => x"76710c54",
-2246 => x"74800c87",
-2247 => x"3d0d0470",
-2248 => x"707080df",
-2249 => x"d0088938",
-2250 => x"80dfe40b",
-2251 => x"80dfd00c",
-2252 => x"80dfd008",
-2253 => x"75115252",
-2254 => x"ff537087",
-2255 => x"fb808026",
-2256 => x"88387080",
-2257 => x"dfd00c71",
-2258 => x"5372800c",
-2259 => x"50505004",
-2260 => x"fd3d0d80",
-2261 => x"0b80cfd8",
-2262 => x"08545472",
-2263 => x"812e9b38",
-2264 => x"7380dfd4",
-2265 => x"0cc2bf3f",
-2266 => x"c1963f80",
-2267 => x"dfa85281",
-2268 => x"51c3fd3f",
-2269 => x"80085186",
-2270 => x"c23f7280",
-2271 => x"dfd40cc2",
-2272 => x"a53fc0fc",
-2273 => x"3f80dfa8",
-2274 => x"528151c3",
-2275 => x"e33f8008",
-2276 => x"5186a83f",
-2277 => x"00ff3900",
-2278 => x"ff39f53d",
-2279 => x"0d7e6080",
-2280 => x"dfd40870",
-2281 => x"5b585b5b",
-2282 => x"7580c238",
-2283 => x"777a25a1",
-2284 => x"38771b70",
-2285 => x"337081ff",
-2286 => x"06585859",
-2287 => x"758a2e98",
-2288 => x"387681ff",
-2289 => x"0651c1bd",
-2290 => x"3f811858",
-2291 => x"797824e1",
-2292 => x"3879800c",
-2293 => x"8d3d0d04",
-2294 => x"8d51c1a9",
-2295 => x"3f783370",
-2296 => x"81ff0652",
-2297 => x"57c19e3f",
-2298 => x"811858e0",
-2299 => x"3979557a",
-2300 => x"547d5385",
-2301 => x"528d3dfc",
-2302 => x"0551c0c6",
-2303 => x"3f800856",
-2304 => x"85b23f7b",
-2305 => x"80080c75",
-2306 => x"800c8d3d",
-2307 => x"0d04f63d",
-2308 => x"0d7d7f80",
-2309 => x"dfd40870",
-2310 => x"5b585a5a",
-2311 => x"7580c138",
-2312 => x"777925b3",
-2313 => x"38c0b93f",
-2314 => x"800881ff",
-2315 => x"06708d32",
-2316 => x"7030709f",
-2317 => x"2a515157",
-2318 => x"57768a2e",
-2319 => x"80c43875",
-2320 => x"802ebf38",
-2321 => x"771a5676",
-2322 => x"76347651",
-2323 => x"c0b73f81",
-2324 => x"18587878",
-2325 => x"24cf3877",
-2326 => x"5675800c",
-2327 => x"8c3d0d04",
-2328 => x"78557954",
-2329 => x"7c538452",
-2330 => x"8c3dfc05",
-2331 => x"51ffbfd2",
-2332 => x"3f800856",
-2333 => x"84be3f7a",
-2334 => x"80080c75",
-2335 => x"800c8c3d",
-2336 => x"0d04771a",
-2337 => x"598a7934",
-2338 => x"8118588d",
-2339 => x"51ffbff5",
-2340 => x"3f8a51ff",
-2341 => x"bfef3f77",
-2342 => x"56ffbe39",
-2343 => x"fb3d0d80",
-2344 => x"dfd40870",
-2345 => x"56547388",
-2346 => x"3874800c",
-2347 => x"873d0d04",
-2348 => x"77538352",
-2349 => x"873dfc05",
-2350 => x"51ffbf86",
-2351 => x"3f800854",
-2352 => x"83f23f75",
-2353 => x"80080c73",
-2354 => x"800c873d",
-2355 => x"0d04fa3d",
-2356 => x"0d80dfd4",
-2357 => x"08802ea3",
-2358 => x"387a5579",
-2359 => x"54785386",
-2360 => x"52883dfc",
-2361 => x"0551ffbe",
-2362 => x"d93f8008",
-2363 => x"5683c53f",
-2364 => x"7680080c",
-2365 => x"75800c88",
-2366 => x"3d0d0483",
-2367 => x"b73f9d0b",
-2368 => x"80080cff",
-2369 => x"0b800c88",
-2370 => x"3d0d04f7",
-2371 => x"3d0d7b7d",
-2372 => x"5b59bc53",
-2373 => x"80527951",
-2374 => x"f5f83f80",
-2375 => x"70565798",
-2376 => x"56741970",
-2377 => x"3370782b",
-2378 => x"79078118",
-2379 => x"f81a5a58",
-2380 => x"59555884",
-2381 => x"7524ea38",
-2382 => x"767a2384",
-2383 => x"19588070",
-2384 => x"56579856",
-2385 => x"74187033",
-2386 => x"70782b79",
-2387 => x"078118f8",
-2388 => x"1a5a5859",
-2389 => x"51548475",
-2390 => x"24ea3876",
-2391 => x"821b2388",
-2392 => x"19588070",
-2393 => x"56579856",
-2394 => x"74187033",
-2395 => x"70782b79",
-2396 => x"078118f8",
-2397 => x"1a5a5859",
-2398 => x"51548475",
-2399 => x"24ea3876",
-2400 => x"841b0c8c",
-2401 => x"19588070",
-2402 => x"56579856",
-2403 => x"74187033",
-2404 => x"70782b79",
-2405 => x"078118f8",
-2406 => x"1a5a5859",
-2407 => x"51548475",
-2408 => x"24ea3876",
-2409 => x"881b2390",
-2410 => x"19588070",
-2411 => x"56579856",
-2412 => x"74187033",
-2413 => x"70782b79",
-2414 => x"078118f8",
-2415 => x"1a5a5859",
-2416 => x"51548475",
-2417 => x"24ea3876",
-2418 => x"8a1b2394",
-2419 => x"19588070",
-2420 => x"56579856",
-2421 => x"74187033",
-2422 => x"70782b79",
-2423 => x"078118f8",
-2424 => x"1a5a5859",
-2425 => x"51548475",
-2426 => x"24ea3876",
-2427 => x"8c1b2398",
-2428 => x"19588070",
-2429 => x"56579856",
-2430 => x"74187033",
-2431 => x"70782b79",
-2432 => x"078118f8",
-2433 => x"1a5a5859",
-2434 => x"51548475",
-2435 => x"24ea3876",
-2436 => x"8e1b239c",
-2437 => x"19588070",
-2438 => x"5657b856",
-2439 => x"74187033",
-2440 => x"70782b79",
-2441 => x"078118f8",
-2442 => x"1a5a5859",
-2443 => x"5a548875",
-2444 => x"24ea3876",
-2445 => x"901b0c8b",
-2446 => x"3d0d04e9",
-2447 => x"3d0d6a80",
-2448 => x"dfd40857",
-2449 => x"57759338",
-2450 => x"80c0800b",
-2451 => x"84180c75",
-2452 => x"ac180c75",
-2453 => x"800c993d",
-2454 => x"0d04893d",
-2455 => x"70556a54",
-2456 => x"558a5299",
-2457 => x"3dffbc05",
-2458 => x"51ffbbd6",
-2459 => x"3f800877",
-2460 => x"53755256",
-2461 => x"fd953fbc",
-2462 => x"3f778008",
-2463 => x"0c75800c",
-2464 => x"993d0d04",
-2465 => x"fc3d0d81",
-2466 => x"5480dfd4",
-2467 => x"08883873",
-2468 => x"800c863d",
-2469 => x"0d047653",
-2470 => x"97b95286",
-2471 => x"3dfc0551",
-2472 => x"ffbb9f3f",
-2473 => x"8008548c",
-2474 => x"3f748008",
-2475 => x"0c73800c",
-2476 => x"863d0d04",
-2477 => x"80cfe408",
-2478 => x"800c04f7",
-2479 => x"3d0d7b80",
-2480 => x"cfe40882",
-2481 => x"c811085a",
-2482 => x"545a7780",
-2483 => x"2e80da38",
-2484 => x"81881884",
-2485 => x"1908ff05",
-2486 => x"81712b59",
-2487 => x"55598074",
-2488 => x"2480ea38",
-2489 => x"807424b5",
-2490 => x"3873822b",
-2491 => x"78118805",
-2492 => x"56568180",
-2493 => x"19087706",
-2494 => x"5372802e",
-2495 => x"b6387816",
-2496 => x"70085353",
-2497 => x"79517408",
-2498 => x"53722dff",
-2499 => x"14fc17fc",
-2500 => x"1779812c",
-2501 => x"5a575754",
-2502 => x"738025d6",
-2503 => x"38770858",
-2504 => x"77ffad38",
-2505 => x"80cfe408",
-2506 => x"53bc1308",
-2507 => x"a5387951",
-2508 => x"f8e23f74",
-2509 => x"0853722d",
-2510 => x"ff14fc17",
-2511 => x"fc177981",
-2512 => x"2c5a5757",
-2513 => x"54738025",
-2514 => x"ffa838d1",
-2515 => x"398057ff",
-2516 => x"93397251",
-2517 => x"bc130854",
-2518 => x"732d7951",
-2519 => x"f8b63f70",
-2520 => x"7080dfb0",
-2521 => x"0bfc0570",
-2522 => x"08525270",
-2523 => x"ff2e9138",
-2524 => x"702dfc12",
-2525 => x"70085252",
-2526 => x"70ff2e09",
-2527 => x"8106f138",
-2528 => x"50500404",
-2529 => x"ffbb8c3f",
-2530 => x"04000000",
-2531 => x"00000040",
-2532 => x"48656c6c",
-2533 => x"6f20776f",
-2534 => x"726c6420",
-2535 => x"310a0000",
-2536 => x"48656c6c",
-2537 => x"6f20776f",
-2538 => x"726c6420",
-2539 => x"320a0000",
-2540 => x"0a000000",
-2541 => x"43000000",
-2542 => x"64756d6d",
-2543 => x"792e6578",
-2544 => x"65000000",
-2545 => x"00ffffff",
-2546 => x"ff00ffff",
-2547 => x"ffff00ff",
-2548 => x"ffffff00",
-2549 => x"00000000",
-2550 => x"00000000",
-2551 => x"00000000",
-2552 => x"00002fb8",
-2553 => x"000027e8",
-2554 => x"00000000",
-2555 => x"00002a50",
-2556 => x"00002aac",
-2557 => x"00002b08",
-2558 => x"00000000",
-2559 => x"00000000",
-2560 => x"00000000",
-2561 => x"00000000",
-2562 => x"00000000",
-2563 => x"00000000",
-2564 => x"00000000",
-2565 => x"00000000",
-2566 => x"00000000",
-2567 => x"000027b4",
-2568 => x"00000000",
-2569 => x"00000000",
-2570 => x"00000000",
-2571 => x"00000000",
-2572 => x"00000000",
-2573 => x"00000000",
-2574 => x"00000000",
-2575 => x"00000000",
-2576 => x"00000000",
-2577 => x"00000000",
-2578 => x"00000000",
-2579 => x"00000000",
-2580 => x"00000000",
-2581 => x"00000000",
-2582 => x"00000000",
-2583 => x"00000000",
-2584 => x"00000000",
-2585 => x"00000000",
-2586 => x"00000000",
-2587 => x"00000000",
-2588 => x"00000000",
-2589 => x"00000000",
-2590 => x"00000000",
-2591 => x"00000000",
-2592 => x"00000000",
-2593 => x"00000000",
-2594 => x"00000000",
-2595 => x"00000000",
-2596 => x"00000001",
-2597 => x"330eabcd",
-2598 => x"1234e66d",
-2599 => x"deec0005",
-2600 => x"000b0000",
-2601 => x"00000000",
-2602 => x"00000000",
-2603 => x"00000000",
-2604 => x"00000000",
-2605 => x"00000000",
-2606 => x"00000000",
-2607 => x"00000000",
-2608 => x"00000000",
-2609 => x"00000000",
-2610 => x"00000000",
-2611 => x"00000000",
-2612 => x"00000000",
-2613 => x"00000000",
-2614 => x"00000000",
-2615 => x"00000000",
-2616 => x"00000000",
-2617 => x"00000000",
-2618 => x"00000000",
-2619 => x"00000000",
-2620 => x"00000000",
-2621 => x"00000000",
-2622 => x"00000000",
-2623 => x"00000000",
-2624 => x"00000000",
-2625 => x"00000000",
-2626 => x"00000000",
-2627 => x"00000000",
-2628 => x"00000000",
-2629 => x"00000000",
-2630 => x"00000000",
-2631 => x"00000000",
-2632 => x"00000000",
-2633 => x"00000000",
-2634 => x"00000000",
-2635 => x"00000000",
-2636 => x"00000000",
-2637 => x"00000000",
-2638 => x"00000000",
-2639 => x"00000000",
-2640 => x"00000000",
-2641 => x"00000000",
-2642 => x"00000000",
-2643 => x"00000000",
-2644 => x"00000000",
-2645 => x"00000000",
-2646 => x"00000000",
-2647 => x"00000000",
-2648 => x"00000000",
-2649 => x"00000000",
-2650 => x"00000000",
-2651 => x"00000000",
-2652 => x"00000000",
-2653 => x"00000000",
-2654 => x"00000000",
-2655 => x"00000000",
-2656 => x"00000000",
-2657 => x"00000000",
-2658 => x"00000000",
-2659 => x"00000000",
-2660 => x"00000000",
-2661 => x"00000000",
-2662 => x"00000000",
-2663 => x"00000000",
-2664 => x"00000000",
-2665 => x"00000000",
-2666 => x"00000000",
-2667 => x"00000000",
-2668 => x"00000000",
-2669 => x"00000000",
-2670 => x"00000000",
-2671 => x"00000000",
-2672 => x"00000000",
-2673 => x"00000000",
-2674 => x"00000000",
-2675 => x"00000000",
-2676 => x"00000000",
-2677 => x"00000000",
-2678 => x"00000000",
-2679 => x"00000000",
-2680 => x"00000000",
-2681 => x"00000000",
-2682 => x"00000000",
-2683 => x"00000000",
-2684 => x"00000000",
-2685 => x"00000000",
-2686 => x"00000000",
-2687 => x"00000000",
-2688 => x"00000000",
-2689 => x"00000000",
-2690 => x"00000000",
-2691 => x"00000000",
-2692 => x"00000000",
-2693 => x"00000000",
-2694 => x"00000000",
-2695 => x"00000000",
-2696 => x"00000000",
-2697 => x"00000000",
-2698 => x"00000000",
-2699 => x"00000000",
-2700 => x"00000000",
-2701 => x"00000000",
-2702 => x"00000000",
-2703 => x"00000000",
-2704 => x"00000000",
-2705 => x"00000000",
-2706 => x"00000000",
-2707 => x"00000000",
-2708 => x"00000000",
-2709 => x"00000000",
-2710 => x"00000000",
-2711 => x"00000000",
-2712 => x"00000000",
-2713 => x"00000000",
-2714 => x"00000000",
-2715 => x"00000000",
-2716 => x"00000000",
-2717 => x"00000000",
-2718 => x"00000000",
-2719 => x"00000000",
-2720 => x"00000000",
-2721 => x"00000000",
-2722 => x"00000000",
-2723 => x"00000000",
-2724 => x"00000000",
-2725 => x"00000000",
-2726 => x"00000000",
-2727 => x"00000000",
-2728 => x"00000000",
-2729 => x"00000000",
-2730 => x"00000000",
-2731 => x"00000000",
-2732 => x"00000000",
-2733 => x"00000000",
-2734 => x"00000000",
-2735 => x"00000000",
-2736 => x"00000000",
-2737 => x"00000000",
-2738 => x"00000000",
-2739 => x"00000000",
-2740 => x"00000000",
-2741 => x"00000000",
-2742 => x"00000000",
-2743 => x"00000000",
-2744 => x"00000000",
-2745 => x"00000000",
-2746 => x"00000000",
-2747 => x"00000000",
-2748 => x"00000000",
-2749 => x"00000000",
-2750 => x"00000000",
-2751 => x"00000000",
-2752 => x"00000000",
-2753 => x"00000000",
-2754 => x"00000000",
-2755 => x"00000000",
-2756 => x"00000000",
-2757 => x"00000000",
-2758 => x"00000000",
-2759 => x"00000000",
-2760 => x"00000000",
-2761 => x"00000000",
-2762 => x"00000000",
-2763 => x"00000000",
-2764 => x"00000000",
-2765 => x"00000000",
-2766 => x"00000000",
-2767 => x"00000000",
-2768 => x"00000000",
-2769 => x"00000000",
-2770 => x"00000000",
-2771 => x"00000000",
-2772 => x"00000000",
-2773 => x"00000000",
-2774 => x"00000000",
-2775 => x"00000000",
-2776 => x"00000000",
-2777 => x"00000000",
-2778 => x"00000000",
-2779 => x"00000000",
-2780 => x"00000000",
-2781 => x"00000000",
-2782 => x"00000000",
-2783 => x"00000000",
-2784 => x"00000000",
-2785 => x"00000000",
-2786 => x"00000000",
-2787 => x"00000000",
-2788 => x"00000000",
-2789 => x"ffffffff",
-2790 => x"00000000",
-2791 => x"00020000",
-2792 => x"00000000",
-2793 => x"00000000",
-2794 => x"00002ba0",
-2795 => x"00002ba0",
-2796 => x"00002ba8",
-2797 => x"00002ba8",
-2798 => x"00002bb0",
-2799 => x"00002bb0",
-2800 => x"00002bb8",
-2801 => x"00002bb8",
-2802 => x"00002bc0",
-2803 => x"00002bc0",
-2804 => x"00002bc8",
-2805 => x"00002bc8",
-2806 => x"00002bd0",
-2807 => x"00002bd0",
-2808 => x"00002bd8",
-2809 => x"00002bd8",
-2810 => x"00002be0",
-2811 => x"00002be0",
-2812 => x"00002be8",
-2813 => x"00002be8",
-2814 => x"00002bf0",
-2815 => x"00002bf0",
-2816 => x"00002bf8",
-2817 => x"00002bf8",
-2818 => x"00002c00",
-2819 => x"00002c00",
-2820 => x"00002c08",
-2821 => x"00002c08",
-2822 => x"00002c10",
-2823 => x"00002c10",
-2824 => x"00002c18",
-2825 => x"00002c18",
-2826 => x"00002c20",
-2827 => x"00002c20",
-2828 => x"00002c28",
-2829 => x"00002c28",
-2830 => x"00002c30",
-2831 => x"00002c30",
-2832 => x"00002c38",
-2833 => x"00002c38",
-2834 => x"00002c40",
-2835 => x"00002c40",
-2836 => x"00002c48",
-2837 => x"00002c48",
-2838 => x"00002c50",
-2839 => x"00002c50",
-2840 => x"00002c58",
-2841 => x"00002c58",
-2842 => x"00002c60",
-2843 => x"00002c60",
-2844 => x"00002c68",
-2845 => x"00002c68",
-2846 => x"00002c70",
-2847 => x"00002c70",
-2848 => x"00002c78",
-2849 => x"00002c78",
-2850 => x"00002c80",
-2851 => x"00002c80",
-2852 => x"00002c88",
-2853 => x"00002c88",
-2854 => x"00002c90",
-2855 => x"00002c90",
-2856 => x"00002c98",
-2857 => x"00002c98",
-2858 => x"00002ca0",
-2859 => x"00002ca0",
-2860 => x"00002ca8",
-2861 => x"00002ca8",
-2862 => x"00002cb0",
-2863 => x"00002cb0",
-2864 => x"00002cb8",
-2865 => x"00002cb8",
-2866 => x"00002cc0",
-2867 => x"00002cc0",
-2868 => x"00002cc8",
-2869 => x"00002cc8",
-2870 => x"00002cd0",
-2871 => x"00002cd0",
-2872 => x"00002cd8",
-2873 => x"00002cd8",
-2874 => x"00002ce0",
-2875 => x"00002ce0",
-2876 => x"00002ce8",
-2877 => x"00002ce8",
-2878 => x"00002cf0",
-2879 => x"00002cf0",
-2880 => x"00002cf8",
-2881 => x"00002cf8",
-2882 => x"00002d00",
-2883 => x"00002d00",
-2884 => x"00002d08",
-2885 => x"00002d08",
-2886 => x"00002d10",
-2887 => x"00002d10",
-2888 => x"00002d18",
-2889 => x"00002d18",
-2890 => x"00002d20",
-2891 => x"00002d20",
-2892 => x"00002d28",
-2893 => x"00002d28",
-2894 => x"00002d30",
-2895 => x"00002d30",
-2896 => x"00002d38",
-2897 => x"00002d38",
-2898 => x"00002d40",
-2899 => x"00002d40",
-2900 => x"00002d48",
-2901 => x"00002d48",
-2902 => x"00002d50",
-2903 => x"00002d50",
-2904 => x"00002d58",
-2905 => x"00002d58",
-2906 => x"00002d60",
-2907 => x"00002d60",
-2908 => x"00002d68",
-2909 => x"00002d68",
-2910 => x"00002d70",
-2911 => x"00002d70",
-2912 => x"00002d78",
-2913 => x"00002d78",
-2914 => x"00002d80",
-2915 => x"00002d80",
-2916 => x"00002d88",
-2917 => x"00002d88",
-2918 => x"00002d90",
-2919 => x"00002d90",
-2920 => x"00002d98",
-2921 => x"00002d98",
-2922 => x"00002da0",
-2923 => x"00002da0",
-2924 => x"00002da8",
-2925 => x"00002da8",
-2926 => x"00002db0",
-2927 => x"00002db0",
-2928 => x"00002db8",
-2929 => x"00002db8",
-2930 => x"00002dc0",
-2931 => x"00002dc0",
-2932 => x"00002dc8",
-2933 => x"00002dc8",
-2934 => x"00002dd0",
-2935 => x"00002dd0",
-2936 => x"00002dd8",
-2937 => x"00002dd8",
-2938 => x"00002de0",
-2939 => x"00002de0",
-2940 => x"00002de8",
-2941 => x"00002de8",
-2942 => x"00002df0",
-2943 => x"00002df0",
-2944 => x"00002df8",
-2945 => x"00002df8",
-2946 => x"00002e00",
-2947 => x"00002e00",
-2948 => x"00002e08",
-2949 => x"00002e08",
-2950 => x"00002e10",
-2951 => x"00002e10",
-2952 => x"00002e18",
-2953 => x"00002e18",
-2954 => x"00002e20",
-2955 => x"00002e20",
-2956 => x"00002e28",
-2957 => x"00002e28",
-2958 => x"00002e30",
-2959 => x"00002e30",
-2960 => x"00002e38",
-2961 => x"00002e38",
-2962 => x"00002e40",
-2963 => x"00002e40",
-2964 => x"00002e48",
-2965 => x"00002e48",
-2966 => x"00002e50",
-2967 => x"00002e50",
-2968 => x"00002e58",
-2969 => x"00002e58",
-2970 => x"00002e60",
-2971 => x"00002e60",
-2972 => x"00002e68",
-2973 => x"00002e68",
-2974 => x"00002e70",
-2975 => x"00002e70",
-2976 => x"00002e78",
-2977 => x"00002e78",
-2978 => x"00002e80",
-2979 => x"00002e80",
-2980 => x"00002e88",
-2981 => x"00002e88",
-2982 => x"00002e90",
-2983 => x"00002e90",
-2984 => x"00002e98",
-2985 => x"00002e98",
-2986 => x"00002ea0",
-2987 => x"00002ea0",
-2988 => x"00002ea8",
-2989 => x"00002ea8",
-2990 => x"00002eb0",
-2991 => x"00002eb0",
-2992 => x"00002eb8",
-2993 => x"00002eb8",
-2994 => x"00002ec0",
-2995 => x"00002ec0",
-2996 => x"00002ec8",
-2997 => x"00002ec8",
-2998 => x"00002ed0",
-2999 => x"00002ed0",
-3000 => x"00002ed8",
-3001 => x"00002ed8",
-3002 => x"00002ee0",
-3003 => x"00002ee0",
-3004 => x"00002ee8",
-3005 => x"00002ee8",
-3006 => x"00002ef0",
-3007 => x"00002ef0",
-3008 => x"00002ef8",
-3009 => x"00002ef8",
-3010 => x"00002f00",
-3011 => x"00002f00",
-3012 => x"00002f08",
-3013 => x"00002f08",
-3014 => x"00002f10",
-3015 => x"00002f10",
-3016 => x"00002f18",
-3017 => x"00002f18",
-3018 => x"00002f20",
-3019 => x"00002f20",
-3020 => x"00002f28",
-3021 => x"00002f28",
-3022 => x"00002f30",
-3023 => x"00002f30",
-3024 => x"00002f38",
-3025 => x"00002f38",
-3026 => x"00002f40",
-3027 => x"00002f40",
-3028 => x"00002f48",
-3029 => x"00002f48",
-3030 => x"00002f50",
-3031 => x"00002f50",
-3032 => x"00002f58",
-3033 => x"00002f58",
-3034 => x"00002f60",
-3035 => x"00002f60",
-3036 => x"00002f68",
-3037 => x"00002f68",
-3038 => x"00002f70",
-3039 => x"00002f70",
-3040 => x"00002f78",
-3041 => x"00002f78",
-3042 => x"00002f80",
-3043 => x"00002f80",
-3044 => x"00002f88",
-3045 => x"00002f88",
-3046 => x"00002f90",
-3047 => x"00002f90",
-3048 => x"00002f98",
-3049 => x"00002f98",
-3050 => x"000027b8",
-3051 => x"ffffffff",
-3052 => x"00000000",
-3053 => x"ffffffff",
-3054 => x"00000000",
- others => x"00000000"
-);
-
-begin
-
-process (clk)
-begin
- if (clk'event and clk = '1') then
- if (memAWriteEnable = '1') and (memBWriteEnable = '1') and (memAAddr=memBAddr) and (memAWrite/=memBWrite) then
- report "write collision" severity failure;
- end if;
-
- if (memAWriteEnable = '1') then
- ram(to_integer(unsigned(memAAddr))) := memAWrite;
- memARead <= memAWrite;
- else
- memARead <= ram(to_integer(unsigned(memAAddr)));
- end if;
- end if;
-end process;
-
-process (clk)
-begin
- if (clk'event and clk = '1') then
- if (memBWriteEnable = '1') then
- ram(to_integer(unsigned(memBAddr))) := memBWrite;
- memBRead <= memBWrite;
- else
- memBRead <= ram(to_integer(unsigned(memBAddr)));
- end if;
- end if;
-end process;
-
-
-
-
-end dualport_ram_arch;
+-- ZPU
+--
+-- Copyright 2004-2008 oharboe - Øyvind Harboe - oyvind.harboe@zylin.com
+--
+-- The FreeBSD license
+--
+-- Redistribution and use in source and binary forms, with or without
+-- modification, are permitted provided that the following conditions
+-- are met:
+--
+-- 1. Redistributions of source code must retain the above copyright
+-- notice, this list of conditions and the following disclaimer.
+-- 2. Redistributions in binary form must reproduce the above
+-- copyright notice, this list of conditions and the following
+-- disclaimer in the documentation and/or other materials
+-- provided with the distribution.
+--
+-- THIS SOFTWARE IS PROVIDED BY THE ZPU PROJECT ``AS IS'' AND ANY
+-- EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+-- THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+-- PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+-- ZPU PROJECT OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+-- INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+-- (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+-- OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+-- HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+-- STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+-- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+-- ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+--
+-- The views and conclusions contained in the software and documentation
+-- are those of the authors and should not be interpreted as representing
+-- official policies, either expressed or implied, of the ZPU Project.
+
+library ieee;
+use ieee.std_logic_1164.all;
+use ieee.numeric_std.all;
+
+
+library work;
+use work.zpu_config.all;
+use work.zpupkg.all;
+
+entity dualport_ram is
+port (clk : in std_logic;
+ memAWriteEnable : in std_logic;
+ memAAddr : in std_logic_vector(maxAddrBitBRAM downto minAddrBit);
+ memAWrite : in std_logic_vector(wordSize-1 downto 0);
+ memARead : out std_logic_vector(wordSize-1 downto 0);
+ memBWriteEnable : in std_logic;
+ memBAddr : in std_logic_vector(maxAddrBitBRAM downto minAddrBit);
+ memBWrite : in std_logic_vector(wordSize-1 downto 0);
+ memBRead : out std_logic_vector(wordSize-1 downto 0));
+end dualport_ram;
+
+architecture dualport_ram_arch of dualport_ram is
+
+
+type ram_type is array(natural range 0 to ((2**(maxAddrBitBRAM+1))/4)-1) of std_logic_vector(wordSize-1 downto 0);
+
+shared variable ram : ram_type :=
+(
+0 => x"0b0b0b0b",
+1 => x"82700b0b",
+2 => x"80cfd80c",
+3 => x"3a0b0b80",
+4 => x"c6d00400",
+5 => x"00000000",
+6 => x"00000000",
+7 => x"00000000",
+8 => x"80088408",
+9 => x"88080b0b",
+10 => x"80c7972d",
+11 => x"880c840c",
+12 => x"800c0400",
+13 => x"00000000",
+14 => x"00000000",
+15 => x"00000000",
+16 => x"71fd0608",
+17 => x"72830609",
+18 => x"81058205",
+19 => x"832b2a83",
+20 => x"ffff0652",
+21 => x"04000000",
+22 => x"00000000",
+23 => x"00000000",
+24 => x"71fd0608",
+25 => x"83ffff73",
+26 => x"83060981",
+27 => x"05820583",
+28 => x"2b2b0906",
+29 => x"7383ffff",
+30 => x"0b0b0b0b",
+31 => x"83a70400",
+32 => x"72098105",
+33 => x"72057373",
+34 => x"09060906",
+35 => x"73097306",
+36 => x"070a8106",
+37 => x"53510400",
+38 => x"00000000",
+39 => x"00000000",
+40 => x"72722473",
+41 => x"732e0753",
+42 => x"51040000",
+43 => x"00000000",
+44 => x"00000000",
+45 => x"00000000",
+46 => x"00000000",
+47 => x"00000000",
+48 => x"71737109",
+49 => x"71068106",
+50 => x"30720a10",
+51 => x"0a720a10",
+52 => x"0a31050a",
+53 => x"81065151",
+54 => x"53510400",
+55 => x"00000000",
+56 => x"72722673",
+57 => x"732e0753",
+58 => x"51040000",
+59 => x"00000000",
+60 => x"00000000",
+61 => x"00000000",
+62 => x"00000000",
+63 => x"00000000",
+64 => x"00000000",
+65 => x"00000000",
+66 => x"00000000",
+67 => x"00000000",
+68 => x"00000000",
+69 => x"00000000",
+70 => x"00000000",
+71 => x"00000000",
+72 => x"0b0b0b88",
+73 => x"c4040000",
+74 => x"00000000",
+75 => x"00000000",
+76 => x"00000000",
+77 => x"00000000",
+78 => x"00000000",
+79 => x"00000000",
+80 => x"720a722b",
+81 => x"0a535104",
+82 => x"00000000",
+83 => x"00000000",
+84 => x"00000000",
+85 => x"00000000",
+86 => x"00000000",
+87 => x"00000000",
+88 => x"72729f06",
+89 => x"0981050b",
+90 => x"0b0b88a7",
+91 => x"05040000",
+92 => x"00000000",
+93 => x"00000000",
+94 => x"00000000",
+95 => x"00000000",
+96 => x"72722aff",
+97 => x"739f062a",
+98 => x"0974090a",
+99 => x"8106ff05",
+100 => x"06075351",
+101 => x"04000000",
+102 => x"00000000",
+103 => x"00000000",
+104 => x"71715351",
+105 => x"020d0406",
+106 => x"73830609",
+107 => x"81058205",
+108 => x"832b0b2b",
+109 => x"0772fc06",
+110 => x"0c515104",
+111 => x"00000000",
+112 => x"72098105",
+113 => x"72050970",
+114 => x"81050906",
+115 => x"0a810653",
+116 => x"51040000",
+117 => x"00000000",
+118 => x"00000000",
+119 => x"00000000",
+120 => x"72098105",
+121 => x"72050970",
+122 => x"81050906",
+123 => x"0a098106",
+124 => x"53510400",
+125 => x"00000000",
+126 => x"00000000",
+127 => x"00000000",
+128 => x"71098105",
+129 => x"52040000",
+130 => x"00000000",
+131 => x"00000000",
+132 => x"00000000",
+133 => x"00000000",
+134 => x"00000000",
+135 => x"00000000",
+136 => x"72720981",
+137 => x"05055351",
+138 => x"04000000",
+139 => x"00000000",
+140 => x"00000000",
+141 => x"00000000",
+142 => x"00000000",
+143 => x"00000000",
+144 => x"72097206",
+145 => x"73730906",
+146 => x"07535104",
+147 => x"00000000",
+148 => x"00000000",
+149 => x"00000000",
+150 => x"00000000",
+151 => x"00000000",
+152 => x"71fc0608",
+153 => x"72830609",
+154 => x"81058305",
+155 => x"1010102a",
+156 => x"81ff0652",
+157 => x"04000000",
+158 => x"00000000",
+159 => x"00000000",
+160 => x"71fc0608",
+161 => x"0b0b80cf",
+162 => x"c4738306",
+163 => x"10100508",
+164 => x"060b0b0b",
+165 => x"88aa0400",
+166 => x"00000000",
+167 => x"00000000",
+168 => x"80088408",
+169 => x"88087575",
+170 => x"0b0b0b8b",
+171 => x"9f2d5050",
+172 => x"80085688",
+173 => x"0c840c80",
+174 => x"0c510400",
+175 => x"00000000",
+176 => x"80088408",
+177 => x"88087575",
+178 => x"0b0b0b8b",
+179 => x"e32d5050",
+180 => x"80085688",
+181 => x"0c840c80",
+182 => x"0c510400",
+183 => x"00000000",
+184 => x"72097081",
+185 => x"0509060a",
+186 => x"8106ff05",
+187 => x"70547106",
+188 => x"73097274",
+189 => x"05ff0506",
+190 => x"07515151",
+191 => x"04000000",
+192 => x"72097081",
+193 => x"0509060a",
+194 => x"098106ff",
+195 => x"05705471",
+196 => x"06730972",
+197 => x"7405ff05",
+198 => x"06075151",
+199 => x"51040000",
+200 => x"05ff0504",
+201 => x"00000000",
+202 => x"00000000",
+203 => x"00000000",
+204 => x"00000000",
+205 => x"00000000",
+206 => x"00000000",
+207 => x"00000000",
+208 => x"810b0b0b",
+209 => x"80cfd40c",
+210 => x"51040000",
+211 => x"00000000",
+212 => x"00000000",
+213 => x"00000000",
+214 => x"00000000",
+215 => x"00000000",
+216 => x"71810552",
+217 => x"04000000",
+218 => x"00000000",
+219 => x"00000000",
+220 => x"00000000",
+221 => x"00000000",
+222 => x"00000000",
+223 => x"00000000",
+224 => x"00000000",
+225 => x"00000000",
+226 => x"00000000",
+227 => x"00000000",
+228 => x"00000000",
+229 => x"00000000",
+230 => x"00000000",
+231 => x"00000000",
+232 => x"02840572",
+233 => x"10100552",
+234 => x"04000000",
+235 => x"00000000",
+236 => x"00000000",
+237 => x"00000000",
+238 => x"00000000",
+239 => x"00000000",
+240 => x"00000000",
+241 => x"00000000",
+242 => x"00000000",
+243 => x"00000000",
+244 => x"00000000",
+245 => x"00000000",
+246 => x"00000000",
+247 => x"00000000",
+248 => x"717105ff",
+249 => x"05715351",
+250 => x"020d0400",
+251 => x"00000000",
+252 => x"00000000",
+253 => x"00000000",
+254 => x"00000000",
+255 => x"00000000",
+256 => x"82c53f80",
+257 => x"c6d93f04",
+258 => x"10101010",
+259 => x"10101010",
+260 => x"10101010",
+261 => x"10101010",
+262 => x"10101010",
+263 => x"10101010",
+264 => x"10101010",
+265 => x"10101053",
+266 => x"51047381",
+267 => x"ff067383",
+268 => x"06098105",
+269 => x"83051010",
+270 => x"102b0772",
+271 => x"fc060c51",
+272 => x"51043c04",
+273 => x"72728072",
+274 => x"8106ff05",
+275 => x"09720605",
+276 => x"71105272",
+277 => x"0a100a53",
+278 => x"72ed3851",
+279 => x"51535104",
+280 => x"fe3d0d0b",
+281 => x"0b80dfc0",
+282 => x"08538413",
+283 => x"0870882a",
+284 => x"70810651",
+285 => x"52527080",
+286 => x"2ef03871",
+287 => x"81ff0680",
+288 => x"0c843d0d",
+289 => x"04ff3d0d",
+290 => x"0b0b80df",
+291 => x"c0085271",
+292 => x"0870882a",
+293 => x"81327081",
+294 => x"06515151",
+295 => x"70f13873",
+296 => x"720c833d",
+297 => x"0d0480cf",
+298 => x"d408802e",
+299 => x"a43880cf",
+300 => x"d808822e",
+301 => x"bd388380",
+302 => x"800b0b0b",
+303 => x"80dfc00c",
+304 => x"82a0800b",
+305 => x"80dfc40c",
+306 => x"8290800b",
+307 => x"80dfc80c",
+308 => x"04f88080",
+309 => x"80a40b0b",
+310 => x"0b80dfc0",
+311 => x"0cf88080",
+312 => x"82800b80",
+313 => x"dfc40cf8",
+314 => x"80808480",
+315 => x"0b80dfc8",
+316 => x"0c0480c0",
+317 => x"a8808c0b",
+318 => x"0b0b80df",
+319 => x"c00c80c0",
+320 => x"a880940b",
+321 => x"80dfc40c",
+322 => x"0b0b80cf",
+323 => x"8c0b80df",
+324 => x"c80c0470",
+325 => x"7080dfcc",
+326 => x"335170a7",
+327 => x"3880cfe0",
+328 => x"08700852",
+329 => x"5270802e",
+330 => x"94388412",
+331 => x"80cfe00c",
+332 => x"702d80cf",
+333 => x"e0087008",
+334 => x"525270ee",
+335 => x"38810b80",
+336 => x"dfcc3450",
+337 => x"50040470",
+338 => x"0b0b80df",
+339 => x"bc08802e",
+340 => x"8e380b0b",
+341 => x"0b0b800b",
+342 => x"802e0981",
+343 => x"06833850",
+344 => x"040b0b80",
+345 => x"dfbc510b",
+346 => x"0b0bf594",
+347 => x"3f500404",
+348 => x"fe3d0d89",
+349 => x"5380cf90",
+350 => x"5182c13f",
+351 => x"80cfa051",
+352 => x"82ba3f81",
+353 => x"0a0b80df",
+354 => x"d80cff0b",
+355 => x"80dfdc0c",
+356 => x"ff135372",
+357 => x"8025de38",
+358 => x"72800c84",
+359 => x"3d0d04fb",
+360 => x"3d0d7779",
+361 => x"55558056",
+362 => x"757524ab",
+363 => x"38807424",
+364 => x"9d388053",
+365 => x"73527451",
+366 => x"80e13f80",
+367 => x"08547580",
+368 => x"2e853880",
+369 => x"08305473",
+370 => x"800c873d",
+371 => x"0d047330",
+372 => x"76813257",
+373 => x"54dc3974",
+374 => x"30558156",
+375 => x"738025d2",
+376 => x"38ec39fa",
+377 => x"3d0d787a",
+378 => x"57558057",
+379 => x"767524a4",
+380 => x"38759f2c",
+381 => x"54815375",
+382 => x"74327431",
+383 => x"5274519b",
+384 => x"3f800854",
+385 => x"76802e85",
+386 => x"38800830",
+387 => x"5473800c",
+388 => x"883d0d04",
+389 => x"74305581",
+390 => x"57d739fc",
+391 => x"3d0d7678",
+392 => x"53548153",
+393 => x"80747326",
+394 => x"52557280",
+395 => x"2e983870",
+396 => x"802eab38",
+397 => x"807224a6",
+398 => x"38711073",
+399 => x"10757226",
+400 => x"53545272",
+401 => x"ea387351",
+402 => x"78833874",
+403 => x"5170800c",
+404 => x"863d0d04",
+405 => x"720a100a",
+406 => x"720a100a",
+407 => x"53537280",
+408 => x"2ee43871",
+409 => x"7426ed38",
+410 => x"73723175",
+411 => x"7407740a",
+412 => x"100a740a",
+413 => x"100a5555",
+414 => x"5654e339",
+415 => x"f73d0d7c",
+416 => x"70525380",
+417 => x"f93f7254",
+418 => x"80085580",
+419 => x"cfb05681",
+420 => x"57800881",
+421 => x"055a8b3d",
+422 => x"e4115953",
+423 => x"8259f413",
+424 => x"527b8811",
+425 => x"08525381",
+426 => x"b23f8008",
+427 => x"30708008",
+428 => x"079f2c8a",
+429 => x"07800c53",
+430 => x"8b3d0d04",
+431 => x"f63d0d7c",
+432 => x"80cfe408",
+433 => x"71535553",
+434 => x"b53f7255",
+435 => x"80085680",
+436 => x"cfb05781",
+437 => x"58800881",
+438 => x"055b8c3d",
+439 => x"e4115a53",
+440 => x"825af413",
+441 => x"52881408",
+442 => x"5180f03f",
+443 => x"80083070",
+444 => x"8008079f",
+445 => x"2c8a0780",
+446 => x"0c548c3d",
+447 => x"0d047070",
+448 => x"70707570",
+449 => x"71830653",
+450 => x"555270b4",
+451 => x"38717008",
+452 => x"7009f7fb",
+453 => x"fdff1206",
+454 => x"f8848281",
+455 => x"80065452",
+456 => x"53719b38",
+457 => x"84137008",
+458 => x"7009f7fb",
+459 => x"fdff1206",
+460 => x"f8848281",
+461 => x"80065452",
+462 => x"5371802e",
+463 => x"e7387252",
+464 => x"71335372",
+465 => x"802e8a38",
+466 => x"81127033",
+467 => x"545272f8",
+468 => x"38717431",
+469 => x"800c5050",
+470 => x"505004f2",
+471 => x"3d0d6062",
+472 => x"88110870",
+473 => x"58565f5a",
+474 => x"73802e81",
+475 => x"8c388c1a",
+476 => x"2270832a",
+477 => x"81328106",
+478 => x"56587486",
+479 => x"38901a08",
+480 => x"91387951",
+481 => x"90b73fff",
+482 => x"55800880",
+483 => x"ec388c1a",
+484 => x"22587d08",
+485 => x"55807883",
+486 => x"ffff0670",
+487 => x"0a100a81",
+488 => x"06415c57",
+489 => x"7e772e80",
+490 => x"d7387690",
+491 => x"38740884",
+492 => x"16088817",
+493 => x"57585676",
+494 => x"802ef238",
+495 => x"76548880",
+496 => x"77278438",
+497 => x"88805473",
+498 => x"5375529c",
+499 => x"1a0851a4",
+500 => x"1a085877",
+501 => x"2d800b80",
+502 => x"082582e0",
+503 => x"38800816",
+504 => x"77800831",
+505 => x"7f880508",
+506 => x"80083170",
+507 => x"6188050c",
+508 => x"5b585678",
+509 => x"ffb43880",
+510 => x"5574800c",
+511 => x"903d0d04",
+512 => x"7a813281",
+513 => x"06774056",
+514 => x"75802e81",
+515 => x"bd387690",
+516 => x"38740884",
+517 => x"16088817",
+518 => x"57585976",
+519 => x"802ef238",
+520 => x"881a0878",
+521 => x"83ffff06",
+522 => x"70892a81",
+523 => x"06565956",
+524 => x"73802e82",
+525 => x"f8387577",
+526 => x"278b3877",
+527 => x"872a8106",
+528 => x"5c7b82b5",
+529 => x"38767627",
+530 => x"83387656",
+531 => x"75537852",
+532 => x"79085185",
+533 => x"833f881a",
+534 => x"08763188",
+535 => x"1b0c7908",
+536 => x"167a0c76",
+537 => x"56751977",
+538 => x"77317f88",
+539 => x"05087831",
+540 => x"70618805",
+541 => x"0c415859",
+542 => x"7e802efe",
+543 => x"fa388c1a",
+544 => x"2258ff8a",
+545 => x"39787954",
+546 => x"7c537b52",
+547 => x"5684c93f",
+548 => x"881a0879",
+549 => x"31881b0c",
+550 => x"7908197a",
+551 => x"0c7c7631",
+552 => x"5d7c8e38",
+553 => x"79518ff2",
+554 => x"3f800881",
+555 => x"8f388008",
+556 => x"5f751c77",
+557 => x"77317f88",
+558 => x"05087831",
+559 => x"70618805",
+560 => x"0c5d585c",
+561 => x"7a802efe",
+562 => x"ae387681",
+563 => x"83387408",
+564 => x"84160888",
+565 => x"1757585c",
+566 => x"76802ef2",
+567 => x"3876538a",
+568 => x"527b5182",
+569 => x"d33f8008",
+570 => x"7c318105",
+571 => x"5d800884",
+572 => x"3881175d",
+573 => x"815f7c59",
+574 => x"767d2783",
+575 => x"38765994",
+576 => x"1a08881b",
+577 => x"08115758",
+578 => x"807a085c",
+579 => x"54901a08",
+580 => x"7b278338",
+581 => x"81547579",
+582 => x"25843873",
+583 => x"ba387779",
+584 => x"24fee238",
+585 => x"77537b52",
+586 => x"9c1a0851",
+587 => x"a41a0859",
+588 => x"782d8008",
+589 => x"56800880",
+590 => x"24fee238",
+591 => x"8c1a2280",
+592 => x"c0075e7d",
+593 => x"8c1b23ff",
+594 => x"5574800c",
+595 => x"903d0d04",
+596 => x"7effa338",
+597 => x"ff873975",
+598 => x"537b527a",
+599 => x"5182f93f",
+600 => x"7908167a",
+601 => x"0c79518e",
+602 => x"b13f8008",
+603 => x"cf387c76",
+604 => x"315d7cfe",
+605 => x"bc38feac",
+606 => x"39901a08",
+607 => x"7a087131",
+608 => x"78117056",
+609 => x"5a575280",
+610 => x"cfe40851",
+611 => x"84943f80",
+612 => x"08802eff",
+613 => x"a7388008",
+614 => x"901b0c80",
+615 => x"08167a0c",
+616 => x"77941b0c",
+617 => x"76881b0c",
+618 => x"7656fd99",
+619 => x"39790858",
+620 => x"901a0878",
+621 => x"27833881",
+622 => x"54757727",
+623 => x"843873b3",
+624 => x"38941a08",
+625 => x"54737726",
+626 => x"80d33873",
+627 => x"5378529c",
+628 => x"1a0851a4",
+629 => x"1a085877",
+630 => x"2d800856",
+631 => x"80088024",
+632 => x"fd83388c",
+633 => x"1a2280c0",
+634 => x"075e7d8c",
+635 => x"1b23ff55",
+636 => x"fed73975",
+637 => x"53785277",
+638 => x"5181dd3f",
+639 => x"7908167a",
+640 => x"0c79518d",
+641 => x"953f8008",
+642 => x"802efcd9",
+643 => x"388c1a22",
+644 => x"80c0075e",
+645 => x"7d8c1b23",
+646 => x"ff55fead",
+647 => x"39767754",
+648 => x"79537852",
+649 => x"5681b13f",
+650 => x"881a0877",
+651 => x"31881b0c",
+652 => x"7908177a",
+653 => x"0cfcae39",
+654 => x"fa3d0d7a",
+655 => x"79028805",
+656 => x"a7053355",
+657 => x"53548374",
+658 => x"2780df38",
+659 => x"71830651",
+660 => x"7080d738",
+661 => x"71715755",
+662 => x"83517582",
+663 => x"802913ff",
+664 => x"12525670",
+665 => x"8025f338",
+666 => x"837427bc",
+667 => x"38740876",
+668 => x"327009f7",
+669 => x"fbfdff12",
+670 => x"06f88482",
+671 => x"81800651",
+672 => x"5170802e",
+673 => x"98387451",
+674 => x"80527033",
+675 => x"5772772e",
+676 => x"b9388111",
+677 => x"81135351",
+678 => x"837227ee",
+679 => x"38fc1484",
+680 => x"16565473",
+681 => x"8326c638",
+682 => x"7452ff14",
+683 => x"5170ff2e",
+684 => x"97387133",
+685 => x"5472742e",
+686 => x"98388112",
+687 => x"ff125252",
+688 => x"70ff2e09",
+689 => x"8106eb38",
+690 => x"80517080",
+691 => x"0c883d0d",
+692 => x"0471800c",
+693 => x"883d0d04",
+694 => x"fa3d0d78",
+695 => x"7a7c7272",
+696 => x"72595755",
+697 => x"58565774",
+698 => x"7727b238",
+699 => x"75155176",
+700 => x"7127aa38",
+701 => x"707618ff",
+702 => x"18535353",
+703 => x"70ff2e96",
+704 => x"38ff12ff",
+705 => x"14545272",
+706 => x"337234ff",
+707 => x"115170ff",
+708 => x"2e098106",
+709 => x"ec387680",
+710 => x"0c883d0d",
+711 => x"048f7627",
+712 => x"80e63874",
+713 => x"77078306",
+714 => x"517080dc",
+715 => x"38767552",
+716 => x"53707084",
+717 => x"05520873",
+718 => x"70840555",
+719 => x"0c727170",
+720 => x"84055308",
+721 => x"71708405",
+722 => x"530c7170",
+723 => x"84055308",
+724 => x"71708405",
+725 => x"530c7170",
+726 => x"84055308",
+727 => x"71708405",
+728 => x"530cf015",
+729 => x"5553738f",
+730 => x"26c73883",
+731 => x"74279538",
+732 => x"70708405",
+733 => x"52087370",
+734 => x"8405550c",
+735 => x"fc145473",
+736 => x"8326ed38",
+737 => x"72715452",
+738 => x"ff145170",
+739 => x"ff2eff86",
+740 => x"38727081",
+741 => x"05543372",
+742 => x"70810554",
+743 => x"34ff1151",
+744 => x"ea39ef3d",
+745 => x"0d636567",
+746 => x"405d427b",
+747 => x"802e8582",
+748 => x"386151a9",
+749 => x"e73ff81c",
+750 => x"70841208",
+751 => x"70fc0670",
+752 => x"628b0570",
+753 => x"f8064159",
+754 => x"455c5f41",
+755 => x"57967427",
+756 => x"82c53880",
+757 => x"7b247e7c",
+758 => x"26075880",
+759 => x"5477742e",
+760 => x"09810682",
+761 => x"ab38787b",
+762 => x"2581fe38",
+763 => x"781780d7",
+764 => x"a00b8805",
+765 => x"085b5679",
+766 => x"762e84c5",
+767 => x"38841608",
+768 => x"70fe0617",
+769 => x"84110881",
+770 => x"06415555",
+771 => x"7e828d38",
+772 => x"74fc0658",
+773 => x"79762e84",
+774 => x"e3387818",
+775 => x"5f7e7b25",
+776 => x"81ff387c",
+777 => x"81065473",
+778 => x"82c13876",
+779 => x"77083184",
+780 => x"1108fc06",
+781 => x"56577580",
+782 => x"2e913879",
+783 => x"762e84f0",
+784 => x"38741819",
+785 => x"58777b25",
+786 => x"84913876",
+787 => x"802e829b",
+788 => x"38781556",
+789 => x"7a762482",
+790 => x"92388c17",
+791 => x"08881808",
+792 => x"718c120c",
+793 => x"88120c5e",
+794 => x"75598817",
+795 => x"61fc055b",
+796 => x"5679a426",
+797 => x"85ff387b",
+798 => x"76595593",
+799 => x"7a2780c9",
+800 => x"387b7084",
+801 => x"055d087c",
+802 => x"56760c74",
+803 => x"70840556",
+804 => x"088c180c",
+805 => x"9017589b",
+806 => x"7a27ae38",
+807 => x"74708405",
+808 => x"5608780c",
+809 => x"74708405",
+810 => x"56089418",
+811 => x"0c981758",
+812 => x"a37a2795",
+813 => x"38747084",
+814 => x"05560878",
+815 => x"0c747084",
+816 => x"0556089c",
+817 => x"180ca017",
+818 => x"58747084",
+819 => x"05560875",
+820 => x"5f787084",
+821 => x"055a0c77",
+822 => x"7e708405",
+823 => x"40087170",
+824 => x"8405530c",
+825 => x"7e08710c",
+826 => x"5d787b31",
+827 => x"56758f26",
+828 => x"80c93884",
+829 => x"17088106",
+830 => x"79078418",
+831 => x"0c781784",
+832 => x"11088107",
+833 => x"84120c5b",
+834 => x"6151a791",
+835 => x"3f881754",
+836 => x"73800c93",
+837 => x"3d0d0490",
+838 => x"5bfdb839",
+839 => x"7756fe83",
+840 => x"398c1608",
+841 => x"88170871",
+842 => x"8c120c88",
+843 => x"120c587e",
+844 => x"707c3157",
+845 => x"598f7627",
+846 => x"ffb9387a",
+847 => x"17841808",
+848 => x"81067c07",
+849 => x"84190c76",
+850 => x"81078412",
+851 => x"0c761184",
+852 => x"11088107",
+853 => x"84120c5b",
+854 => x"88055261",
+855 => x"518fda3f",
+856 => x"6151a6b9",
+857 => x"3f881754",
+858 => x"ffa6397d",
+859 => x"52615197",
+860 => x"d73f8008",
+861 => x"5a800880",
+862 => x"2e81ab38",
+863 => x"8008f805",
+864 => x"60840508",
+865 => x"fe066105",
+866 => x"58557477",
+867 => x"2e83f238",
+868 => x"fc195877",
+869 => x"a42681b0",
+870 => x"387b8008",
+871 => x"56579378",
+872 => x"2780dc38",
+873 => x"7b707084",
+874 => x"05520880",
+875 => x"08708405",
+876 => x"800c0c80",
+877 => x"08717084",
+878 => x"0553085d",
+879 => x"567b7670",
+880 => x"8405580c",
+881 => x"579b7827",
+882 => x"b6387670",
+883 => x"84055808",
+884 => x"75708405",
+885 => x"570c7670",
+886 => x"84055808",
+887 => x"75708405",
+888 => x"570ca378",
+889 => x"27993876",
+890 => x"70840558",
+891 => x"08757084",
+892 => x"05570c76",
+893 => x"70840558",
+894 => x"08757084",
+895 => x"05570c76",
+896 => x"70840558",
+897 => x"08775e75",
+898 => x"70840557",
+899 => x"0c747d70",
+900 => x"84055f08",
+901 => x"71708405",
+902 => x"530c7d08",
+903 => x"710c5f7b",
+904 => x"5261518e",
+905 => x"943f6151",
+906 => x"a4f33f79",
+907 => x"800c933d",
+908 => x"0d047d52",
+909 => x"61519690",
+910 => x"3f800880",
+911 => x"0c933d0d",
+912 => x"04841608",
+913 => x"55fbc939",
+914 => x"77537b52",
+915 => x"800851a2",
+916 => x"a53f7b52",
+917 => x"61518de1",
+918 => x"3fcc398c",
+919 => x"16088817",
+920 => x"08718c12",
+921 => x"0c88120c",
+922 => x"5d8c1708",
+923 => x"88180871",
+924 => x"8c120c88",
+925 => x"120c5977",
+926 => x"59fbef39",
+927 => x"7818901c",
+928 => x"40557e75",
+929 => x"24fb9c38",
+930 => x"7a177080",
+931 => x"d7a00b88",
+932 => x"050c757c",
+933 => x"31810784",
+934 => x"120c5684",
+935 => x"17088106",
+936 => x"7b078418",
+937 => x"0c6151a3",
+938 => x"f43f8817",
+939 => x"54fce139",
+940 => x"74181990",
+941 => x"1c5e5a7c",
+942 => x"7a24fb8f",
+943 => x"388c1708",
+944 => x"88180871",
+945 => x"8c120c88",
+946 => x"120c5e88",
+947 => x"1761fc05",
+948 => x"575975a4",
+949 => x"2681b638",
+950 => x"7b795955",
+951 => x"93762780",
+952 => x"c9387b70",
+953 => x"84055d08",
+954 => x"7c56790c",
+955 => x"74708405",
+956 => x"56088c18",
+957 => x"0c901758",
+958 => x"9b7627ae",
+959 => x"38747084",
+960 => x"05560878",
+961 => x"0c747084",
+962 => x"05560894",
+963 => x"180c9817",
+964 => x"58a37627",
+965 => x"95387470",
+966 => x"84055608",
+967 => x"780c7470",
+968 => x"84055608",
+969 => x"9c180ca0",
+970 => x"17587470",
+971 => x"84055608",
+972 => x"75417870",
+973 => x"84055a0c",
+974 => x"77607084",
+975 => x"05420871",
+976 => x"70840553",
+977 => x"0c600871",
+978 => x"0c5e7a17",
+979 => x"7080d7a0",
+980 => x"0b88050c",
+981 => x"7a7c3181",
+982 => x"0784120c",
+983 => x"58841708",
+984 => x"81067b07",
+985 => x"84180c61",
+986 => x"51a2b23f",
+987 => x"78547380",
+988 => x"0c933d0d",
+989 => x"0479537b",
+990 => x"5275519f",
+991 => x"f93ffae9",
+992 => x"39841508",
+993 => x"fc061960",
+994 => x"5859fadd",
+995 => x"3975537b",
+996 => x"5278519f",
+997 => x"e13f7a17",
+998 => x"7080d7a0",
+999 => x"0b88050c",
+1000 => x"7a7c3181",
+1001 => x"0784120c",
+1002 => x"58841708",
+1003 => x"81067b07",
+1004 => x"84180c61",
+1005 => x"51a1e63f",
+1006 => x"7854ffb2",
+1007 => x"39fa3d0d",
+1008 => x"7880cfe4",
+1009 => x"085455b8",
+1010 => x"1308802e",
+1011 => x"81af388c",
+1012 => x"15227083",
+1013 => x"ffff0670",
+1014 => x"832a8132",
+1015 => x"81065555",
+1016 => x"5672802e",
+1017 => x"80da3873",
+1018 => x"842a8132",
+1019 => x"810657ff",
+1020 => x"537680f2",
+1021 => x"3873822a",
+1022 => x"81065473",
+1023 => x"802eb938",
+1024 => x"b0150854",
+1025 => x"73802e9c",
+1026 => x"3880c015",
+1027 => x"5373732e",
+1028 => x"8f387352",
+1029 => x"80cfe408",
+1030 => x"518a9e3f",
+1031 => x"8c152256",
+1032 => x"76b0160c",
+1033 => x"75db0657",
+1034 => x"768c1623",
+1035 => x"800b8416",
+1036 => x"0c901508",
+1037 => x"750c7656",
+1038 => x"75880754",
+1039 => x"738c1623",
+1040 => x"90150880",
+1041 => x"2ebf388c",
+1042 => x"15227081",
+1043 => x"06555373",
+1044 => x"9c38720a",
+1045 => x"100a8106",
+1046 => x"56758538",
+1047 => x"94150854",
+1048 => x"7388160c",
+1049 => x"80537280",
+1050 => x"0c883d0d",
+1051 => x"04800b88",
+1052 => x"160c9415",
+1053 => x"08309816",
+1054 => x"0c8053ea",
+1055 => x"39725182",
+1056 => x"a63ffecb",
+1057 => x"3974518f",
+1058 => x"bc3f8c15",
+1059 => x"22708106",
+1060 => x"55537380",
+1061 => x"2effbb38",
+1062 => x"d439f83d",
+1063 => x"0d7a5776",
+1064 => x"802e8197",
+1065 => x"3880cfe4",
+1066 => x"0854b814",
+1067 => x"08802e80",
+1068 => x"eb388c17",
+1069 => x"2270902b",
+1070 => x"70902c70",
+1071 => x"832a8132",
+1072 => x"81065b5b",
+1073 => x"57557780",
+1074 => x"cb389017",
+1075 => x"08567580",
+1076 => x"2e80c138",
+1077 => x"76087631",
+1078 => x"76780c79",
+1079 => x"83065555",
+1080 => x"73853894",
+1081 => x"17085877",
+1082 => x"88180c80",
+1083 => x"7525a538",
+1084 => x"74537552",
+1085 => x"9c170851",
+1086 => x"a4170854",
+1087 => x"732d800b",
+1088 => x"80082580",
+1089 => x"c9388008",
+1090 => x"16758008",
+1091 => x"31565674",
+1092 => x"8024dd38",
+1093 => x"800b800c",
+1094 => x"8a3d0d04",
+1095 => x"73518187",
+1096 => x"3f8c1722",
+1097 => x"70902b70",
+1098 => x"902c7083",
+1099 => x"2a813281",
+1100 => x"065b5b57",
+1101 => x"5577dd38",
+1102 => x"ff9039a1",
+1103 => x"9a5280cf",
+1104 => x"e408518c",
+1105 => x"d03f8008",
+1106 => x"800c8a3d",
+1107 => x"0d048c17",
+1108 => x"2280c007",
+1109 => x"58778c18",
+1110 => x"23ff0b80",
+1111 => x"0c8a3d0d",
+1112 => x"04fa3d0d",
+1113 => x"797080dc",
+1114 => x"298c1154",
+1115 => x"7a535657",
+1116 => x"8fd63f80",
+1117 => x"08800855",
+1118 => x"56800880",
+1119 => x"2ea23880",
+1120 => x"088c0554",
+1121 => x"800b8008",
+1122 => x"0c768008",
+1123 => x"84050c73",
+1124 => x"80088805",
+1125 => x"0c745380",
+1126 => x"5273519c",
+1127 => x"f53f7554",
+1128 => x"73800c88",
+1129 => x"3d0d0470",
+1130 => x"707074a8",
+1131 => x"e60bbc12",
+1132 => x"0c53810b",
+1133 => x"b8140c80",
+1134 => x"0b84dc14",
+1135 => x"0c830b84",
+1136 => x"e0140c84",
+1137 => x"e81384e4",
+1138 => x"140c8413",
+1139 => x"08518070",
+1140 => x"720c7084",
+1141 => x"130c7088",
+1142 => x"130c5284",
+1143 => x"0b8c1223",
+1144 => x"718e1223",
+1145 => x"7190120c",
+1146 => x"7194120c",
+1147 => x"7198120c",
+1148 => x"709c120c",
+1149 => x"80c1d50b",
+1150 => x"a0120c80",
+1151 => x"c2a10ba4",
+1152 => x"120c80c3",
+1153 => x"9d0ba812",
+1154 => x"0c80c3ee",
+1155 => x"0bac120c",
+1156 => x"88130872",
+1157 => x"710c7284",
+1158 => x"120c7288",
+1159 => x"120c5189",
+1160 => x"0b8c1223",
+1161 => x"810b8e12",
+1162 => x"23719012",
+1163 => x"0c719412",
+1164 => x"0c719812",
+1165 => x"0c709c12",
+1166 => x"0c80c1d5",
+1167 => x"0ba0120c",
+1168 => x"80c2a10b",
+1169 => x"a4120c80",
+1170 => x"c39d0ba8",
+1171 => x"120c80c3",
+1172 => x"ee0bac12",
+1173 => x"0c8c1308",
+1174 => x"72710c72",
+1175 => x"84120c72",
+1176 => x"88120c51",
+1177 => x"8a0b8c12",
+1178 => x"23820b8e",
+1179 => x"12237190",
+1180 => x"120c7194",
+1181 => x"120c7198",
+1182 => x"120c709c",
+1183 => x"120c80c1",
+1184 => x"d50ba012",
+1185 => x"0c80c2a1",
+1186 => x"0ba4120c",
+1187 => x"80c39d0b",
+1188 => x"a8120c80",
+1189 => x"c3ee0bac",
+1190 => x"120c5050",
+1191 => x"5004f83d",
+1192 => x"0d7a80cf",
+1193 => x"e408b811",
+1194 => x"08575758",
+1195 => x"7481ec38",
+1196 => x"a8e60bbc",
+1197 => x"170c810b",
+1198 => x"b8170c74",
+1199 => x"84dc170c",
+1200 => x"830b84e0",
+1201 => x"170c84e8",
+1202 => x"1684e417",
+1203 => x"0c841608",
+1204 => x"75710c75",
+1205 => x"84120c75",
+1206 => x"88120c59",
+1207 => x"840b8c1a",
+1208 => x"23748e1a",
+1209 => x"2374901a",
+1210 => x"0c74941a",
+1211 => x"0c74981a",
+1212 => x"0c789c1a",
+1213 => x"0c80c1d5",
+1214 => x"0ba01a0c",
+1215 => x"80c2a10b",
+1216 => x"a41a0c80",
+1217 => x"c39d0ba8",
+1218 => x"1a0c80c3",
+1219 => x"ee0bac1a",
+1220 => x"0c881608",
+1221 => x"75710c75",
+1222 => x"84120c75",
+1223 => x"88120c57",
+1224 => x"890b8c18",
+1225 => x"23810b8e",
+1226 => x"18237490",
+1227 => x"180c7494",
+1228 => x"180c7498",
+1229 => x"180c769c",
+1230 => x"180c80c1",
+1231 => x"d50ba018",
+1232 => x"0c80c2a1",
+1233 => x"0ba4180c",
+1234 => x"80c39d0b",
+1235 => x"a8180c80",
+1236 => x"c3ee0bac",
+1237 => x"180c8c16",
+1238 => x"0875710c",
+1239 => x"7584120c",
+1240 => x"7588120c",
+1241 => x"548a0b8c",
+1242 => x"1523820b",
+1243 => x"8e152374",
+1244 => x"90150c74",
+1245 => x"94150c74",
+1246 => x"98150c73",
+1247 => x"9c150c80",
+1248 => x"c1d50ba0",
+1249 => x"150c80c2",
+1250 => x"a10ba415",
+1251 => x"0c80c39d",
+1252 => x"0ba8150c",
+1253 => x"80c3ee0b",
+1254 => x"ac150c84",
+1255 => x"dc168811",
+1256 => x"08841208",
+1257 => x"ff055757",
+1258 => x"57807524",
+1259 => x"9f388c16",
+1260 => x"2270902b",
+1261 => x"70902c51",
+1262 => x"55597380",
+1263 => x"2e80ed38",
+1264 => x"80dc16ff",
+1265 => x"16565674",
+1266 => x"8025e338",
+1267 => x"76085574",
+1268 => x"802e8f38",
+1269 => x"74881108",
+1270 => x"841208ff",
+1271 => x"05575757",
+1272 => x"c83982fc",
+1273 => x"5277518a",
+1274 => x"df3f8008",
+1275 => x"80085556",
+1276 => x"8008802e",
+1277 => x"a3388008",
+1278 => x"8c057580",
+1279 => x"080c5484",
+1280 => x"0b800884",
+1281 => x"050c7380",
+1282 => x"0888050c",
+1283 => x"82f05374",
+1284 => x"52735197",
+1285 => x"fd3f7554",
+1286 => x"7374780c",
+1287 => x"5573ffb4",
+1288 => x"388c780c",
+1289 => x"800b800c",
+1290 => x"8a3d0d04",
+1291 => x"810b8c17",
+1292 => x"2373760c",
+1293 => x"7388170c",
+1294 => x"7384170c",
+1295 => x"7390170c",
+1296 => x"7394170c",
+1297 => x"7398170c",
+1298 => x"ff0b8e17",
+1299 => x"2373b017",
+1300 => x"0c73b417",
+1301 => x"0c7380c4",
+1302 => x"170c7380",
+1303 => x"c8170c75",
+1304 => x"800c8a3d",
+1305 => x"0d047070",
+1306 => x"a19a5273",
+1307 => x"5186a63f",
+1308 => x"50500470",
+1309 => x"70a19a52",
+1310 => x"80cfe408",
+1311 => x"5186963f",
+1312 => x"505004fb",
+1313 => x"3d0d7770",
+1314 => x"52569890",
+1315 => x"3f80d7a0",
+1316 => x"0b880508",
+1317 => x"841108fc",
+1318 => x"06707b31",
+1319 => x"9fef05e0",
+1320 => x"8006e080",
+1321 => x"05525555",
+1322 => x"a0807524",
+1323 => x"94388052",
+1324 => x"755197ea",
+1325 => x"3f80d7a8",
+1326 => x"08145372",
+1327 => x"80082e8f",
+1328 => x"38755197",
+1329 => x"d83f8053",
+1330 => x"72800c87",
+1331 => x"3d0d0474",
+1332 => x"30527551",
+1333 => x"97c83f80",
+1334 => x"08ff2ea8",
+1335 => x"3880d7a0",
+1336 => x"0b880508",
+1337 => x"74763181",
+1338 => x"0784120c",
+1339 => x"5380d6e4",
+1340 => x"08753180",
+1341 => x"d6e40c75",
+1342 => x"5197a23f",
+1343 => x"810b800c",
+1344 => x"873d0d04",
+1345 => x"80527551",
+1346 => x"97943f80",
+1347 => x"d7a00b88",
+1348 => x"05088008",
+1349 => x"71315454",
+1350 => x"8f7325ff",
+1351 => x"a4388008",
+1352 => x"80d79408",
+1353 => x"3180d6e4",
+1354 => x"0c728107",
+1355 => x"84150c75",
+1356 => x"5196ea3f",
+1357 => x"8053ff90",
+1358 => x"39f73d0d",
+1359 => x"7b7d545a",
+1360 => x"72802e82",
+1361 => x"83387951",
+1362 => x"96d23ff8",
+1363 => x"13841108",
+1364 => x"70fe0670",
+1365 => x"13841108",
+1366 => x"fc065c57",
+1367 => x"58545780",
+1368 => x"d7a80874",
+1369 => x"2e82de38",
+1370 => x"7784150c",
+1371 => x"80738106",
+1372 => x"56597479",
+1373 => x"2e81d538",
+1374 => x"77148411",
+1375 => x"08810656",
+1376 => x"5374a038",
+1377 => x"77165678",
+1378 => x"81e63888",
+1379 => x"14085574",
+1380 => x"80d7a82e",
+1381 => x"82f9388c",
+1382 => x"1408708c",
+1383 => x"170c7588",
+1384 => x"120c5875",
+1385 => x"81078418",
+1386 => x"0c751776",
+1387 => x"710c5478",
+1388 => x"81913883",
+1389 => x"ff762781",
+1390 => x"c8387589",
+1391 => x"2a76832a",
+1392 => x"54547380",
+1393 => x"2ebf3875",
+1394 => x"862ab805",
+1395 => x"53847427",
+1396 => x"b43880db",
+1397 => x"14539474",
+1398 => x"27ab3875",
+1399 => x"8c2a80ee",
+1400 => x"055380d4",
+1401 => x"74279e38",
+1402 => x"758f2a80",
+1403 => x"f7055382",
+1404 => x"d4742791",
+1405 => x"3875922a",
+1406 => x"80fc0553",
+1407 => x"8ad47427",
+1408 => x"843880fe",
+1409 => x"53721010",
+1410 => x"1080d7a0",
+1411 => x"05881108",
+1412 => x"55557375",
+1413 => x"2e82bf38",
+1414 => x"841408fc",
+1415 => x"06597579",
+1416 => x"278d3888",
+1417 => x"14085473",
+1418 => x"752e0981",
+1419 => x"06ea388c",
+1420 => x"1408708c",
+1421 => x"190c7488",
+1422 => x"190c7788",
+1423 => x"120c5576",
+1424 => x"8c150c79",
+1425 => x"5194d63f",
+1426 => x"8b3d0d04",
+1427 => x"76087771",
+1428 => x"31587605",
+1429 => x"88180856",
+1430 => x"567480d7",
+1431 => x"a82e80e0",
+1432 => x"388c1708",
+1433 => x"708c170c",
+1434 => x"7588120c",
+1435 => x"53fe8939",
+1436 => x"8814088c",
+1437 => x"1508708c",
+1438 => x"130c5988",
+1439 => x"190cfea3",
+1440 => x"3975832a",
+1441 => x"70545480",
+1442 => x"74248198",
+1443 => x"3872822c",
+1444 => x"81712b80",
+1445 => x"d7a40807",
+1446 => x"80d7a00b",
+1447 => x"84050c74",
+1448 => x"10101080",
+1449 => x"d7a00588",
+1450 => x"1108718c",
+1451 => x"1b0c7088",
+1452 => x"1b0c7988",
+1453 => x"130c565a",
+1454 => x"55768c15",
+1455 => x"0cff8439",
+1456 => x"8159fdb4",
+1457 => x"39771673",
+1458 => x"81065455",
+1459 => x"72983876",
+1460 => x"08777131",
+1461 => x"5875058c",
+1462 => x"18088819",
+1463 => x"08718c12",
+1464 => x"0c88120c",
+1465 => x"55557481",
+1466 => x"0784180c",
+1467 => x"7680d7a0",
+1468 => x"0b88050c",
+1469 => x"80d79c08",
+1470 => x"7526fec7",
+1471 => x"3880d798",
+1472 => x"08527951",
+1473 => x"fafd3f79",
+1474 => x"5193923f",
+1475 => x"feba3981",
+1476 => x"778c170c",
+1477 => x"7788170c",
+1478 => x"758c190c",
+1479 => x"7588190c",
+1480 => x"59fd8039",
+1481 => x"83147082",
+1482 => x"2c81712b",
+1483 => x"80d7a408",
+1484 => x"0780d7a0",
+1485 => x"0b84050c",
+1486 => x"75101010",
+1487 => x"80d7a005",
+1488 => x"88110871",
+1489 => x"8c1c0c70",
+1490 => x"881c0c7a",
+1491 => x"88130c57",
+1492 => x"5b5653fe",
+1493 => x"e4398073",
+1494 => x"24a33872",
+1495 => x"822c8171",
+1496 => x"2b80d7a4",
+1497 => x"080780d7",
+1498 => x"a00b8405",
+1499 => x"0c58748c",
+1500 => x"180c7388",
+1501 => x"180c7688",
+1502 => x"160cfdc3",
+1503 => x"39831370",
+1504 => x"822c8171",
+1505 => x"2b80d7a4",
+1506 => x"080780d7",
+1507 => x"a00b8405",
+1508 => x"0c5953da",
+1509 => x"39f93d0d",
+1510 => x"797b5853",
+1511 => x"800b80cf",
+1512 => x"e4085356",
+1513 => x"72722ebc",
+1514 => x"3884dc13",
+1515 => x"5574762e",
+1516 => x"b3388815",
+1517 => x"08841608",
+1518 => x"ff055454",
+1519 => x"80732499",
+1520 => x"388c1422",
+1521 => x"70902b53",
+1522 => x"587180d4",
+1523 => x"3880dc14",
+1524 => x"ff145454",
+1525 => x"728025e9",
+1526 => x"38740855",
+1527 => x"74d43880",
+1528 => x"cfe40852",
+1529 => x"84dc1255",
+1530 => x"74802ead",
+1531 => x"38881508",
+1532 => x"841608ff",
+1533 => x"05545480",
+1534 => x"73249838",
+1535 => x"8c142270",
+1536 => x"902b5358",
+1537 => x"71ad3880",
+1538 => x"dc14ff14",
+1539 => x"54547280",
+1540 => x"25ea3874",
+1541 => x"085574d5",
+1542 => x"3875800c",
+1543 => x"893d0d04",
+1544 => x"7351762d",
+1545 => x"75800807",
+1546 => x"80dc15ff",
+1547 => x"15555556",
+1548 => x"ffa23973",
+1549 => x"51762d75",
+1550 => x"80080780",
+1551 => x"dc15ff15",
+1552 => x"555556ca",
+1553 => x"39ea3d0d",
+1554 => x"688c1122",
+1555 => x"700a100a",
+1556 => x"81065758",
+1557 => x"567480e4",
+1558 => x"388e1622",
+1559 => x"70902b70",
+1560 => x"902c5155",
+1561 => x"58807424",
+1562 => x"b138983d",
+1563 => x"c4055373",
+1564 => x"5280cfe4",
+1565 => x"08519481",
+1566 => x"3f800b80",
+1567 => x"08249738",
+1568 => x"7983e080",
+1569 => x"06547380",
+1570 => x"c0802e81",
+1571 => x"8f387382",
+1572 => x"80802e81",
+1573 => x"91388c16",
+1574 => x"22577690",
+1575 => x"80075473",
+1576 => x"8c172388",
+1577 => x"805280cf",
+1578 => x"e4085181",
+1579 => x"9b3f8008",
+1580 => x"9d388c16",
+1581 => x"22820755",
+1582 => x"748c1723",
+1583 => x"80c31670",
+1584 => x"770c9017",
+1585 => x"0c810b94",
+1586 => x"170c983d",
+1587 => x"0d0480cf",
+1588 => x"e408a8e6",
+1589 => x"0bbc120c",
+1590 => x"588c1622",
+1591 => x"81800754",
+1592 => x"738c1723",
+1593 => x"8008760c",
+1594 => x"80089017",
+1595 => x"0c88800b",
+1596 => x"94170c74",
+1597 => x"802ed338",
+1598 => x"8e162270",
+1599 => x"902b7090",
+1600 => x"2c535654",
+1601 => x"9afe3f80",
+1602 => x"08802eff",
+1603 => x"bd388c16",
+1604 => x"22810757",
+1605 => x"768c1723",
+1606 => x"983d0d04",
+1607 => x"810b8c17",
+1608 => x"225855fe",
+1609 => x"f539a816",
+1610 => x"0880c39d",
+1611 => x"2e098106",
+1612 => x"fee4388c",
+1613 => x"16228880",
+1614 => x"0754738c",
+1615 => x"17238880",
+1616 => x"0b80cc17",
+1617 => x"0cfedc39",
+1618 => x"f43d0d7e",
+1619 => x"608b1170",
+1620 => x"f8065b55",
+1621 => x"555d7296",
+1622 => x"26833890",
+1623 => x"58807824",
+1624 => x"74792607",
+1625 => x"55805474",
+1626 => x"742e0981",
+1627 => x"0680ca38",
+1628 => x"7c518ea8",
+1629 => x"3f7783f7",
+1630 => x"2680c538",
+1631 => x"77832a70",
+1632 => x"10101080",
+1633 => x"d7a0058c",
+1634 => x"11085858",
+1635 => x"5475772e",
+1636 => x"81f03884",
+1637 => x"1608fc06",
+1638 => x"8c170888",
+1639 => x"1808718c",
+1640 => x"120c8812",
+1641 => x"0c5b7605",
+1642 => x"84110881",
+1643 => x"0784120c",
+1644 => x"537c518d",
+1645 => x"e83f8816",
+1646 => x"5473800c",
+1647 => x"8e3d0d04",
+1648 => x"77892a78",
+1649 => x"832a5854",
+1650 => x"73802ebf",
+1651 => x"3877862a",
+1652 => x"b8055784",
+1653 => x"7427b438",
+1654 => x"80db1457",
+1655 => x"947427ab",
+1656 => x"38778c2a",
+1657 => x"80ee0557",
+1658 => x"80d47427",
+1659 => x"9e38778f",
+1660 => x"2a80f705",
+1661 => x"5782d474",
+1662 => x"27913877",
+1663 => x"922a80fc",
+1664 => x"05578ad4",
+1665 => x"74278438",
+1666 => x"80fe5776",
+1667 => x"10101080",
+1668 => x"d7a0058c",
+1669 => x"11085653",
+1670 => x"74732ea3",
+1671 => x"38841508",
+1672 => x"fc067079",
+1673 => x"31555673",
+1674 => x"8f2488e4",
+1675 => x"38738025",
+1676 => x"88e6388c",
+1677 => x"15085574",
+1678 => x"732e0981",
+1679 => x"06df3881",
+1680 => x"175980d7",
+1681 => x"b0085675",
+1682 => x"80d7a82e",
+1683 => x"82cc3884",
+1684 => x"1608fc06",
+1685 => x"70793155",
+1686 => x"55738f24",
+1687 => x"bb3880d7",
+1688 => x"a80b80d7",
+1689 => x"b40c80d7",
+1690 => x"a80b80d7",
+1691 => x"b00c8074",
+1692 => x"2480db38",
+1693 => x"74168411",
+1694 => x"08810784",
+1695 => x"120c53fe",
+1696 => x"b0398816",
+1697 => x"8c110857",
+1698 => x"5975792e",
+1699 => x"098106fe",
+1700 => x"82388214",
+1701 => x"59ffab39",
+1702 => x"77167881",
+1703 => x"0784180c",
+1704 => x"7080d7b4",
+1705 => x"0c7080d7",
+1706 => x"b00c80d7",
+1707 => x"a80b8c12",
+1708 => x"0c8c1108",
+1709 => x"88120c74",
+1710 => x"81078412",
+1711 => x"0c740574",
+1712 => x"710c5b7c",
+1713 => x"518bd63f",
+1714 => x"881654fd",
+1715 => x"ec3983ff",
+1716 => x"75278391",
+1717 => x"3874892a",
+1718 => x"75832a54",
+1719 => x"5473802e",
+1720 => x"bf387486",
+1721 => x"2ab80553",
+1722 => x"847427b4",
+1723 => x"3880db14",
+1724 => x"53947427",
+1725 => x"ab38748c",
+1726 => x"2a80ee05",
+1727 => x"5380d474",
+1728 => x"279e3874",
+1729 => x"8f2a80f7",
+1730 => x"055382d4",
+1731 => x"74279138",
+1732 => x"74922a80",
+1733 => x"fc05538a",
+1734 => x"d4742784",
+1735 => x"3880fe53",
+1736 => x"72101010",
+1737 => x"80d7a005",
+1738 => x"88110855",
+1739 => x"5773772e",
+1740 => x"868b3884",
+1741 => x"1408fc06",
+1742 => x"5b747b27",
+1743 => x"8d388814",
+1744 => x"08547377",
+1745 => x"2e098106",
+1746 => x"ea388c14",
+1747 => x"0880d7a0",
+1748 => x"0b840508",
+1749 => x"718c190c",
+1750 => x"7588190c",
+1751 => x"7788130c",
+1752 => x"5c57758c",
+1753 => x"150c7853",
+1754 => x"80792483",
+1755 => x"98387282",
+1756 => x"2c81712b",
+1757 => x"5656747b",
+1758 => x"2680ca38",
+1759 => x"7a750657",
+1760 => x"7682a338",
+1761 => x"78fc0684",
+1762 => x"05597410",
+1763 => x"707c0655",
+1764 => x"55738292",
+1765 => x"38841959",
+1766 => x"f13980d7",
+1767 => x"a00b8405",
+1768 => x"0879545b",
+1769 => x"788025c6",
+1770 => x"3882da39",
+1771 => x"74097b06",
+1772 => x"7080d7a0",
+1773 => x"0b84050c",
+1774 => x"5b741055",
+1775 => x"747b2685",
+1776 => x"387485bc",
+1777 => x"3880d7a0",
+1778 => x"0b880508",
+1779 => x"70841208",
+1780 => x"fc06707b",
+1781 => x"317b7226",
+1782 => x"8f722507",
+1783 => x"5d575c5c",
+1784 => x"5578802e",
+1785 => x"80d93879",
+1786 => x"1580d798",
+1787 => x"08199011",
+1788 => x"59545680",
+1789 => x"d79408ff",
+1790 => x"2e8838a0",
+1791 => x"8f13e080",
+1792 => x"06577652",
+1793 => x"7c518996",
+1794 => x"3f800854",
+1795 => x"8008ff2e",
+1796 => x"90388008",
+1797 => x"762782a7",
+1798 => x"387480d7",
+1799 => x"a02e829f",
+1800 => x"3880d7a0",
+1801 => x"0b880508",
+1802 => x"55841508",
+1803 => x"fc067079",
+1804 => x"31797226",
+1805 => x"8f722507",
+1806 => x"5d555a7a",
+1807 => x"83f23877",
+1808 => x"81078416",
+1809 => x"0c771570",
+1810 => x"80d7a00b",
+1811 => x"88050c74",
+1812 => x"81078412",
+1813 => x"0c567c51",
+1814 => x"88c33f88",
+1815 => x"15547380",
+1816 => x"0c8e3d0d",
+1817 => x"0474832a",
+1818 => x"70545480",
+1819 => x"7424819b",
+1820 => x"3872822c",
+1821 => x"81712b80",
+1822 => x"d7a40807",
+1823 => x"7080d7a0",
+1824 => x"0b84050c",
+1825 => x"75101010",
+1826 => x"80d7a005",
+1827 => x"88110871",
+1828 => x"8c1b0c70",
+1829 => x"881b0c79",
+1830 => x"88130c57",
+1831 => x"555c5575",
+1832 => x"8c150cfd",
+1833 => x"c1397879",
+1834 => x"10101080",
+1835 => x"d7a00570",
+1836 => x"565b5c8c",
+1837 => x"14085675",
+1838 => x"742ea338",
+1839 => x"841608fc",
+1840 => x"06707931",
+1841 => x"5853768f",
+1842 => x"2483f138",
+1843 => x"76802584",
+1844 => x"af388c16",
+1845 => x"08567574",
+1846 => x"2e098106",
+1847 => x"df388814",
+1848 => x"811a7083",
+1849 => x"06555a54",
+1850 => x"72c9387b",
+1851 => x"83065675",
+1852 => x"802efdb8",
+1853 => x"38ff1cf8",
+1854 => x"1b5b5c88",
+1855 => x"1a087a2e",
+1856 => x"ea38fdb5",
+1857 => x"39831953",
+1858 => x"fce43983",
+1859 => x"1470822c",
+1860 => x"81712b80",
+1861 => x"d7a40807",
+1862 => x"7080d7a0",
+1863 => x"0b84050c",
+1864 => x"76101010",
+1865 => x"80d7a005",
+1866 => x"88110871",
+1867 => x"8c1c0c70",
+1868 => x"881c0c7a",
+1869 => x"88130c58",
+1870 => x"535d5653",
+1871 => x"fee13980",
+1872 => x"d6e40817",
+1873 => x"59800876",
+1874 => x"2e818b38",
+1875 => x"80d79408",
+1876 => x"ff2e848e",
+1877 => x"38737631",
+1878 => x"1980d6e4",
+1879 => x"0c738706",
+1880 => x"70565372",
+1881 => x"802e8838",
+1882 => x"88733170",
+1883 => x"15555576",
+1884 => x"149fff06",
+1885 => x"a0807131",
+1886 => x"1670547e",
+1887 => x"53515386",
+1888 => x"9d3f8008",
+1889 => x"568008ff",
+1890 => x"2e819e38",
+1891 => x"80d6e408",
+1892 => x"137080d6",
+1893 => x"e40c7475",
+1894 => x"80d7a00b",
+1895 => x"88050c77",
+1896 => x"76311581",
+1897 => x"07555659",
+1898 => x"7a80d7a0",
+1899 => x"2e83c038",
+1900 => x"798f2682",
+1901 => x"ef38810b",
+1902 => x"84150c84",
+1903 => x"1508fc06",
+1904 => x"70793179",
+1905 => x"72268f72",
+1906 => x"25075d55",
+1907 => x"5a7a802e",
+1908 => x"fced3880",
+1909 => x"db398008",
+1910 => x"9fff0655",
+1911 => x"74feed38",
+1912 => x"7880d6e4",
+1913 => x"0c80d7a0",
+1914 => x"0b880508",
+1915 => x"7a188107",
+1916 => x"84120c55",
+1917 => x"80d79008",
+1918 => x"79278638",
+1919 => x"7880d790",
+1920 => x"0c80d78c",
+1921 => x"087927fc",
+1922 => x"a0387880",
+1923 => x"d78c0c84",
+1924 => x"1508fc06",
+1925 => x"70793179",
+1926 => x"72268f72",
+1927 => x"25075d55",
+1928 => x"5a7a802e",
+1929 => x"fc993888",
+1930 => x"39807457",
+1931 => x"53fedd39",
+1932 => x"7c5184e9",
+1933 => x"3f800b80",
+1934 => x"0c8e3d0d",
+1935 => x"04807324",
+1936 => x"a5387282",
+1937 => x"2c81712b",
+1938 => x"80d7a408",
+1939 => x"077080d7",
+1940 => x"a00b8405",
+1941 => x"0c5c5a76",
+1942 => x"8c170c73",
+1943 => x"88170c75",
+1944 => x"88180cf9",
+1945 => x"fd398313",
+1946 => x"70822c81",
+1947 => x"712b80d7",
+1948 => x"a4080770",
+1949 => x"80d7a00b",
+1950 => x"84050c5d",
+1951 => x"5b53d839",
+1952 => x"7a75065c",
+1953 => x"7bfc9f38",
+1954 => x"84197510",
+1955 => x"5659f139",
+1956 => x"ff178105",
+1957 => x"59f7ab39",
+1958 => x"8c150888",
+1959 => x"1608718c",
+1960 => x"120c8812",
+1961 => x"0c597515",
+1962 => x"84110881",
+1963 => x"0784120c",
+1964 => x"587c5183",
+1965 => x"e83f8815",
+1966 => x"54fba339",
+1967 => x"77167881",
+1968 => x"0784180c",
+1969 => x"8c170888",
+1970 => x"1808718c",
+1971 => x"120c8812",
+1972 => x"0c5c7080",
+1973 => x"d7b40c70",
+1974 => x"80d7b00c",
+1975 => x"80d7a80b",
+1976 => x"8c120c8c",
+1977 => x"11088812",
+1978 => x"0c778107",
+1979 => x"84120c77",
+1980 => x"0577710c",
+1981 => x"557c5183",
+1982 => x"a43f8816",
+1983 => x"54f5ba39",
+1984 => x"72168411",
+1985 => x"08810784",
+1986 => x"120c588c",
+1987 => x"16088817",
+1988 => x"08718c12",
+1989 => x"0c88120c",
+1990 => x"577c5183",
+1991 => x"803f8816",
+1992 => x"54f59639",
+1993 => x"7284150c",
+1994 => x"f41af806",
+1995 => x"70841d08",
+1996 => x"81060784",
+1997 => x"1d0c701c",
+1998 => x"5556850b",
+1999 => x"84150c85",
+2000 => x"0b88150c",
+2001 => x"8f7627fd",
+2002 => x"ab38881b",
+2003 => x"527c51eb",
+2004 => x"e83f80d7",
+2005 => x"a00b8805",
+2006 => x"0880d6e4",
+2007 => x"085a55fd",
+2008 => x"93397880",
+2009 => x"d6e40c73",
+2010 => x"80d7940c",
+2011 => x"fbef3972",
+2012 => x"84150cfc",
+2013 => x"ff39fb3d",
+2014 => x"0d77707a",
+2015 => x"7c585553",
+2016 => x"568f7527",
+2017 => x"80e63872",
+2018 => x"76078306",
+2019 => x"517080dc",
+2020 => x"38757352",
+2021 => x"54707084",
+2022 => x"05520874",
+2023 => x"70840556",
+2024 => x"0c737170",
+2025 => x"84055308",
+2026 => x"71708405",
+2027 => x"530c7170",
+2028 => x"84055308",
+2029 => x"71708405",
+2030 => x"530c7170",
+2031 => x"84055308",
+2032 => x"71708405",
+2033 => x"530cf016",
+2034 => x"5654748f",
+2035 => x"26c73883",
+2036 => x"75279538",
+2037 => x"70708405",
+2038 => x"52087470",
+2039 => x"8405560c",
+2040 => x"fc155574",
+2041 => x"8326ed38",
+2042 => x"73715452",
+2043 => x"ff155170",
+2044 => x"ff2e9838",
+2045 => x"72708105",
+2046 => x"54337270",
+2047 => x"81055434",
+2048 => x"ff115170",
+2049 => x"ff2e0981",
+2050 => x"06ea3875",
+2051 => x"800c873d",
+2052 => x"0d04fb3d",
+2053 => x"0d777a71",
+2054 => x"028c05a3",
+2055 => x"05335854",
+2056 => x"54568373",
+2057 => x"2780d438",
+2058 => x"75830651",
+2059 => x"7080cc38",
+2060 => x"74882b75",
+2061 => x"07707190",
+2062 => x"2b075551",
+2063 => x"8f7327a7",
+2064 => x"38737270",
+2065 => x"8405540c",
+2066 => x"71747170",
+2067 => x"8405530c",
+2068 => x"74717084",
+2069 => x"05530c74",
+2070 => x"71708405",
+2071 => x"530cf014",
+2072 => x"5452728f",
+2073 => x"26db3883",
+2074 => x"73279038",
+2075 => x"73727084",
+2076 => x"05540cfc",
+2077 => x"13537283",
+2078 => x"26f238ff",
+2079 => x"135170ff",
+2080 => x"2e933874",
+2081 => x"72708105",
+2082 => x"5434ff11",
+2083 => x"5170ff2e",
+2084 => x"098106ef",
+2085 => x"3875800c",
+2086 => x"873d0d04",
+2087 => x"04047070",
+2088 => x"7070800b",
+2089 => x"80dfe00c",
+2090 => x"765184f3",
+2091 => x"3f800853",
+2092 => x"8008ff2e",
+2093 => x"89387280",
+2094 => x"0c505050",
+2095 => x"500480df",
+2096 => x"e0085473",
+2097 => x"802eef38",
+2098 => x"7574710c",
+2099 => x"5272800c",
+2100 => x"50505050",
+2101 => x"04f93d0d",
+2102 => x"797c557b",
+2103 => x"548e1122",
+2104 => x"70902b70",
+2105 => x"902c5557",
+2106 => x"80cfe408",
+2107 => x"53585683",
+2108 => x"f63f8008",
+2109 => x"57800b80",
+2110 => x"08249338",
+2111 => x"80d01608",
+2112 => x"80080580",
+2113 => x"d0170c76",
+2114 => x"800c893d",
+2115 => x"0d048c16",
+2116 => x"2283dfff",
+2117 => x"0655748c",
+2118 => x"17237680",
+2119 => x"0c893d0d",
+2120 => x"04fa3d0d",
+2121 => x"788c1122",
+2122 => x"70882a70",
+2123 => x"81065157",
+2124 => x"585674a9",
+2125 => x"388c1622",
+2126 => x"83dfff06",
+2127 => x"55748c17",
+2128 => x"237a5479",
+2129 => x"538e1622",
+2130 => x"70902b70",
+2131 => x"902c5456",
+2132 => x"80cfe408",
+2133 => x"525681b2",
+2134 => x"3f883d0d",
+2135 => x"04825480",
+2136 => x"538e1622",
+2137 => x"70902b70",
+2138 => x"902c5456",
+2139 => x"80cfe408",
+2140 => x"525782bb",
+2141 => x"3f8c1622",
+2142 => x"83dfff06",
+2143 => x"55748c17",
+2144 => x"237a5479",
+2145 => x"538e1622",
+2146 => x"70902b70",
+2147 => x"902c5456",
+2148 => x"80cfe408",
+2149 => x"525680f2",
+2150 => x"3f883d0d",
+2151 => x"04f93d0d",
+2152 => x"797c557b",
+2153 => x"548e1122",
+2154 => x"70902b70",
+2155 => x"902c5557",
+2156 => x"80cfe408",
+2157 => x"53585681",
+2158 => x"f63f8008",
+2159 => x"578008ff",
+2160 => x"2e99388c",
+2161 => x"1622a080",
+2162 => x"0755748c",
+2163 => x"17238008",
+2164 => x"80d0170c",
+2165 => x"76800c89",
+2166 => x"3d0d048c",
+2167 => x"162283df",
+2168 => x"ff065574",
+2169 => x"8c172376",
+2170 => x"800c893d",
+2171 => x"0d047070",
+2172 => x"70748e11",
+2173 => x"2270902b",
+2174 => x"70902c55",
+2175 => x"51515380",
+2176 => x"cfe40851",
+2177 => x"bd3f5050",
+2178 => x"5004fb3d",
+2179 => x"0d800b80",
+2180 => x"dfe00c7a",
+2181 => x"53795278",
+2182 => x"5182ff3f",
+2183 => x"80085580",
+2184 => x"08ff2e88",
+2185 => x"3874800c",
+2186 => x"873d0d04",
+2187 => x"80dfe008",
+2188 => x"5675802e",
+2189 => x"f0387776",
+2190 => x"710c5474",
+2191 => x"800c873d",
+2192 => x"0d047070",
+2193 => x"7070800b",
+2194 => x"80dfe00c",
+2195 => x"765184cc",
+2196 => x"3f800853",
+2197 => x"8008ff2e",
+2198 => x"89387280",
+2199 => x"0c505050",
+2200 => x"500480df",
+2201 => x"e0085473",
+2202 => x"802eef38",
+2203 => x"7574710c",
+2204 => x"5272800c",
+2205 => x"50505050",
+2206 => x"04fc3d0d",
+2207 => x"800b80df",
+2208 => x"e00c7852",
+2209 => x"775187b3",
+2210 => x"3f800854",
+2211 => x"8008ff2e",
+2212 => x"88387380",
+2213 => x"0c863d0d",
+2214 => x"0480dfe0",
+2215 => x"08557480",
+2216 => x"2ef03876",
+2217 => x"75710c53",
+2218 => x"73800c86",
+2219 => x"3d0d04fb",
+2220 => x"3d0d800b",
+2221 => x"80dfe00c",
+2222 => x"7a537952",
+2223 => x"7851848e",
+2224 => x"3f800855",
+2225 => x"8008ff2e",
+2226 => x"88387480",
+2227 => x"0c873d0d",
+2228 => x"0480dfe0",
+2229 => x"08567580",
+2230 => x"2ef03877",
+2231 => x"76710c54",
+2232 => x"74800c87",
+2233 => x"3d0d04fb",
+2234 => x"3d0d800b",
+2235 => x"80dfe00c",
+2236 => x"7a537952",
+2237 => x"78518296",
+2238 => x"3f800855",
+2239 => x"8008ff2e",
+2240 => x"88387480",
+2241 => x"0c873d0d",
+2242 => x"0480dfe0",
+2243 => x"08567580",
+2244 => x"2ef03877",
+2245 => x"76710c54",
+2246 => x"74800c87",
+2247 => x"3d0d0470",
+2248 => x"707080df",
+2249 => x"d0088938",
+2250 => x"80dfe40b",
+2251 => x"80dfd00c",
+2252 => x"80dfd008",
+2253 => x"75115252",
+2254 => x"ff537087",
+2255 => x"fb808026",
+2256 => x"88387080",
+2257 => x"dfd00c71",
+2258 => x"5372800c",
+2259 => x"50505004",
+2260 => x"fd3d0d80",
+2261 => x"0b80cfd8",
+2262 => x"08545472",
+2263 => x"812e9b38",
+2264 => x"7380dfd4",
+2265 => x"0cc2bf3f",
+2266 => x"c1963f80",
+2267 => x"dfa85281",
+2268 => x"51c3fd3f",
+2269 => x"80085186",
+2270 => x"c23f7280",
+2271 => x"dfd40cc2",
+2272 => x"a53fc0fc",
+2273 => x"3f80dfa8",
+2274 => x"528151c3",
+2275 => x"e33f8008",
+2276 => x"5186a83f",
+2277 => x"00ff3900",
+2278 => x"ff39f53d",
+2279 => x"0d7e6080",
+2280 => x"dfd40870",
+2281 => x"5b585b5b",
+2282 => x"7580c238",
+2283 => x"777a25a1",
+2284 => x"38771b70",
+2285 => x"337081ff",
+2286 => x"06585859",
+2287 => x"758a2e98",
+2288 => x"387681ff",
+2289 => x"0651c1bd",
+2290 => x"3f811858",
+2291 => x"797824e1",
+2292 => x"3879800c",
+2293 => x"8d3d0d04",
+2294 => x"8d51c1a9",
+2295 => x"3f783370",
+2296 => x"81ff0652",
+2297 => x"57c19e3f",
+2298 => x"811858e0",
+2299 => x"3979557a",
+2300 => x"547d5385",
+2301 => x"528d3dfc",
+2302 => x"0551c0c6",
+2303 => x"3f800856",
+2304 => x"85b23f7b",
+2305 => x"80080c75",
+2306 => x"800c8d3d",
+2307 => x"0d04f63d",
+2308 => x"0d7d7f80",
+2309 => x"dfd40870",
+2310 => x"5b585a5a",
+2311 => x"7580c138",
+2312 => x"777925b3",
+2313 => x"38c0b93f",
+2314 => x"800881ff",
+2315 => x"06708d32",
+2316 => x"7030709f",
+2317 => x"2a515157",
+2318 => x"57768a2e",
+2319 => x"80c43875",
+2320 => x"802ebf38",
+2321 => x"771a5676",
+2322 => x"76347651",
+2323 => x"c0b73f81",
+2324 => x"18587878",
+2325 => x"24cf3877",
+2326 => x"5675800c",
+2327 => x"8c3d0d04",
+2328 => x"78557954",
+2329 => x"7c538452",
+2330 => x"8c3dfc05",
+2331 => x"51ffbfd2",
+2332 => x"3f800856",
+2333 => x"84be3f7a",
+2334 => x"80080c75",
+2335 => x"800c8c3d",
+2336 => x"0d04771a",
+2337 => x"598a7934",
+2338 => x"8118588d",
+2339 => x"51ffbff5",
+2340 => x"3f8a51ff",
+2341 => x"bfef3f77",
+2342 => x"56ffbe39",
+2343 => x"fb3d0d80",
+2344 => x"dfd40870",
+2345 => x"56547388",
+2346 => x"3874800c",
+2347 => x"873d0d04",
+2348 => x"77538352",
+2349 => x"873dfc05",
+2350 => x"51ffbf86",
+2351 => x"3f800854",
+2352 => x"83f23f75",
+2353 => x"80080c73",
+2354 => x"800c873d",
+2355 => x"0d04fa3d",
+2356 => x"0d80dfd4",
+2357 => x"08802ea3",
+2358 => x"387a5579",
+2359 => x"54785386",
+2360 => x"52883dfc",
+2361 => x"0551ffbe",
+2362 => x"d93f8008",
+2363 => x"5683c53f",
+2364 => x"7680080c",
+2365 => x"75800c88",
+2366 => x"3d0d0483",
+2367 => x"b73f9d0b",
+2368 => x"80080cff",
+2369 => x"0b800c88",
+2370 => x"3d0d04f7",
+2371 => x"3d0d7b7d",
+2372 => x"5b59bc53",
+2373 => x"80527951",
+2374 => x"f5f83f80",
+2375 => x"70565798",
+2376 => x"56741970",
+2377 => x"3370782b",
+2378 => x"79078118",
+2379 => x"f81a5a58",
+2380 => x"59555884",
+2381 => x"7524ea38",
+2382 => x"767a2384",
+2383 => x"19588070",
+2384 => x"56579856",
+2385 => x"74187033",
+2386 => x"70782b79",
+2387 => x"078118f8",
+2388 => x"1a5a5859",
+2389 => x"51548475",
+2390 => x"24ea3876",
+2391 => x"821b2388",
+2392 => x"19588070",
+2393 => x"56579856",
+2394 => x"74187033",
+2395 => x"70782b79",
+2396 => x"078118f8",
+2397 => x"1a5a5859",
+2398 => x"51548475",
+2399 => x"24ea3876",
+2400 => x"841b0c8c",
+2401 => x"19588070",
+2402 => x"56579856",
+2403 => x"74187033",
+2404 => x"70782b79",
+2405 => x"078118f8",
+2406 => x"1a5a5859",
+2407 => x"51548475",
+2408 => x"24ea3876",
+2409 => x"881b2390",
+2410 => x"19588070",
+2411 => x"56579856",
+2412 => x"74187033",
+2413 => x"70782b79",
+2414 => x"078118f8",
+2415 => x"1a5a5859",
+2416 => x"51548475",
+2417 => x"24ea3876",
+2418 => x"8a1b2394",
+2419 => x"19588070",
+2420 => x"56579856",
+2421 => x"74187033",
+2422 => x"70782b79",
+2423 => x"078118f8",
+2424 => x"1a5a5859",
+2425 => x"51548475",
+2426 => x"24ea3876",
+2427 => x"8c1b2398",
+2428 => x"19588070",
+2429 => x"56579856",
+2430 => x"74187033",
+2431 => x"70782b79",
+2432 => x"078118f8",
+2433 => x"1a5a5859",
+2434 => x"51548475",
+2435 => x"24ea3876",
+2436 => x"8e1b239c",
+2437 => x"19588070",
+2438 => x"5657b856",
+2439 => x"74187033",
+2440 => x"70782b79",
+2441 => x"078118f8",
+2442 => x"1a5a5859",
+2443 => x"5a548875",
+2444 => x"24ea3876",
+2445 => x"901b0c8b",
+2446 => x"3d0d04e9",
+2447 => x"3d0d6a80",
+2448 => x"dfd40857",
+2449 => x"57759338",
+2450 => x"80c0800b",
+2451 => x"84180c75",
+2452 => x"ac180c75",
+2453 => x"800c993d",
+2454 => x"0d04893d",
+2455 => x"70556a54",
+2456 => x"558a5299",
+2457 => x"3dffbc05",
+2458 => x"51ffbbd6",
+2459 => x"3f800877",
+2460 => x"53755256",
+2461 => x"fd953fbc",
+2462 => x"3f778008",
+2463 => x"0c75800c",
+2464 => x"993d0d04",
+2465 => x"fc3d0d81",
+2466 => x"5480dfd4",
+2467 => x"08883873",
+2468 => x"800c863d",
+2469 => x"0d047653",
+2470 => x"97b95286",
+2471 => x"3dfc0551",
+2472 => x"ffbb9f3f",
+2473 => x"8008548c",
+2474 => x"3f748008",
+2475 => x"0c73800c",
+2476 => x"863d0d04",
+2477 => x"80cfe408",
+2478 => x"800c04f7",
+2479 => x"3d0d7b80",
+2480 => x"cfe40882",
+2481 => x"c811085a",
+2482 => x"545a7780",
+2483 => x"2e80da38",
+2484 => x"81881884",
+2485 => x"1908ff05",
+2486 => x"81712b59",
+2487 => x"55598074",
+2488 => x"2480ea38",
+2489 => x"807424b5",
+2490 => x"3873822b",
+2491 => x"78118805",
+2492 => x"56568180",
+2493 => x"19087706",
+2494 => x"5372802e",
+2495 => x"b6387816",
+2496 => x"70085353",
+2497 => x"79517408",
+2498 => x"53722dff",
+2499 => x"14fc17fc",
+2500 => x"1779812c",
+2501 => x"5a575754",
+2502 => x"738025d6",
+2503 => x"38770858",
+2504 => x"77ffad38",
+2505 => x"80cfe408",
+2506 => x"53bc1308",
+2507 => x"a5387951",
+2508 => x"f8e23f74",
+2509 => x"0853722d",
+2510 => x"ff14fc17",
+2511 => x"fc177981",
+2512 => x"2c5a5757",
+2513 => x"54738025",
+2514 => x"ffa838d1",
+2515 => x"398057ff",
+2516 => x"93397251",
+2517 => x"bc130854",
+2518 => x"732d7951",
+2519 => x"f8b63f70",
+2520 => x"7080dfb0",
+2521 => x"0bfc0570",
+2522 => x"08525270",
+2523 => x"ff2e9138",
+2524 => x"702dfc12",
+2525 => x"70085252",
+2526 => x"70ff2e09",
+2527 => x"8106f138",
+2528 => x"50500404",
+2529 => x"ffbb8c3f",
+2530 => x"04000000",
+2531 => x"00000040",
+2532 => x"48656c6c",
+2533 => x"6f20776f",
+2534 => x"726c6420",
+2535 => x"310a0000",
+2536 => x"48656c6c",
+2537 => x"6f20776f",
+2538 => x"726c6420",
+2539 => x"320a0000",
+2540 => x"0a000000",
+2541 => x"43000000",
+2542 => x"64756d6d",
+2543 => x"792e6578",
+2544 => x"65000000",
+2545 => x"00ffffff",
+2546 => x"ff00ffff",
+2547 => x"ffff00ff",
+2548 => x"ffffff00",
+2549 => x"00000000",
+2550 => x"00000000",
+2551 => x"00000000",
+2552 => x"00002fb8",
+2553 => x"000027e8",
+2554 => x"00000000",
+2555 => x"00002a50",
+2556 => x"00002aac",
+2557 => x"00002b08",
+2558 => x"00000000",
+2559 => x"00000000",
+2560 => x"00000000",
+2561 => x"00000000",
+2562 => x"00000000",
+2563 => x"00000000",
+2564 => x"00000000",
+2565 => x"00000000",
+2566 => x"00000000",
+2567 => x"000027b4",
+2568 => x"00000000",
+2569 => x"00000000",
+2570 => x"00000000",
+2571 => x"00000000",
+2572 => x"00000000",
+2573 => x"00000000",
+2574 => x"00000000",
+2575 => x"00000000",
+2576 => x"00000000",
+2577 => x"00000000",
+2578 => x"00000000",
+2579 => x"00000000",
+2580 => x"00000000",
+2581 => x"00000000",
+2582 => x"00000000",
+2583 => x"00000000",
+2584 => x"00000000",
+2585 => x"00000000",
+2586 => x"00000000",
+2587 => x"00000000",
+2588 => x"00000000",
+2589 => x"00000000",
+2590 => x"00000000",
+2591 => x"00000000",
+2592 => x"00000000",
+2593 => x"00000000",
+2594 => x"00000000",
+2595 => x"00000000",
+2596 => x"00000001",
+2597 => x"330eabcd",
+2598 => x"1234e66d",
+2599 => x"deec0005",
+2600 => x"000b0000",
+2601 => x"00000000",
+2602 => x"00000000",
+2603 => x"00000000",
+2604 => x"00000000",
+2605 => x"00000000",
+2606 => x"00000000",
+2607 => x"00000000",
+2608 => x"00000000",
+2609 => x"00000000",
+2610 => x"00000000",
+2611 => x"00000000",
+2612 => x"00000000",
+2613 => x"00000000",
+2614 => x"00000000",
+2615 => x"00000000",
+2616 => x"00000000",
+2617 => x"00000000",
+2618 => x"00000000",
+2619 => x"00000000",
+2620 => x"00000000",
+2621 => x"00000000",
+2622 => x"00000000",
+2623 => x"00000000",
+2624 => x"00000000",
+2625 => x"00000000",
+2626 => x"00000000",
+2627 => x"00000000",
+2628 => x"00000000",
+2629 => x"00000000",
+2630 => x"00000000",
+2631 => x"00000000",
+2632 => x"00000000",
+2633 => x"00000000",
+2634 => x"00000000",
+2635 => x"00000000",
+2636 => x"00000000",
+2637 => x"00000000",
+2638 => x"00000000",
+2639 => x"00000000",
+2640 => x"00000000",
+2641 => x"00000000",
+2642 => x"00000000",
+2643 => x"00000000",
+2644 => x"00000000",
+2645 => x"00000000",
+2646 => x"00000000",
+2647 => x"00000000",
+2648 => x"00000000",
+2649 => x"00000000",
+2650 => x"00000000",
+2651 => x"00000000",
+2652 => x"00000000",
+2653 => x"00000000",
+2654 => x"00000000",
+2655 => x"00000000",
+2656 => x"00000000",
+2657 => x"00000000",
+2658 => x"00000000",
+2659 => x"00000000",
+2660 => x"00000000",
+2661 => x"00000000",
+2662 => x"00000000",
+2663 => x"00000000",
+2664 => x"00000000",
+2665 => x"00000000",
+2666 => x"00000000",
+2667 => x"00000000",
+2668 => x"00000000",
+2669 => x"00000000",
+2670 => x"00000000",
+2671 => x"00000000",
+2672 => x"00000000",
+2673 => x"00000000",
+2674 => x"00000000",
+2675 => x"00000000",
+2676 => x"00000000",
+2677 => x"00000000",
+2678 => x"00000000",
+2679 => x"00000000",
+2680 => x"00000000",
+2681 => x"00000000",
+2682 => x"00000000",
+2683 => x"00000000",
+2684 => x"00000000",
+2685 => x"00000000",
+2686 => x"00000000",
+2687 => x"00000000",
+2688 => x"00000000",
+2689 => x"00000000",
+2690 => x"00000000",
+2691 => x"00000000",
+2692 => x"00000000",
+2693 => x"00000000",
+2694 => x"00000000",
+2695 => x"00000000",
+2696 => x"00000000",
+2697 => x"00000000",
+2698 => x"00000000",
+2699 => x"00000000",
+2700 => x"00000000",
+2701 => x"00000000",
+2702 => x"00000000",
+2703 => x"00000000",
+2704 => x"00000000",
+2705 => x"00000000",
+2706 => x"00000000",
+2707 => x"00000000",
+2708 => x"00000000",
+2709 => x"00000000",
+2710 => x"00000000",
+2711 => x"00000000",
+2712 => x"00000000",
+2713 => x"00000000",
+2714 => x"00000000",
+2715 => x"00000000",
+2716 => x"00000000",
+2717 => x"00000000",
+2718 => x"00000000",
+2719 => x"00000000",
+2720 => x"00000000",
+2721 => x"00000000",
+2722 => x"00000000",
+2723 => x"00000000",
+2724 => x"00000000",
+2725 => x"00000000",
+2726 => x"00000000",
+2727 => x"00000000",
+2728 => x"00000000",
+2729 => x"00000000",
+2730 => x"00000000",
+2731 => x"00000000",
+2732 => x"00000000",
+2733 => x"00000000",
+2734 => x"00000000",
+2735 => x"00000000",
+2736 => x"00000000",
+2737 => x"00000000",
+2738 => x"00000000",
+2739 => x"00000000",
+2740 => x"00000000",
+2741 => x"00000000",
+2742 => x"00000000",
+2743 => x"00000000",
+2744 => x"00000000",
+2745 => x"00000000",
+2746 => x"00000000",
+2747 => x"00000000",
+2748 => x"00000000",
+2749 => x"00000000",
+2750 => x"00000000",
+2751 => x"00000000",
+2752 => x"00000000",
+2753 => x"00000000",
+2754 => x"00000000",
+2755 => x"00000000",
+2756 => x"00000000",
+2757 => x"00000000",
+2758 => x"00000000",
+2759 => x"00000000",
+2760 => x"00000000",
+2761 => x"00000000",
+2762 => x"00000000",
+2763 => x"00000000",
+2764 => x"00000000",
+2765 => x"00000000",
+2766 => x"00000000",
+2767 => x"00000000",
+2768 => x"00000000",
+2769 => x"00000000",
+2770 => x"00000000",
+2771 => x"00000000",
+2772 => x"00000000",
+2773 => x"00000000",
+2774 => x"00000000",
+2775 => x"00000000",
+2776 => x"00000000",
+2777 => x"00000000",
+2778 => x"00000000",
+2779 => x"00000000",
+2780 => x"00000000",
+2781 => x"00000000",
+2782 => x"00000000",
+2783 => x"00000000",
+2784 => x"00000000",
+2785 => x"00000000",
+2786 => x"00000000",
+2787 => x"00000000",
+2788 => x"00000000",
+2789 => x"ffffffff",
+2790 => x"00000000",
+2791 => x"00020000",
+2792 => x"00000000",
+2793 => x"00000000",
+2794 => x"00002ba0",
+2795 => x"00002ba0",
+2796 => x"00002ba8",
+2797 => x"00002ba8",
+2798 => x"00002bb0",
+2799 => x"00002bb0",
+2800 => x"00002bb8",
+2801 => x"00002bb8",
+2802 => x"00002bc0",
+2803 => x"00002bc0",
+2804 => x"00002bc8",
+2805 => x"00002bc8",
+2806 => x"00002bd0",
+2807 => x"00002bd0",
+2808 => x"00002bd8",
+2809 => x"00002bd8",
+2810 => x"00002be0",
+2811 => x"00002be0",
+2812 => x"00002be8",
+2813 => x"00002be8",
+2814 => x"00002bf0",
+2815 => x"00002bf0",
+2816 => x"00002bf8",
+2817 => x"00002bf8",
+2818 => x"00002c00",
+2819 => x"00002c00",
+2820 => x"00002c08",
+2821 => x"00002c08",
+2822 => x"00002c10",
+2823 => x"00002c10",
+2824 => x"00002c18",
+2825 => x"00002c18",
+2826 => x"00002c20",
+2827 => x"00002c20",
+2828 => x"00002c28",
+2829 => x"00002c28",
+2830 => x"00002c30",
+2831 => x"00002c30",
+2832 => x"00002c38",
+2833 => x"00002c38",
+2834 => x"00002c40",
+2835 => x"00002c40",
+2836 => x"00002c48",
+2837 => x"00002c48",
+2838 => x"00002c50",
+2839 => x"00002c50",
+2840 => x"00002c58",
+2841 => x"00002c58",
+2842 => x"00002c60",
+2843 => x"00002c60",
+2844 => x"00002c68",
+2845 => x"00002c68",
+2846 => x"00002c70",
+2847 => x"00002c70",
+2848 => x"00002c78",
+2849 => x"00002c78",
+2850 => x"00002c80",
+2851 => x"00002c80",
+2852 => x"00002c88",
+2853 => x"00002c88",
+2854 => x"00002c90",
+2855 => x"00002c90",
+2856 => x"00002c98",
+2857 => x"00002c98",
+2858 => x"00002ca0",
+2859 => x"00002ca0",
+2860 => x"00002ca8",
+2861 => x"00002ca8",
+2862 => x"00002cb0",
+2863 => x"00002cb0",
+2864 => x"00002cb8",
+2865 => x"00002cb8",
+2866 => x"00002cc0",
+2867 => x"00002cc0",
+2868 => x"00002cc8",
+2869 => x"00002cc8",
+2870 => x"00002cd0",
+2871 => x"00002cd0",
+2872 => x"00002cd8",
+2873 => x"00002cd8",
+2874 => x"00002ce0",
+2875 => x"00002ce0",
+2876 => x"00002ce8",
+2877 => x"00002ce8",
+2878 => x"00002cf0",
+2879 => x"00002cf0",
+2880 => x"00002cf8",
+2881 => x"00002cf8",
+2882 => x"00002d00",
+2883 => x"00002d00",
+2884 => x"00002d08",
+2885 => x"00002d08",
+2886 => x"00002d10",
+2887 => x"00002d10",
+2888 => x"00002d18",
+2889 => x"00002d18",
+2890 => x"00002d20",
+2891 => x"00002d20",
+2892 => x"00002d28",
+2893 => x"00002d28",
+2894 => x"00002d30",
+2895 => x"00002d30",
+2896 => x"00002d38",
+2897 => x"00002d38",
+2898 => x"00002d40",
+2899 => x"00002d40",
+2900 => x"00002d48",
+2901 => x"00002d48",
+2902 => x"00002d50",
+2903 => x"00002d50",
+2904 => x"00002d58",
+2905 => x"00002d58",
+2906 => x"00002d60",
+2907 => x"00002d60",
+2908 => x"00002d68",
+2909 => x"00002d68",
+2910 => x"00002d70",
+2911 => x"00002d70",
+2912 => x"00002d78",
+2913 => x"00002d78",
+2914 => x"00002d80",
+2915 => x"00002d80",
+2916 => x"00002d88",
+2917 => x"00002d88",
+2918 => x"00002d90",
+2919 => x"00002d90",
+2920 => x"00002d98",
+2921 => x"00002d98",
+2922 => x"00002da0",
+2923 => x"00002da0",
+2924 => x"00002da8",
+2925 => x"00002da8",
+2926 => x"00002db0",
+2927 => x"00002db0",
+2928 => x"00002db8",
+2929 => x"00002db8",
+2930 => x"00002dc0",
+2931 => x"00002dc0",
+2932 => x"00002dc8",
+2933 => x"00002dc8",
+2934 => x"00002dd0",
+2935 => x"00002dd0",
+2936 => x"00002dd8",
+2937 => x"00002dd8",
+2938 => x"00002de0",
+2939 => x"00002de0",
+2940 => x"00002de8",
+2941 => x"00002de8",
+2942 => x"00002df0",
+2943 => x"00002df0",
+2944 => x"00002df8",
+2945 => x"00002df8",
+2946 => x"00002e00",
+2947 => x"00002e00",
+2948 => x"00002e08",
+2949 => x"00002e08",
+2950 => x"00002e10",
+2951 => x"00002e10",
+2952 => x"00002e18",
+2953 => x"00002e18",
+2954 => x"00002e20",
+2955 => x"00002e20",
+2956 => x"00002e28",
+2957 => x"00002e28",
+2958 => x"00002e30",
+2959 => x"00002e30",
+2960 => x"00002e38",
+2961 => x"00002e38",
+2962 => x"00002e40",
+2963 => x"00002e40",
+2964 => x"00002e48",
+2965 => x"00002e48",
+2966 => x"00002e50",
+2967 => x"00002e50",
+2968 => x"00002e58",
+2969 => x"00002e58",
+2970 => x"00002e60",
+2971 => x"00002e60",
+2972 => x"00002e68",
+2973 => x"00002e68",
+2974 => x"00002e70",
+2975 => x"00002e70",
+2976 => x"00002e78",
+2977 => x"00002e78",
+2978 => x"00002e80",
+2979 => x"00002e80",
+2980 => x"00002e88",
+2981 => x"00002e88",
+2982 => x"00002e90",
+2983 => x"00002e90",
+2984 => x"00002e98",
+2985 => x"00002e98",
+2986 => x"00002ea0",
+2987 => x"00002ea0",
+2988 => x"00002ea8",
+2989 => x"00002ea8",
+2990 => x"00002eb0",
+2991 => x"00002eb0",
+2992 => x"00002eb8",
+2993 => x"00002eb8",
+2994 => x"00002ec0",
+2995 => x"00002ec0",
+2996 => x"00002ec8",
+2997 => x"00002ec8",
+2998 => x"00002ed0",
+2999 => x"00002ed0",
+3000 => x"00002ed8",
+3001 => x"00002ed8",
+3002 => x"00002ee0",
+3003 => x"00002ee0",
+3004 => x"00002ee8",
+3005 => x"00002ee8",
+3006 => x"00002ef0",
+3007 => x"00002ef0",
+3008 => x"00002ef8",
+3009 => x"00002ef8",
+3010 => x"00002f00",
+3011 => x"00002f00",
+3012 => x"00002f08",
+3013 => x"00002f08",
+3014 => x"00002f10",
+3015 => x"00002f10",
+3016 => x"00002f18",
+3017 => x"00002f18",
+3018 => x"00002f20",
+3019 => x"00002f20",
+3020 => x"00002f28",
+3021 => x"00002f28",
+3022 => x"00002f30",
+3023 => x"00002f30",
+3024 => x"00002f38",
+3025 => x"00002f38",
+3026 => x"00002f40",
+3027 => x"00002f40",
+3028 => x"00002f48",
+3029 => x"00002f48",
+3030 => x"00002f50",
+3031 => x"00002f50",
+3032 => x"00002f58",
+3033 => x"00002f58",
+3034 => x"00002f60",
+3035 => x"00002f60",
+3036 => x"00002f68",
+3037 => x"00002f68",
+3038 => x"00002f70",
+3039 => x"00002f70",
+3040 => x"00002f78",
+3041 => x"00002f78",
+3042 => x"00002f80",
+3043 => x"00002f80",
+3044 => x"00002f88",
+3045 => x"00002f88",
+3046 => x"00002f90",
+3047 => x"00002f90",
+3048 => x"00002f98",
+3049 => x"00002f98",
+3050 => x"000027b8",
+3051 => x"ffffffff",
+3052 => x"00000000",
+3053 => x"ffffffff",
+3054 => x"00000000",
+ others => x"00000000"
+);
+
+begin
+
+process (clk)
+begin
+ if (clk'event and clk = '1') then
+ if (memAWriteEnable = '1') and (memBWriteEnable = '1') and (memAAddr=memBAddr) and (memAWrite/=memBWrite) then
+ report "write collision" severity failure;
+ end if;
+
+ if (memAWriteEnable = '1') then
+ ram(to_integer(unsigned(memAAddr))) := memAWrite;
+ memARead <= memAWrite;
+ else
+ memARead <= ram(to_integer(unsigned(memAAddr)));
+ end if;
+ end if;
+end process;
+
+process (clk)
+begin
+ if (clk'event and clk = '1') then
+ if (memBWriteEnable = '1') then
+ ram(to_integer(unsigned(memBAddr))) := memBWrite;
+ memBRead <= memBWrite;
+ else
+ memBRead <= ram(to_integer(unsigned(memBAddr)));
+ end if;
+ end if;
+end process;
+
+
+
+
+end dualport_ram_arch;
diff --git a/zpu/hdl/example/interrupt.vhd b/zpu/hdl/example/interrupt.vhd
index ededf85..d2bc709 100644
--- a/zpu/hdl/example/interrupt.vhd
+++ b/zpu/hdl/example/interrupt.vhd
@@ -1,3156 +1,3156 @@
--- ZPU
---
--- Copyright 2004-2008 oharboe - Øyvind Harboe - oyvind.harboe@zylin.com
---
--- The FreeBSD license
---
--- Redistribution and use in source and binary forms, with or without
--- modification, are permitted provided that the following conditions
--- are met:
---
--- 1. Redistributions of source code must retain the above copyright
--- notice, this list of conditions and the following disclaimer.
--- 2. Redistributions in binary form must reproduce the above
--- copyright notice, this list of conditions and the following
--- disclaimer in the documentation and/or other materials
--- provided with the distribution.
---
--- THIS SOFTWARE IS PROVIDED BY THE ZPU PROJECT ``AS IS'' AND ANY
--- EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
--- THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
--- PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
--- ZPU PROJECT OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
--- INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
--- (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
--- OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
--- HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
--- STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
--- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
--- ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
---
--- The views and conclusions contained in the software and documentation
--- are those of the authors and should not be interpreted as representing
--- official policies, either expressed or implied, of the ZPU Project.
-
-library ieee;
-use ieee.std_logic_1164.all;
-use ieee.numeric_std.all;
-
-
-library work;
-use work.zpu_config.all;
-use work.zpupkg.all;
-
-entity dualport_ram is
-port (clk : in std_logic;
- memAWriteEnable : in std_logic;
- memAAddr : in std_logic_vector(maxAddrBitBRAM downto minAddrBit);
- memAWrite : in std_logic_vector(wordSize-1 downto 0);
- memARead : out std_logic_vector(wordSize-1 downto 0);
- memBWriteEnable : in std_logic;
- memBAddr : in std_logic_vector(maxAddrBitBRAM downto minAddrBit);
- memBWrite : in std_logic_vector(wordSize-1 downto 0);
- memBRead : out std_logic_vector(wordSize-1 downto 0));
-end dualport_ram;
-
-architecture dualport_ram_arch of dualport_ram is
-
-
-type ram_type is array(natural range 0 to ((2**(maxAddrBitBRAM+1))/4)-1) of std_logic_vector(wordSize-1 downto 0);
-
-shared variable ram : ram_type :=
-(
-0 => x"0b0b0b0b",
-1 => x"82700b0b",
-2 => x"80cfe00c",
-3 => x"3a0b0b80",
-4 => x"c6e00400",
-5 => x"00000000",
-6 => x"00000000",
-7 => x"00000000",
-8 => x"80088408",
-9 => x"88080b0b",
-10 => x"0b8af02d",
-11 => x"880c840c",
-12 => x"800c0400",
-13 => x"00000000",
-14 => x"00000000",
-15 => x"00000000",
-16 => x"71fd0608",
-17 => x"72830609",
-18 => x"81058205",
-19 => x"832b2a83",
-20 => x"ffff0652",
-21 => x"04000000",
-22 => x"00000000",
-23 => x"00000000",
-24 => x"71fd0608",
-25 => x"83ffff73",
-26 => x"83060981",
-27 => x"05820583",
-28 => x"2b2b0906",
-29 => x"7383ffff",
-30 => x"0b0b0b0b",
-31 => x"83a70400",
-32 => x"72098105",
-33 => x"72057373",
-34 => x"09060906",
-35 => x"73097306",
-36 => x"070a8106",
-37 => x"53510400",
-38 => x"00000000",
-39 => x"00000000",
-40 => x"72722473",
-41 => x"732e0753",
-42 => x"51040000",
-43 => x"00000000",
-44 => x"00000000",
-45 => x"00000000",
-46 => x"00000000",
-47 => x"00000000",
-48 => x"71737109",
-49 => x"71068106",
-50 => x"30720a10",
-51 => x"0a720a10",
-52 => x"0a31050a",
-53 => x"81065151",
-54 => x"53510400",
-55 => x"00000000",
-56 => x"72722673",
-57 => x"732e0753",
-58 => x"51040000",
-59 => x"00000000",
-60 => x"00000000",
-61 => x"00000000",
-62 => x"00000000",
-63 => x"00000000",
-64 => x"00000000",
-65 => x"00000000",
-66 => x"00000000",
-67 => x"00000000",
-68 => x"00000000",
-69 => x"00000000",
-70 => x"00000000",
-71 => x"00000000",
-72 => x"0b0b0b88",
-73 => x"c4040000",
-74 => x"00000000",
-75 => x"00000000",
-76 => x"00000000",
-77 => x"00000000",
-78 => x"00000000",
-79 => x"00000000",
-80 => x"720a722b",
-81 => x"0a535104",
-82 => x"00000000",
-83 => x"00000000",
-84 => x"00000000",
-85 => x"00000000",
-86 => x"00000000",
-87 => x"00000000",
-88 => x"72729f06",
-89 => x"0981050b",
-90 => x"0b0b88a7",
-91 => x"05040000",
-92 => x"00000000",
-93 => x"00000000",
-94 => x"00000000",
-95 => x"00000000",
-96 => x"72722aff",
-97 => x"739f062a",
-98 => x"0974090a",
-99 => x"8106ff05",
-100 => x"06075351",
-101 => x"04000000",
-102 => x"00000000",
-103 => x"00000000",
-104 => x"71715351",
-105 => x"020d0406",
-106 => x"73830609",
-107 => x"81058205",
-108 => x"832b0b2b",
-109 => x"0772fc06",
-110 => x"0c515104",
-111 => x"00000000",
-112 => x"72098105",
-113 => x"72050970",
-114 => x"81050906",
-115 => x"0a810653",
-116 => x"51040000",
-117 => x"00000000",
-118 => x"00000000",
-119 => x"00000000",
-120 => x"72098105",
-121 => x"72050970",
-122 => x"81050906",
-123 => x"0a098106",
-124 => x"53510400",
-125 => x"00000000",
-126 => x"00000000",
-127 => x"00000000",
-128 => x"71098105",
-129 => x"52040000",
-130 => x"00000000",
-131 => x"00000000",
-132 => x"00000000",
-133 => x"00000000",
-134 => x"00000000",
-135 => x"00000000",
-136 => x"72720981",
-137 => x"05055351",
-138 => x"04000000",
-139 => x"00000000",
-140 => x"00000000",
-141 => x"00000000",
-142 => x"00000000",
-143 => x"00000000",
-144 => x"72097206",
-145 => x"73730906",
-146 => x"07535104",
-147 => x"00000000",
-148 => x"00000000",
-149 => x"00000000",
-150 => x"00000000",
-151 => x"00000000",
-152 => x"71fc0608",
-153 => x"72830609",
-154 => x"81058305",
-155 => x"1010102a",
-156 => x"81ff0652",
-157 => x"04000000",
-158 => x"00000000",
-159 => x"00000000",
-160 => x"71fc0608",
-161 => x"0b0b80cf",
-162 => x"cc738306",
-163 => x"10100508",
-164 => x"060b0b0b",
-165 => x"88aa0400",
-166 => x"00000000",
-167 => x"00000000",
-168 => x"80088408",
-169 => x"88087575",
-170 => x"0b0b0b8b",
-171 => x"ab2d5050",
-172 => x"80085688",
-173 => x"0c840c80",
-174 => x"0c510400",
-175 => x"00000000",
-176 => x"80088408",
-177 => x"88087575",
-178 => x"0b0b0b8b",
-179 => x"ef2d5050",
-180 => x"80085688",
-181 => x"0c840c80",
-182 => x"0c510400",
-183 => x"00000000",
-184 => x"72097081",
-185 => x"0509060a",
-186 => x"8106ff05",
-187 => x"70547106",
-188 => x"73097274",
-189 => x"05ff0506",
-190 => x"07515151",
-191 => x"04000000",
-192 => x"72097081",
-193 => x"0509060a",
-194 => x"098106ff",
-195 => x"05705471",
-196 => x"06730972",
-197 => x"7405ff05",
-198 => x"06075151",
-199 => x"51040000",
-200 => x"05ff0504",
-201 => x"00000000",
-202 => x"00000000",
-203 => x"00000000",
-204 => x"00000000",
-205 => x"00000000",
-206 => x"00000000",
-207 => x"00000000",
-208 => x"810b0b0b",
-209 => x"80cfdc0c",
-210 => x"51040000",
-211 => x"00000000",
-212 => x"00000000",
-213 => x"00000000",
-214 => x"00000000",
-215 => x"00000000",
-216 => x"71810552",
-217 => x"04000000",
-218 => x"00000000",
-219 => x"00000000",
-220 => x"00000000",
-221 => x"00000000",
-222 => x"00000000",
-223 => x"00000000",
-224 => x"00000000",
-225 => x"00000000",
-226 => x"00000000",
-227 => x"00000000",
-228 => x"00000000",
-229 => x"00000000",
-230 => x"00000000",
-231 => x"00000000",
-232 => x"02840572",
-233 => x"10100552",
-234 => x"04000000",
-235 => x"00000000",
-236 => x"00000000",
-237 => x"00000000",
-238 => x"00000000",
-239 => x"00000000",
-240 => x"00000000",
-241 => x"00000000",
-242 => x"00000000",
-243 => x"00000000",
-244 => x"00000000",
-245 => x"00000000",
-246 => x"00000000",
-247 => x"00000000",
-248 => x"717105ff",
-249 => x"05715351",
-250 => x"020d0400",
-251 => x"00000000",
-252 => x"00000000",
-253 => x"00000000",
-254 => x"00000000",
-255 => x"00000000",
-256 => x"82c53f80",
-257 => x"c6e63f04",
-258 => x"10101010",
-259 => x"10101010",
-260 => x"10101010",
-261 => x"10101010",
-262 => x"10101010",
-263 => x"10101010",
-264 => x"10101010",
-265 => x"10101053",
-266 => x"51047381",
-267 => x"ff067383",
-268 => x"06098105",
-269 => x"83051010",
-270 => x"102b0772",
-271 => x"fc060c51",
-272 => x"51043c04",
-273 => x"72728072",
-274 => x"8106ff05",
-275 => x"09720605",
-276 => x"71105272",
-277 => x"0a100a53",
-278 => x"72ed3851",
-279 => x"51535104",
-280 => x"fe3d0d0b",
-281 => x"0b80dfc8",
-282 => x"08538413",
-283 => x"0870882a",
-284 => x"70810651",
-285 => x"52527080",
-286 => x"2ef03871",
-287 => x"81ff0680",
-288 => x"0c843d0d",
-289 => x"04ff3d0d",
-290 => x"0b0b80df",
-291 => x"c8085271",
-292 => x"0870882a",
-293 => x"81327081",
-294 => x"06515151",
-295 => x"70f13873",
-296 => x"720c833d",
-297 => x"0d0480cf",
-298 => x"dc08802e",
-299 => x"a43880cf",
-300 => x"e008822e",
-301 => x"bd388380",
-302 => x"800b0b0b",
-303 => x"80dfc80c",
-304 => x"82a0800b",
-305 => x"80dfcc0c",
-306 => x"8290800b",
-307 => x"80dfd00c",
-308 => x"04f88080",
-309 => x"80a40b0b",
-310 => x"0b80dfc8",
-311 => x"0cf88080",
-312 => x"82800b80",
-313 => x"dfcc0cf8",
-314 => x"80808480",
-315 => x"0b80dfd0",
-316 => x"0c0480c0",
-317 => x"a8808c0b",
-318 => x"0b0b80df",
-319 => x"c80c80c0",
-320 => x"a880940b",
-321 => x"80dfcc0c",
-322 => x"0b0b80cf",
-323 => x"980b80df",
-324 => x"d00c0470",
-325 => x"7080dfd4",
-326 => x"335170a7",
-327 => x"3880cfe8",
-328 => x"08700852",
-329 => x"5270802e",
-330 => x"94388412",
-331 => x"80cfe80c",
-332 => x"702d80cf",
-333 => x"e8087008",
-334 => x"525270ee",
-335 => x"38810b80",
-336 => x"dfd43450",
-337 => x"50040470",
-338 => x"0b0b80df",
-339 => x"c408802e",
-340 => x"8e380b0b",
-341 => x"0b0b800b",
-342 => x"802e0981",
-343 => x"06833850",
-344 => x"040b0b80",
-345 => x"dfc4510b",
-346 => x"0b0bf594",
-347 => x"3f500404",
-348 => x"803d0d80",
-349 => x"dfe00881",
-350 => x"1180dfe0",
-351 => x"0c51823d",
-352 => x"0d04fe3d",
-353 => x"0d80dfe0",
-354 => x"085380df",
-355 => x"e0085272",
-356 => x"722e8f38",
-357 => x"80cf9c51",
-358 => x"82b03f80",
-359 => x"dfe00853",
-360 => x"e93980cf",
-361 => x"ac5182a2",
-362 => x"3fe039fb",
-363 => x"3d0d7779",
-364 => x"55558056",
-365 => x"757524ab",
-366 => x"38807424",
-367 => x"9d388053",
-368 => x"73527451",
-369 => x"80e13f80",
-370 => x"08547580",
-371 => x"2e853880",
-372 => x"08305473",
-373 => x"800c873d",
-374 => x"0d047330",
-375 => x"76813257",
-376 => x"54dc3974",
-377 => x"30558156",
-378 => x"738025d2",
-379 => x"38ec39fa",
-380 => x"3d0d787a",
-381 => x"57558057",
-382 => x"767524a4",
-383 => x"38759f2c",
-384 => x"54815375",
-385 => x"74327431",
-386 => x"5274519b",
-387 => x"3f800854",
-388 => x"76802e85",
-389 => x"38800830",
-390 => x"5473800c",
-391 => x"883d0d04",
-392 => x"74305581",
-393 => x"57d739fc",
-394 => x"3d0d7678",
-395 => x"53548153",
-396 => x"80747326",
-397 => x"52557280",
-398 => x"2e983870",
-399 => x"802eab38",
-400 => x"807224a6",
-401 => x"38711073",
-402 => x"10757226",
-403 => x"53545272",
-404 => x"ea387351",
-405 => x"78833874",
-406 => x"5170800c",
-407 => x"863d0d04",
-408 => x"720a100a",
-409 => x"720a100a",
-410 => x"53537280",
-411 => x"2ee43871",
-412 => x"7426ed38",
-413 => x"73723175",
-414 => x"7407740a",
-415 => x"100a740a",
-416 => x"100a5555",
-417 => x"5654e339",
-418 => x"f73d0d7c",
-419 => x"70525380",
-420 => x"fd3f7254",
-421 => x"8008550b",
-422 => x"0b80cfb8",
-423 => x"56815780",
-424 => x"0881055a",
-425 => x"8b3de411",
-426 => x"59538259",
-427 => x"f413527b",
-428 => x"88110852",
-429 => x"5381b43f",
-430 => x"80083070",
-431 => x"8008079f",
-432 => x"2c8a0780",
-433 => x"0c538b3d",
-434 => x"0d04f63d",
-435 => x"0d7c80cf",
-436 => x"ec087153",
-437 => x"5553b73f",
-438 => x"72558008",
-439 => x"560b0b80",
-440 => x"cfb85781",
-441 => x"58800881",
-442 => x"055b8c3d",
-443 => x"e4115a53",
-444 => x"825af413",
-445 => x"52881408",
-446 => x"5180f03f",
-447 => x"80083070",
-448 => x"8008079f",
-449 => x"2c8a0780",
-450 => x"0c548c3d",
-451 => x"0d047070",
-452 => x"70707570",
-453 => x"71830653",
-454 => x"555270b4",
-455 => x"38717008",
-456 => x"7009f7fb",
-457 => x"fdff1206",
-458 => x"f8848281",
-459 => x"80065452",
-460 => x"53719b38",
-461 => x"84137008",
-462 => x"7009f7fb",
-463 => x"fdff1206",
-464 => x"f8848281",
-465 => x"80065452",
-466 => x"5371802e",
-467 => x"e7387252",
-468 => x"71335372",
-469 => x"802e8a38",
-470 => x"81127033",
-471 => x"545272f8",
-472 => x"38717431",
-473 => x"800c5050",
-474 => x"505004f2",
-475 => x"3d0d6062",
-476 => x"88110870",
-477 => x"58565f5a",
-478 => x"73802e81",
-479 => x"8c388c1a",
-480 => x"2270832a",
-481 => x"81328106",
-482 => x"56587486",
-483 => x"38901a08",
-484 => x"91387951",
-485 => x"90b73fff",
-486 => x"55800880",
-487 => x"ec388c1a",
-488 => x"22587d08",
-489 => x"55807883",
-490 => x"ffff0670",
-491 => x"0a100a81",
-492 => x"06415c57",
-493 => x"7e772e80",
-494 => x"d7387690",
-495 => x"38740884",
-496 => x"16088817",
-497 => x"57585676",
-498 => x"802ef238",
-499 => x"76548880",
-500 => x"77278438",
-501 => x"88805473",
-502 => x"5375529c",
-503 => x"1a0851a4",
-504 => x"1a085877",
-505 => x"2d800b80",
-506 => x"082582e0",
-507 => x"38800816",
-508 => x"77800831",
-509 => x"7f880508",
-510 => x"80083170",
-511 => x"6188050c",
-512 => x"5b585678",
-513 => x"ffb43880",
-514 => x"5574800c",
-515 => x"903d0d04",
-516 => x"7a813281",
-517 => x"06774056",
-518 => x"75802e81",
-519 => x"bd387690",
-520 => x"38740884",
-521 => x"16088817",
-522 => x"57585976",
-523 => x"802ef238",
-524 => x"881a0878",
-525 => x"83ffff06",
-526 => x"70892a81",
-527 => x"06565956",
-528 => x"73802e82",
-529 => x"f8387577",
-530 => x"278b3877",
-531 => x"872a8106",
-532 => x"5c7b82b5",
-533 => x"38767627",
-534 => x"83387656",
-535 => x"75537852",
-536 => x"79085185",
-537 => x"833f881a",
-538 => x"08763188",
-539 => x"1b0c7908",
-540 => x"167a0c76",
-541 => x"56751977",
-542 => x"77317f88",
-543 => x"05087831",
-544 => x"70618805",
-545 => x"0c415859",
-546 => x"7e802efe",
-547 => x"fa388c1a",
-548 => x"2258ff8a",
-549 => x"39787954",
-550 => x"7c537b52",
-551 => x"5684c93f",
-552 => x"881a0879",
-553 => x"31881b0c",
-554 => x"7908197a",
-555 => x"0c7c7631",
-556 => x"5d7c8e38",
-557 => x"79518ff2",
-558 => x"3f800881",
-559 => x"8f388008",
-560 => x"5f751c77",
-561 => x"77317f88",
-562 => x"05087831",
-563 => x"70618805",
-564 => x"0c5d585c",
-565 => x"7a802efe",
-566 => x"ae387681",
-567 => x"83387408",
-568 => x"84160888",
-569 => x"1757585c",
-570 => x"76802ef2",
-571 => x"3876538a",
-572 => x"527b5182",
-573 => x"d33f8008",
-574 => x"7c318105",
-575 => x"5d800884",
-576 => x"3881175d",
-577 => x"815f7c59",
-578 => x"767d2783",
-579 => x"38765994",
-580 => x"1a08881b",
-581 => x"08115758",
-582 => x"807a085c",
-583 => x"54901a08",
-584 => x"7b278338",
-585 => x"81547579",
-586 => x"25843873",
-587 => x"ba387779",
-588 => x"24fee238",
-589 => x"77537b52",
-590 => x"9c1a0851",
-591 => x"a41a0859",
-592 => x"782d8008",
-593 => x"56800880",
-594 => x"24fee238",
-595 => x"8c1a2280",
-596 => x"c0075e7d",
-597 => x"8c1b23ff",
-598 => x"5574800c",
-599 => x"903d0d04",
-600 => x"7effa338",
-601 => x"ff873975",
-602 => x"537b527a",
-603 => x"5182f93f",
-604 => x"7908167a",
-605 => x"0c79518e",
-606 => x"b13f8008",
-607 => x"cf387c76",
-608 => x"315d7cfe",
-609 => x"bc38feac",
-610 => x"39901a08",
-611 => x"7a087131",
-612 => x"78117056",
-613 => x"5a575280",
-614 => x"cfec0851",
-615 => x"84943f80",
-616 => x"08802eff",
-617 => x"a7388008",
-618 => x"901b0c80",
-619 => x"08167a0c",
-620 => x"77941b0c",
-621 => x"76881b0c",
-622 => x"7656fd99",
-623 => x"39790858",
-624 => x"901a0878",
-625 => x"27833881",
-626 => x"54757727",
-627 => x"843873b3",
-628 => x"38941a08",
-629 => x"54737726",
-630 => x"80d33873",
-631 => x"5378529c",
-632 => x"1a0851a4",
-633 => x"1a085877",
-634 => x"2d800856",
-635 => x"80088024",
-636 => x"fd83388c",
-637 => x"1a2280c0",
-638 => x"075e7d8c",
-639 => x"1b23ff55",
-640 => x"fed73975",
-641 => x"53785277",
-642 => x"5181dd3f",
-643 => x"7908167a",
-644 => x"0c79518d",
-645 => x"953f8008",
-646 => x"802efcd9",
-647 => x"388c1a22",
-648 => x"80c0075e",
-649 => x"7d8c1b23",
-650 => x"ff55fead",
-651 => x"39767754",
-652 => x"79537852",
-653 => x"5681b13f",
-654 => x"881a0877",
-655 => x"31881b0c",
-656 => x"7908177a",
-657 => x"0cfcae39",
-658 => x"fa3d0d7a",
-659 => x"79028805",
-660 => x"a7053355",
-661 => x"53548374",
-662 => x"2780df38",
-663 => x"71830651",
-664 => x"7080d738",
-665 => x"71715755",
-666 => x"83517582",
-667 => x"802913ff",
-668 => x"12525670",
-669 => x"8025f338",
-670 => x"837427bc",
-671 => x"38740876",
-672 => x"327009f7",
-673 => x"fbfdff12",
-674 => x"06f88482",
-675 => x"81800651",
-676 => x"5170802e",
-677 => x"98387451",
-678 => x"80527033",
-679 => x"5772772e",
-680 => x"b9388111",
-681 => x"81135351",
-682 => x"837227ee",
-683 => x"38fc1484",
-684 => x"16565473",
-685 => x"8326c638",
-686 => x"7452ff14",
-687 => x"5170ff2e",
-688 => x"97387133",
-689 => x"5472742e",
-690 => x"98388112",
-691 => x"ff125252",
-692 => x"70ff2e09",
-693 => x"8106eb38",
-694 => x"80517080",
-695 => x"0c883d0d",
-696 => x"0471800c",
-697 => x"883d0d04",
-698 => x"fa3d0d78",
-699 => x"7a7c7272",
-700 => x"72595755",
-701 => x"58565774",
-702 => x"7727b238",
-703 => x"75155176",
-704 => x"7127aa38",
-705 => x"707618ff",
-706 => x"18535353",
-707 => x"70ff2e96",
-708 => x"38ff12ff",
-709 => x"14545272",
-710 => x"337234ff",
-711 => x"115170ff",
-712 => x"2e098106",
-713 => x"ec387680",
-714 => x"0c883d0d",
-715 => x"048f7627",
-716 => x"80e63874",
-717 => x"77078306",
-718 => x"517080dc",
-719 => x"38767552",
-720 => x"53707084",
-721 => x"05520873",
-722 => x"70840555",
-723 => x"0c727170",
-724 => x"84055308",
-725 => x"71708405",
-726 => x"530c7170",
-727 => x"84055308",
-728 => x"71708405",
-729 => x"530c7170",
-730 => x"84055308",
-731 => x"71708405",
-732 => x"530cf015",
-733 => x"5553738f",
-734 => x"26c73883",
-735 => x"74279538",
-736 => x"70708405",
-737 => x"52087370",
-738 => x"8405550c",
-739 => x"fc145473",
-740 => x"8326ed38",
-741 => x"72715452",
-742 => x"ff145170",
-743 => x"ff2eff86",
-744 => x"38727081",
-745 => x"05543372",
-746 => x"70810554",
-747 => x"34ff1151",
-748 => x"ea39ef3d",
-749 => x"0d636567",
-750 => x"405d427b",
-751 => x"802e8582",
-752 => x"386151a9",
-753 => x"e73ff81c",
-754 => x"70841208",
-755 => x"70fc0670",
-756 => x"628b0570",
-757 => x"f8064159",
-758 => x"455c5f41",
-759 => x"57967427",
-760 => x"82c53880",
-761 => x"7b247e7c",
-762 => x"26075880",
-763 => x"5477742e",
-764 => x"09810682",
-765 => x"ab38787b",
-766 => x"2581fe38",
-767 => x"781780d7",
-768 => x"a80b8805",
-769 => x"085b5679",
-770 => x"762e84c5",
-771 => x"38841608",
-772 => x"70fe0617",
-773 => x"84110881",
-774 => x"06415555",
-775 => x"7e828d38",
-776 => x"74fc0658",
-777 => x"79762e84",
-778 => x"e3387818",
-779 => x"5f7e7b25",
-780 => x"81ff387c",
-781 => x"81065473",
-782 => x"82c13876",
-783 => x"77083184",
-784 => x"1108fc06",
-785 => x"56577580",
-786 => x"2e913879",
-787 => x"762e84f0",
-788 => x"38741819",
-789 => x"58777b25",
-790 => x"84913876",
-791 => x"802e829b",
-792 => x"38781556",
-793 => x"7a762482",
-794 => x"92388c17",
-795 => x"08881808",
-796 => x"718c120c",
-797 => x"88120c5e",
-798 => x"75598817",
-799 => x"61fc055b",
-800 => x"5679a426",
-801 => x"85ff387b",
-802 => x"76595593",
-803 => x"7a2780c9",
-804 => x"387b7084",
-805 => x"055d087c",
-806 => x"56760c74",
-807 => x"70840556",
-808 => x"088c180c",
-809 => x"9017589b",
-810 => x"7a27ae38",
-811 => x"74708405",
-812 => x"5608780c",
-813 => x"74708405",
-814 => x"56089418",
-815 => x"0c981758",
-816 => x"a37a2795",
-817 => x"38747084",
-818 => x"05560878",
-819 => x"0c747084",
-820 => x"0556089c",
-821 => x"180ca017",
-822 => x"58747084",
-823 => x"05560875",
-824 => x"5f787084",
-825 => x"055a0c77",
-826 => x"7e708405",
-827 => x"40087170",
-828 => x"8405530c",
-829 => x"7e08710c",
-830 => x"5d787b31",
-831 => x"56758f26",
-832 => x"80c93884",
-833 => x"17088106",
-834 => x"79078418",
-835 => x"0c781784",
-836 => x"11088107",
-837 => x"84120c5b",
-838 => x"6151a791",
-839 => x"3f881754",
-840 => x"73800c93",
-841 => x"3d0d0490",
-842 => x"5bfdb839",
-843 => x"7756fe83",
-844 => x"398c1608",
-845 => x"88170871",
-846 => x"8c120c88",
-847 => x"120c587e",
-848 => x"707c3157",
-849 => x"598f7627",
-850 => x"ffb9387a",
-851 => x"17841808",
-852 => x"81067c07",
-853 => x"84190c76",
-854 => x"81078412",
-855 => x"0c761184",
-856 => x"11088107",
-857 => x"84120c5b",
-858 => x"88055261",
-859 => x"518fda3f",
-860 => x"6151a6b9",
-861 => x"3f881754",
-862 => x"ffa6397d",
-863 => x"52615197",
-864 => x"d73f8008",
-865 => x"5a800880",
-866 => x"2e81ab38",
-867 => x"8008f805",
-868 => x"60840508",
-869 => x"fe066105",
-870 => x"58557477",
-871 => x"2e83f238",
-872 => x"fc195877",
-873 => x"a42681b0",
-874 => x"387b8008",
-875 => x"56579378",
-876 => x"2780dc38",
-877 => x"7b707084",
-878 => x"05520880",
-879 => x"08708405",
-880 => x"800c0c80",
-881 => x"08717084",
-882 => x"0553085d",
-883 => x"567b7670",
-884 => x"8405580c",
-885 => x"579b7827",
-886 => x"b6387670",
-887 => x"84055808",
-888 => x"75708405",
-889 => x"570c7670",
-890 => x"84055808",
-891 => x"75708405",
-892 => x"570ca378",
-893 => x"27993876",
-894 => x"70840558",
-895 => x"08757084",
-896 => x"05570c76",
-897 => x"70840558",
-898 => x"08757084",
-899 => x"05570c76",
-900 => x"70840558",
-901 => x"08775e75",
-902 => x"70840557",
-903 => x"0c747d70",
-904 => x"84055f08",
-905 => x"71708405",
-906 => x"530c7d08",
-907 => x"710c5f7b",
-908 => x"5261518e",
-909 => x"943f6151",
-910 => x"a4f33f79",
-911 => x"800c933d",
-912 => x"0d047d52",
-913 => x"61519690",
-914 => x"3f800880",
-915 => x"0c933d0d",
-916 => x"04841608",
-917 => x"55fbc939",
-918 => x"77537b52",
-919 => x"800851a2",
-920 => x"a53f7b52",
-921 => x"61518de1",
-922 => x"3fcc398c",
-923 => x"16088817",
-924 => x"08718c12",
-925 => x"0c88120c",
-926 => x"5d8c1708",
-927 => x"88180871",
-928 => x"8c120c88",
-929 => x"120c5977",
-930 => x"59fbef39",
-931 => x"7818901c",
-932 => x"40557e75",
-933 => x"24fb9c38",
-934 => x"7a177080",
-935 => x"d7a80b88",
-936 => x"050c757c",
-937 => x"31810784",
-938 => x"120c5684",
-939 => x"17088106",
-940 => x"7b078418",
-941 => x"0c6151a3",
-942 => x"f43f8817",
-943 => x"54fce139",
-944 => x"74181990",
-945 => x"1c5e5a7c",
-946 => x"7a24fb8f",
-947 => x"388c1708",
-948 => x"88180871",
-949 => x"8c120c88",
-950 => x"120c5e88",
-951 => x"1761fc05",
-952 => x"575975a4",
-953 => x"2681b638",
-954 => x"7b795955",
-955 => x"93762780",
-956 => x"c9387b70",
-957 => x"84055d08",
-958 => x"7c56790c",
-959 => x"74708405",
-960 => x"56088c18",
-961 => x"0c901758",
-962 => x"9b7627ae",
-963 => x"38747084",
-964 => x"05560878",
-965 => x"0c747084",
-966 => x"05560894",
-967 => x"180c9817",
-968 => x"58a37627",
-969 => x"95387470",
-970 => x"84055608",
-971 => x"780c7470",
-972 => x"84055608",
-973 => x"9c180ca0",
-974 => x"17587470",
-975 => x"84055608",
-976 => x"75417870",
-977 => x"84055a0c",
-978 => x"77607084",
-979 => x"05420871",
-980 => x"70840553",
-981 => x"0c600871",
-982 => x"0c5e7a17",
-983 => x"7080d7a8",
-984 => x"0b88050c",
-985 => x"7a7c3181",
-986 => x"0784120c",
-987 => x"58841708",
-988 => x"81067b07",
-989 => x"84180c61",
-990 => x"51a2b23f",
-991 => x"78547380",
-992 => x"0c933d0d",
-993 => x"0479537b",
-994 => x"5275519f",
-995 => x"f93ffae9",
-996 => x"39841508",
-997 => x"fc061960",
-998 => x"5859fadd",
-999 => x"3975537b",
-1000 => x"5278519f",
-1001 => x"e13f7a17",
-1002 => x"7080d7a8",
-1003 => x"0b88050c",
-1004 => x"7a7c3181",
-1005 => x"0784120c",
-1006 => x"58841708",
-1007 => x"81067b07",
-1008 => x"84180c61",
-1009 => x"51a1e63f",
-1010 => x"7854ffb2",
-1011 => x"39fa3d0d",
-1012 => x"7880cfec",
-1013 => x"085455b8",
-1014 => x"1308802e",
-1015 => x"81af388c",
-1016 => x"15227083",
-1017 => x"ffff0670",
-1018 => x"832a8132",
-1019 => x"81065555",
-1020 => x"5672802e",
-1021 => x"80da3873",
-1022 => x"842a8132",
-1023 => x"810657ff",
-1024 => x"537680f2",
-1025 => x"3873822a",
-1026 => x"81065473",
-1027 => x"802eb938",
-1028 => x"b0150854",
-1029 => x"73802e9c",
-1030 => x"3880c015",
-1031 => x"5373732e",
-1032 => x"8f387352",
-1033 => x"80cfec08",
-1034 => x"518a9e3f",
-1035 => x"8c152256",
-1036 => x"76b0160c",
-1037 => x"75db0657",
-1038 => x"768c1623",
-1039 => x"800b8416",
-1040 => x"0c901508",
-1041 => x"750c7656",
-1042 => x"75880754",
-1043 => x"738c1623",
-1044 => x"90150880",
-1045 => x"2ebf388c",
-1046 => x"15227081",
-1047 => x"06555373",
-1048 => x"9c38720a",
-1049 => x"100a8106",
-1050 => x"56758538",
-1051 => x"94150854",
-1052 => x"7388160c",
-1053 => x"80537280",
-1054 => x"0c883d0d",
-1055 => x"04800b88",
-1056 => x"160c9415",
-1057 => x"08309816",
-1058 => x"0c8053ea",
-1059 => x"39725182",
-1060 => x"a63ffecb",
-1061 => x"3974518f",
-1062 => x"bc3f8c15",
-1063 => x"22708106",
-1064 => x"55537380",
-1065 => x"2effbb38",
-1066 => x"d439f83d",
-1067 => x"0d7a5776",
-1068 => x"802e8197",
-1069 => x"3880cfec",
-1070 => x"0854b814",
-1071 => x"08802e80",
-1072 => x"eb388c17",
-1073 => x"2270902b",
-1074 => x"70902c70",
-1075 => x"832a8132",
-1076 => x"81065b5b",
-1077 => x"57557780",
-1078 => x"cb389017",
-1079 => x"08567580",
-1080 => x"2e80c138",
-1081 => x"76087631",
-1082 => x"76780c79",
-1083 => x"83065555",
-1084 => x"73853894",
-1085 => x"17085877",
-1086 => x"88180c80",
-1087 => x"7525a538",
-1088 => x"74537552",
-1089 => x"9c170851",
-1090 => x"a4170854",
-1091 => x"732d800b",
-1092 => x"80082580",
-1093 => x"c9388008",
-1094 => x"16758008",
-1095 => x"31565674",
-1096 => x"8024dd38",
-1097 => x"800b800c",
-1098 => x"8a3d0d04",
-1099 => x"73518187",
-1100 => x"3f8c1722",
-1101 => x"70902b70",
-1102 => x"902c7083",
-1103 => x"2a813281",
-1104 => x"065b5b57",
-1105 => x"5577dd38",
-1106 => x"ff9039a1",
-1107 => x"aa5280cf",
-1108 => x"ec08518c",
-1109 => x"d03f8008",
-1110 => x"800c8a3d",
-1111 => x"0d048c17",
-1112 => x"2280c007",
-1113 => x"58778c18",
-1114 => x"23ff0b80",
-1115 => x"0c8a3d0d",
-1116 => x"04fa3d0d",
-1117 => x"797080dc",
-1118 => x"298c1154",
-1119 => x"7a535657",
-1120 => x"8fd63f80",
-1121 => x"08800855",
-1122 => x"56800880",
-1123 => x"2ea23880",
-1124 => x"088c0554",
-1125 => x"800b8008",
-1126 => x"0c768008",
-1127 => x"84050c73",
-1128 => x"80088805",
-1129 => x"0c745380",
-1130 => x"5273519c",
-1131 => x"f53f7554",
-1132 => x"73800c88",
-1133 => x"3d0d0470",
-1134 => x"707074a8",
-1135 => x"f60bbc12",
-1136 => x"0c53810b",
-1137 => x"b8140c80",
-1138 => x"0b84dc14",
-1139 => x"0c830b84",
-1140 => x"e0140c84",
-1141 => x"e81384e4",
-1142 => x"140c8413",
-1143 => x"08518070",
-1144 => x"720c7084",
-1145 => x"130c7088",
-1146 => x"130c5284",
-1147 => x"0b8c1223",
-1148 => x"718e1223",
-1149 => x"7190120c",
-1150 => x"7194120c",
-1151 => x"7198120c",
-1152 => x"709c120c",
-1153 => x"80c1e50b",
-1154 => x"a0120c80",
-1155 => x"c2b10ba4",
-1156 => x"120c80c3",
-1157 => x"ad0ba812",
-1158 => x"0c80c3fe",
-1159 => x"0bac120c",
-1160 => x"88130872",
-1161 => x"710c7284",
-1162 => x"120c7288",
-1163 => x"120c5189",
-1164 => x"0b8c1223",
-1165 => x"810b8e12",
-1166 => x"23719012",
-1167 => x"0c719412",
-1168 => x"0c719812",
-1169 => x"0c709c12",
-1170 => x"0c80c1e5",
-1171 => x"0ba0120c",
-1172 => x"80c2b10b",
-1173 => x"a4120c80",
-1174 => x"c3ad0ba8",
-1175 => x"120c80c3",
-1176 => x"fe0bac12",
-1177 => x"0c8c1308",
-1178 => x"72710c72",
-1179 => x"84120c72",
-1180 => x"88120c51",
-1181 => x"8a0b8c12",
-1182 => x"23820b8e",
-1183 => x"12237190",
-1184 => x"120c7194",
-1185 => x"120c7198",
-1186 => x"120c709c",
-1187 => x"120c80c1",
-1188 => x"e50ba012",
-1189 => x"0c80c2b1",
-1190 => x"0ba4120c",
-1191 => x"80c3ad0b",
-1192 => x"a8120c80",
-1193 => x"c3fe0bac",
-1194 => x"120c5050",
-1195 => x"5004f83d",
-1196 => x"0d7a80cf",
-1197 => x"ec08b811",
-1198 => x"08575758",
-1199 => x"7481ec38",
-1200 => x"a8f60bbc",
-1201 => x"170c810b",
-1202 => x"b8170c74",
-1203 => x"84dc170c",
-1204 => x"830b84e0",
-1205 => x"170c84e8",
-1206 => x"1684e417",
-1207 => x"0c841608",
-1208 => x"75710c75",
-1209 => x"84120c75",
-1210 => x"88120c59",
-1211 => x"840b8c1a",
-1212 => x"23748e1a",
-1213 => x"2374901a",
-1214 => x"0c74941a",
-1215 => x"0c74981a",
-1216 => x"0c789c1a",
-1217 => x"0c80c1e5",
-1218 => x"0ba01a0c",
-1219 => x"80c2b10b",
-1220 => x"a41a0c80",
-1221 => x"c3ad0ba8",
-1222 => x"1a0c80c3",
-1223 => x"fe0bac1a",
-1224 => x"0c881608",
-1225 => x"75710c75",
-1226 => x"84120c75",
-1227 => x"88120c57",
-1228 => x"890b8c18",
-1229 => x"23810b8e",
-1230 => x"18237490",
-1231 => x"180c7494",
-1232 => x"180c7498",
-1233 => x"180c769c",
-1234 => x"180c80c1",
-1235 => x"e50ba018",
-1236 => x"0c80c2b1",
-1237 => x"0ba4180c",
-1238 => x"80c3ad0b",
-1239 => x"a8180c80",
-1240 => x"c3fe0bac",
-1241 => x"180c8c16",
-1242 => x"0875710c",
-1243 => x"7584120c",
-1244 => x"7588120c",
-1245 => x"548a0b8c",
-1246 => x"1523820b",
-1247 => x"8e152374",
-1248 => x"90150c74",
-1249 => x"94150c74",
-1250 => x"98150c73",
-1251 => x"9c150c80",
-1252 => x"c1e50ba0",
-1253 => x"150c80c2",
-1254 => x"b10ba415",
-1255 => x"0c80c3ad",
-1256 => x"0ba8150c",
-1257 => x"80c3fe0b",
-1258 => x"ac150c84",
-1259 => x"dc168811",
-1260 => x"08841208",
-1261 => x"ff055757",
-1262 => x"57807524",
-1263 => x"9f388c16",
-1264 => x"2270902b",
-1265 => x"70902c51",
-1266 => x"55597380",
-1267 => x"2e80ed38",
-1268 => x"80dc16ff",
-1269 => x"16565674",
-1270 => x"8025e338",
-1271 => x"76085574",
-1272 => x"802e8f38",
-1273 => x"74881108",
-1274 => x"841208ff",
-1275 => x"05575757",
-1276 => x"c83982fc",
-1277 => x"5277518a",
-1278 => x"df3f8008",
-1279 => x"80085556",
-1280 => x"8008802e",
-1281 => x"a3388008",
-1282 => x"8c057580",
-1283 => x"080c5484",
-1284 => x"0b800884",
-1285 => x"050c7380",
-1286 => x"0888050c",
-1287 => x"82f05374",
-1288 => x"52735197",
-1289 => x"fd3f7554",
-1290 => x"7374780c",
-1291 => x"5573ffb4",
-1292 => x"388c780c",
-1293 => x"800b800c",
-1294 => x"8a3d0d04",
-1295 => x"810b8c17",
-1296 => x"2373760c",
-1297 => x"7388170c",
-1298 => x"7384170c",
-1299 => x"7390170c",
-1300 => x"7394170c",
-1301 => x"7398170c",
-1302 => x"ff0b8e17",
-1303 => x"2373b017",
-1304 => x"0c73b417",
-1305 => x"0c7380c4",
-1306 => x"170c7380",
-1307 => x"c8170c75",
-1308 => x"800c8a3d",
-1309 => x"0d047070",
-1310 => x"a1aa5273",
-1311 => x"5186a63f",
-1312 => x"50500470",
-1313 => x"70a1aa52",
-1314 => x"80cfec08",
-1315 => x"5186963f",
-1316 => x"505004fb",
-1317 => x"3d0d7770",
-1318 => x"52569890",
-1319 => x"3f80d7a8",
-1320 => x"0b880508",
-1321 => x"841108fc",
-1322 => x"06707b31",
-1323 => x"9fef05e0",
-1324 => x"8006e080",
-1325 => x"05525555",
-1326 => x"a0807524",
-1327 => x"94388052",
-1328 => x"755197ea",
-1329 => x"3f80d7b0",
-1330 => x"08145372",
-1331 => x"80082e8f",
-1332 => x"38755197",
-1333 => x"d83f8053",
-1334 => x"72800c87",
-1335 => x"3d0d0474",
-1336 => x"30527551",
-1337 => x"97c83f80",
-1338 => x"08ff2ea8",
-1339 => x"3880d7a8",
-1340 => x"0b880508",
-1341 => x"74763181",
-1342 => x"0784120c",
-1343 => x"5380d6ec",
-1344 => x"08753180",
-1345 => x"d6ec0c75",
-1346 => x"5197a23f",
-1347 => x"810b800c",
-1348 => x"873d0d04",
-1349 => x"80527551",
-1350 => x"97943f80",
-1351 => x"d7a80b88",
-1352 => x"05088008",
-1353 => x"71315454",
-1354 => x"8f7325ff",
-1355 => x"a4388008",
-1356 => x"80d79c08",
-1357 => x"3180d6ec",
-1358 => x"0c728107",
-1359 => x"84150c75",
-1360 => x"5196ea3f",
-1361 => x"8053ff90",
-1362 => x"39f73d0d",
-1363 => x"7b7d545a",
-1364 => x"72802e82",
-1365 => x"83387951",
-1366 => x"96d23ff8",
-1367 => x"13841108",
-1368 => x"70fe0670",
-1369 => x"13841108",
-1370 => x"fc065c57",
-1371 => x"58545780",
-1372 => x"d7b00874",
-1373 => x"2e82de38",
-1374 => x"7784150c",
-1375 => x"80738106",
-1376 => x"56597479",
-1377 => x"2e81d538",
-1378 => x"77148411",
-1379 => x"08810656",
-1380 => x"5374a038",
-1381 => x"77165678",
-1382 => x"81e63888",
-1383 => x"14085574",
-1384 => x"80d7b02e",
-1385 => x"82f9388c",
-1386 => x"1408708c",
-1387 => x"170c7588",
-1388 => x"120c5875",
-1389 => x"81078418",
-1390 => x"0c751776",
-1391 => x"710c5478",
-1392 => x"81913883",
-1393 => x"ff762781",
-1394 => x"c8387589",
-1395 => x"2a76832a",
-1396 => x"54547380",
-1397 => x"2ebf3875",
-1398 => x"862ab805",
-1399 => x"53847427",
-1400 => x"b43880db",
-1401 => x"14539474",
-1402 => x"27ab3875",
-1403 => x"8c2a80ee",
-1404 => x"055380d4",
-1405 => x"74279e38",
-1406 => x"758f2a80",
-1407 => x"f7055382",
-1408 => x"d4742791",
-1409 => x"3875922a",
-1410 => x"80fc0553",
-1411 => x"8ad47427",
-1412 => x"843880fe",
-1413 => x"53721010",
-1414 => x"1080d7a8",
-1415 => x"05881108",
-1416 => x"55557375",
-1417 => x"2e82bf38",
-1418 => x"841408fc",
-1419 => x"06597579",
-1420 => x"278d3888",
-1421 => x"14085473",
-1422 => x"752e0981",
-1423 => x"06ea388c",
-1424 => x"1408708c",
-1425 => x"190c7488",
-1426 => x"190c7788",
-1427 => x"120c5576",
-1428 => x"8c150c79",
-1429 => x"5194d63f",
-1430 => x"8b3d0d04",
-1431 => x"76087771",
-1432 => x"31587605",
-1433 => x"88180856",
-1434 => x"567480d7",
-1435 => x"b02e80e0",
-1436 => x"388c1708",
-1437 => x"708c170c",
-1438 => x"7588120c",
-1439 => x"53fe8939",
-1440 => x"8814088c",
-1441 => x"1508708c",
-1442 => x"130c5988",
-1443 => x"190cfea3",
-1444 => x"3975832a",
-1445 => x"70545480",
-1446 => x"74248198",
-1447 => x"3872822c",
-1448 => x"81712b80",
-1449 => x"d7ac0807",
-1450 => x"80d7a80b",
-1451 => x"84050c74",
-1452 => x"10101080",
-1453 => x"d7a80588",
-1454 => x"1108718c",
-1455 => x"1b0c7088",
-1456 => x"1b0c7988",
-1457 => x"130c565a",
-1458 => x"55768c15",
-1459 => x"0cff8439",
-1460 => x"8159fdb4",
-1461 => x"39771673",
-1462 => x"81065455",
-1463 => x"72983876",
-1464 => x"08777131",
-1465 => x"5875058c",
-1466 => x"18088819",
-1467 => x"08718c12",
-1468 => x"0c88120c",
-1469 => x"55557481",
-1470 => x"0784180c",
-1471 => x"7680d7a8",
-1472 => x"0b88050c",
-1473 => x"80d7a408",
-1474 => x"7526fec7",
-1475 => x"3880d7a0",
-1476 => x"08527951",
-1477 => x"fafd3f79",
-1478 => x"5193923f",
-1479 => x"feba3981",
-1480 => x"778c170c",
-1481 => x"7788170c",
-1482 => x"758c190c",
-1483 => x"7588190c",
-1484 => x"59fd8039",
-1485 => x"83147082",
-1486 => x"2c81712b",
-1487 => x"80d7ac08",
-1488 => x"0780d7a8",
-1489 => x"0b84050c",
-1490 => x"75101010",
-1491 => x"80d7a805",
-1492 => x"88110871",
-1493 => x"8c1c0c70",
-1494 => x"881c0c7a",
-1495 => x"88130c57",
-1496 => x"5b5653fe",
-1497 => x"e4398073",
-1498 => x"24a33872",
-1499 => x"822c8171",
-1500 => x"2b80d7ac",
-1501 => x"080780d7",
-1502 => x"a80b8405",
-1503 => x"0c58748c",
-1504 => x"180c7388",
-1505 => x"180c7688",
-1506 => x"160cfdc3",
-1507 => x"39831370",
-1508 => x"822c8171",
-1509 => x"2b80d7ac",
-1510 => x"080780d7",
-1511 => x"a80b8405",
-1512 => x"0c5953da",
-1513 => x"39f93d0d",
-1514 => x"797b5853",
-1515 => x"800b80cf",
-1516 => x"ec085356",
-1517 => x"72722ebc",
-1518 => x"3884dc13",
-1519 => x"5574762e",
-1520 => x"b3388815",
-1521 => x"08841608",
-1522 => x"ff055454",
-1523 => x"80732499",
-1524 => x"388c1422",
-1525 => x"70902b53",
-1526 => x"587180d4",
-1527 => x"3880dc14",
-1528 => x"ff145454",
-1529 => x"728025e9",
-1530 => x"38740855",
-1531 => x"74d43880",
-1532 => x"cfec0852",
-1533 => x"84dc1255",
-1534 => x"74802ead",
-1535 => x"38881508",
-1536 => x"841608ff",
-1537 => x"05545480",
-1538 => x"73249838",
-1539 => x"8c142270",
-1540 => x"902b5358",
-1541 => x"71ad3880",
-1542 => x"dc14ff14",
-1543 => x"54547280",
-1544 => x"25ea3874",
-1545 => x"085574d5",
-1546 => x"3875800c",
-1547 => x"893d0d04",
-1548 => x"7351762d",
-1549 => x"75800807",
-1550 => x"80dc15ff",
-1551 => x"15555556",
-1552 => x"ffa23973",
-1553 => x"51762d75",
-1554 => x"80080780",
-1555 => x"dc15ff15",
-1556 => x"555556ca",
-1557 => x"39ea3d0d",
-1558 => x"688c1122",
-1559 => x"700a100a",
-1560 => x"81065758",
-1561 => x"567480e4",
-1562 => x"388e1622",
-1563 => x"70902b70",
-1564 => x"902c5155",
-1565 => x"58807424",
-1566 => x"b138983d",
-1567 => x"c4055373",
-1568 => x"5280cfec",
-1569 => x"08519481",
-1570 => x"3f800b80",
-1571 => x"08249738",
-1572 => x"7983e080",
-1573 => x"06547380",
-1574 => x"c0802e81",
-1575 => x"8f387382",
-1576 => x"80802e81",
-1577 => x"91388c16",
-1578 => x"22577690",
-1579 => x"80075473",
-1580 => x"8c172388",
-1581 => x"805280cf",
-1582 => x"ec085181",
-1583 => x"9b3f8008",
-1584 => x"9d388c16",
-1585 => x"22820755",
-1586 => x"748c1723",
-1587 => x"80c31670",
-1588 => x"770c9017",
-1589 => x"0c810b94",
-1590 => x"170c983d",
-1591 => x"0d0480cf",
-1592 => x"ec08a8f6",
-1593 => x"0bbc120c",
-1594 => x"588c1622",
-1595 => x"81800754",
-1596 => x"738c1723",
-1597 => x"8008760c",
-1598 => x"80089017",
-1599 => x"0c88800b",
-1600 => x"94170c74",
-1601 => x"802ed338",
-1602 => x"8e162270",
-1603 => x"902b7090",
-1604 => x"2c535654",
-1605 => x"9afb3f80",
-1606 => x"08802eff",
-1607 => x"bd388c16",
-1608 => x"22810757",
-1609 => x"768c1723",
-1610 => x"983d0d04",
-1611 => x"810b8c17",
-1612 => x"225855fe",
-1613 => x"f539a816",
-1614 => x"0880c3ad",
-1615 => x"2e098106",
-1616 => x"fee4388c",
-1617 => x"16228880",
-1618 => x"0754738c",
-1619 => x"17238880",
-1620 => x"0b80cc17",
-1621 => x"0cfedc39",
-1622 => x"f43d0d7e",
-1623 => x"608b1170",
-1624 => x"f8065b55",
-1625 => x"555d7296",
-1626 => x"26833890",
-1627 => x"58807824",
-1628 => x"74792607",
-1629 => x"55805474",
-1630 => x"742e0981",
-1631 => x"0680ca38",
-1632 => x"7c518ea8",
-1633 => x"3f7783f7",
-1634 => x"2680c538",
-1635 => x"77832a70",
-1636 => x"10101080",
-1637 => x"d7a8058c",
-1638 => x"11085858",
-1639 => x"5475772e",
-1640 => x"81f03884",
-1641 => x"1608fc06",
-1642 => x"8c170888",
-1643 => x"1808718c",
-1644 => x"120c8812",
-1645 => x"0c5b7605",
-1646 => x"84110881",
-1647 => x"0784120c",
-1648 => x"537c518d",
-1649 => x"e83f8816",
-1650 => x"5473800c",
-1651 => x"8e3d0d04",
-1652 => x"77892a78",
-1653 => x"832a5854",
-1654 => x"73802ebf",
-1655 => x"3877862a",
-1656 => x"b8055784",
-1657 => x"7427b438",
-1658 => x"80db1457",
-1659 => x"947427ab",
-1660 => x"38778c2a",
-1661 => x"80ee0557",
-1662 => x"80d47427",
-1663 => x"9e38778f",
-1664 => x"2a80f705",
-1665 => x"5782d474",
-1666 => x"27913877",
-1667 => x"922a80fc",
-1668 => x"05578ad4",
-1669 => x"74278438",
-1670 => x"80fe5776",
-1671 => x"10101080",
-1672 => x"d7a8058c",
-1673 => x"11085653",
-1674 => x"74732ea3",
-1675 => x"38841508",
-1676 => x"fc067079",
-1677 => x"31555673",
-1678 => x"8f2488e4",
-1679 => x"38738025",
-1680 => x"88e6388c",
-1681 => x"15085574",
-1682 => x"732e0981",
-1683 => x"06df3881",
-1684 => x"175980d7",
-1685 => x"b8085675",
-1686 => x"80d7b02e",
-1687 => x"82cc3884",
-1688 => x"1608fc06",
-1689 => x"70793155",
-1690 => x"55738f24",
-1691 => x"bb3880d7",
-1692 => x"b00b80d7",
-1693 => x"bc0c80d7",
-1694 => x"b00b80d7",
-1695 => x"b80c8074",
-1696 => x"2480db38",
-1697 => x"74168411",
-1698 => x"08810784",
-1699 => x"120c53fe",
-1700 => x"b0398816",
-1701 => x"8c110857",
-1702 => x"5975792e",
-1703 => x"098106fe",
-1704 => x"82388214",
-1705 => x"59ffab39",
-1706 => x"77167881",
-1707 => x"0784180c",
-1708 => x"7080d7bc",
-1709 => x"0c7080d7",
-1710 => x"b80c80d7",
-1711 => x"b00b8c12",
-1712 => x"0c8c1108",
-1713 => x"88120c74",
-1714 => x"81078412",
-1715 => x"0c740574",
-1716 => x"710c5b7c",
-1717 => x"518bd63f",
-1718 => x"881654fd",
-1719 => x"ec3983ff",
-1720 => x"75278391",
-1721 => x"3874892a",
-1722 => x"75832a54",
-1723 => x"5473802e",
-1724 => x"bf387486",
-1725 => x"2ab80553",
-1726 => x"847427b4",
-1727 => x"3880db14",
-1728 => x"53947427",
-1729 => x"ab38748c",
-1730 => x"2a80ee05",
-1731 => x"5380d474",
-1732 => x"279e3874",
-1733 => x"8f2a80f7",
-1734 => x"055382d4",
-1735 => x"74279138",
-1736 => x"74922a80",
-1737 => x"fc05538a",
-1738 => x"d4742784",
-1739 => x"3880fe53",
-1740 => x"72101010",
-1741 => x"80d7a805",
-1742 => x"88110855",
-1743 => x"5773772e",
-1744 => x"868b3884",
-1745 => x"1408fc06",
-1746 => x"5b747b27",
-1747 => x"8d388814",
-1748 => x"08547377",
-1749 => x"2e098106",
-1750 => x"ea388c14",
-1751 => x"0880d7a8",
-1752 => x"0b840508",
-1753 => x"718c190c",
-1754 => x"7588190c",
-1755 => x"7788130c",
-1756 => x"5c57758c",
-1757 => x"150c7853",
-1758 => x"80792483",
-1759 => x"98387282",
-1760 => x"2c81712b",
-1761 => x"5656747b",
-1762 => x"2680ca38",
-1763 => x"7a750657",
-1764 => x"7682a338",
-1765 => x"78fc0684",
-1766 => x"05597410",
-1767 => x"707c0655",
-1768 => x"55738292",
-1769 => x"38841959",
-1770 => x"f13980d7",
-1771 => x"a80b8405",
-1772 => x"0879545b",
-1773 => x"788025c6",
-1774 => x"3882da39",
-1775 => x"74097b06",
-1776 => x"7080d7a8",
-1777 => x"0b84050c",
-1778 => x"5b741055",
-1779 => x"747b2685",
-1780 => x"387485bc",
-1781 => x"3880d7a8",
-1782 => x"0b880508",
-1783 => x"70841208",
-1784 => x"fc06707b",
-1785 => x"317b7226",
-1786 => x"8f722507",
-1787 => x"5d575c5c",
-1788 => x"5578802e",
-1789 => x"80d93879",
-1790 => x"1580d7a0",
-1791 => x"08199011",
-1792 => x"59545680",
-1793 => x"d79c08ff",
-1794 => x"2e8838a0",
-1795 => x"8f13e080",
-1796 => x"06577652",
-1797 => x"7c518996",
-1798 => x"3f800854",
-1799 => x"8008ff2e",
-1800 => x"90388008",
-1801 => x"762782a7",
-1802 => x"387480d7",
-1803 => x"a82e829f",
-1804 => x"3880d7a8",
-1805 => x"0b880508",
-1806 => x"55841508",
-1807 => x"fc067079",
-1808 => x"31797226",
-1809 => x"8f722507",
-1810 => x"5d555a7a",
-1811 => x"83f23877",
-1812 => x"81078416",
-1813 => x"0c771570",
-1814 => x"80d7a80b",
-1815 => x"88050c74",
-1816 => x"81078412",
-1817 => x"0c567c51",
-1818 => x"88c33f88",
-1819 => x"15547380",
-1820 => x"0c8e3d0d",
-1821 => x"0474832a",
-1822 => x"70545480",
-1823 => x"7424819b",
-1824 => x"3872822c",
-1825 => x"81712b80",
-1826 => x"d7ac0807",
-1827 => x"7080d7a8",
-1828 => x"0b84050c",
-1829 => x"75101010",
-1830 => x"80d7a805",
-1831 => x"88110871",
-1832 => x"8c1b0c70",
-1833 => x"881b0c79",
-1834 => x"88130c57",
-1835 => x"555c5575",
-1836 => x"8c150cfd",
-1837 => x"c1397879",
-1838 => x"10101080",
-1839 => x"d7a80570",
-1840 => x"565b5c8c",
-1841 => x"14085675",
-1842 => x"742ea338",
-1843 => x"841608fc",
-1844 => x"06707931",
-1845 => x"5853768f",
-1846 => x"2483f138",
-1847 => x"76802584",
-1848 => x"af388c16",
-1849 => x"08567574",
-1850 => x"2e098106",
-1851 => x"df388814",
-1852 => x"811a7083",
-1853 => x"06555a54",
-1854 => x"72c9387b",
-1855 => x"83065675",
-1856 => x"802efdb8",
-1857 => x"38ff1cf8",
-1858 => x"1b5b5c88",
-1859 => x"1a087a2e",
-1860 => x"ea38fdb5",
-1861 => x"39831953",
-1862 => x"fce43983",
-1863 => x"1470822c",
-1864 => x"81712b80",
-1865 => x"d7ac0807",
-1866 => x"7080d7a8",
-1867 => x"0b84050c",
-1868 => x"76101010",
-1869 => x"80d7a805",
-1870 => x"88110871",
-1871 => x"8c1c0c70",
-1872 => x"881c0c7a",
-1873 => x"88130c58",
-1874 => x"535d5653",
-1875 => x"fee13980",
-1876 => x"d6ec0817",
-1877 => x"59800876",
-1878 => x"2e818b38",
-1879 => x"80d79c08",
-1880 => x"ff2e848e",
-1881 => x"38737631",
-1882 => x"1980d6ec",
-1883 => x"0c738706",
-1884 => x"70565372",
-1885 => x"802e8838",
-1886 => x"88733170",
-1887 => x"15555576",
-1888 => x"149fff06",
-1889 => x"a0807131",
-1890 => x"1670547e",
-1891 => x"53515386",
-1892 => x"9d3f8008",
-1893 => x"568008ff",
-1894 => x"2e819e38",
-1895 => x"80d6ec08",
-1896 => x"137080d6",
-1897 => x"ec0c7475",
-1898 => x"80d7a80b",
-1899 => x"88050c77",
-1900 => x"76311581",
-1901 => x"07555659",
-1902 => x"7a80d7a8",
-1903 => x"2e83c038",
-1904 => x"798f2682",
-1905 => x"ef38810b",
-1906 => x"84150c84",
-1907 => x"1508fc06",
-1908 => x"70793179",
-1909 => x"72268f72",
-1910 => x"25075d55",
-1911 => x"5a7a802e",
-1912 => x"fced3880",
-1913 => x"db398008",
-1914 => x"9fff0655",
-1915 => x"74feed38",
-1916 => x"7880d6ec",
-1917 => x"0c80d7a8",
-1918 => x"0b880508",
-1919 => x"7a188107",
-1920 => x"84120c55",
-1921 => x"80d79808",
-1922 => x"79278638",
-1923 => x"7880d798",
-1924 => x"0c80d794",
-1925 => x"087927fc",
-1926 => x"a0387880",
-1927 => x"d7940c84",
-1928 => x"1508fc06",
-1929 => x"70793179",
-1930 => x"72268f72",
-1931 => x"25075d55",
-1932 => x"5a7a802e",
-1933 => x"fc993888",
-1934 => x"39807457",
-1935 => x"53fedd39",
-1936 => x"7c5184e9",
-1937 => x"3f800b80",
-1938 => x"0c8e3d0d",
-1939 => x"04807324",
-1940 => x"a5387282",
-1941 => x"2c81712b",
-1942 => x"80d7ac08",
-1943 => x"077080d7",
-1944 => x"a80b8405",
-1945 => x"0c5c5a76",
-1946 => x"8c170c73",
-1947 => x"88170c75",
-1948 => x"88180cf9",
-1949 => x"fd398313",
-1950 => x"70822c81",
-1951 => x"712b80d7",
-1952 => x"ac080770",
-1953 => x"80d7a80b",
-1954 => x"84050c5d",
-1955 => x"5b53d839",
-1956 => x"7a75065c",
-1957 => x"7bfc9f38",
-1958 => x"84197510",
-1959 => x"5659f139",
-1960 => x"ff178105",
-1961 => x"59f7ab39",
-1962 => x"8c150888",
-1963 => x"1608718c",
-1964 => x"120c8812",
-1965 => x"0c597515",
-1966 => x"84110881",
-1967 => x"0784120c",
-1968 => x"587c5183",
-1969 => x"e83f8815",
-1970 => x"54fba339",
-1971 => x"77167881",
-1972 => x"0784180c",
-1973 => x"8c170888",
-1974 => x"1808718c",
-1975 => x"120c8812",
-1976 => x"0c5c7080",
-1977 => x"d7bc0c70",
-1978 => x"80d7b80c",
-1979 => x"80d7b00b",
-1980 => x"8c120c8c",
-1981 => x"11088812",
-1982 => x"0c778107",
-1983 => x"84120c77",
-1984 => x"0577710c",
-1985 => x"557c5183",
-1986 => x"a43f8816",
-1987 => x"54f5ba39",
-1988 => x"72168411",
-1989 => x"08810784",
-1990 => x"120c588c",
-1991 => x"16088817",
-1992 => x"08718c12",
-1993 => x"0c88120c",
-1994 => x"577c5183",
-1995 => x"803f8816",
-1996 => x"54f59639",
-1997 => x"7284150c",
-1998 => x"f41af806",
-1999 => x"70841d08",
-2000 => x"81060784",
-2001 => x"1d0c701c",
-2002 => x"5556850b",
-2003 => x"84150c85",
-2004 => x"0b88150c",
-2005 => x"8f7627fd",
-2006 => x"ab38881b",
-2007 => x"527c51eb",
-2008 => x"e83f80d7",
-2009 => x"a80b8805",
-2010 => x"0880d6ec",
-2011 => x"085a55fd",
-2012 => x"93397880",
-2013 => x"d6ec0c73",
-2014 => x"80d79c0c",
-2015 => x"fbef3972",
-2016 => x"84150cfc",
-2017 => x"ff39fb3d",
-2018 => x"0d77707a",
-2019 => x"7c585553",
-2020 => x"568f7527",
-2021 => x"80e63872",
-2022 => x"76078306",
-2023 => x"517080dc",
-2024 => x"38757352",
-2025 => x"54707084",
-2026 => x"05520874",
-2027 => x"70840556",
-2028 => x"0c737170",
-2029 => x"84055308",
-2030 => x"71708405",
-2031 => x"530c7170",
-2032 => x"84055308",
-2033 => x"71708405",
-2034 => x"530c7170",
-2035 => x"84055308",
-2036 => x"71708405",
-2037 => x"530cf016",
-2038 => x"5654748f",
-2039 => x"26c73883",
-2040 => x"75279538",
-2041 => x"70708405",
-2042 => x"52087470",
-2043 => x"8405560c",
-2044 => x"fc155574",
-2045 => x"8326ed38",
-2046 => x"73715452",
-2047 => x"ff155170",
-2048 => x"ff2e9838",
-2049 => x"72708105",
-2050 => x"54337270",
-2051 => x"81055434",
-2052 => x"ff115170",
-2053 => x"ff2e0981",
-2054 => x"06ea3875",
-2055 => x"800c873d",
-2056 => x"0d04fb3d",
-2057 => x"0d777a71",
-2058 => x"028c05a3",
-2059 => x"05335854",
-2060 => x"54568373",
-2061 => x"2780d438",
-2062 => x"75830651",
-2063 => x"7080cc38",
-2064 => x"74882b75",
-2065 => x"07707190",
-2066 => x"2b075551",
-2067 => x"8f7327a7",
-2068 => x"38737270",
-2069 => x"8405540c",
-2070 => x"71747170",
-2071 => x"8405530c",
-2072 => x"74717084",
-2073 => x"05530c74",
-2074 => x"71708405",
-2075 => x"530cf014",
-2076 => x"5452728f",
-2077 => x"26db3883",
-2078 => x"73279038",
-2079 => x"73727084",
-2080 => x"05540cfc",
-2081 => x"13537283",
-2082 => x"26f238ff",
-2083 => x"135170ff",
-2084 => x"2e933874",
-2085 => x"72708105",
-2086 => x"5434ff11",
-2087 => x"5170ff2e",
-2088 => x"098106ef",
-2089 => x"3875800c",
-2090 => x"873d0d04",
-2091 => x"04047070",
-2092 => x"7070800b",
-2093 => x"80dfe40c",
-2094 => x"765184f3",
-2095 => x"3f800853",
-2096 => x"8008ff2e",
-2097 => x"89387280",
-2098 => x"0c505050",
-2099 => x"500480df",
-2100 => x"e4085473",
-2101 => x"802eef38",
-2102 => x"7574710c",
-2103 => x"5272800c",
-2104 => x"50505050",
-2105 => x"04f93d0d",
-2106 => x"797c557b",
-2107 => x"548e1122",
-2108 => x"70902b70",
-2109 => x"902c5557",
-2110 => x"80cfec08",
-2111 => x"53585683",
-2112 => x"f63f8008",
-2113 => x"57800b80",
-2114 => x"08249338",
-2115 => x"80d01608",
-2116 => x"80080580",
-2117 => x"d0170c76",
-2118 => x"800c893d",
-2119 => x"0d048c16",
-2120 => x"2283dfff",
-2121 => x"0655748c",
-2122 => x"17237680",
-2123 => x"0c893d0d",
-2124 => x"04fa3d0d",
-2125 => x"788c1122",
-2126 => x"70882a70",
-2127 => x"81065157",
-2128 => x"585674a9",
-2129 => x"388c1622",
-2130 => x"83dfff06",
-2131 => x"55748c17",
-2132 => x"237a5479",
-2133 => x"538e1622",
-2134 => x"70902b70",
-2135 => x"902c5456",
-2136 => x"80cfec08",
-2137 => x"525681b2",
-2138 => x"3f883d0d",
-2139 => x"04825480",
-2140 => x"538e1622",
-2141 => x"70902b70",
-2142 => x"902c5456",
-2143 => x"80cfec08",
-2144 => x"525782bb",
-2145 => x"3f8c1622",
-2146 => x"83dfff06",
-2147 => x"55748c17",
-2148 => x"237a5479",
-2149 => x"538e1622",
-2150 => x"70902b70",
-2151 => x"902c5456",
-2152 => x"80cfec08",
-2153 => x"525680f2",
-2154 => x"3f883d0d",
-2155 => x"04f93d0d",
-2156 => x"797c557b",
-2157 => x"548e1122",
-2158 => x"70902b70",
-2159 => x"902c5557",
-2160 => x"80cfec08",
-2161 => x"53585681",
-2162 => x"f63f8008",
-2163 => x"578008ff",
-2164 => x"2e99388c",
-2165 => x"1622a080",
-2166 => x"0755748c",
-2167 => x"17238008",
-2168 => x"80d0170c",
-2169 => x"76800c89",
-2170 => x"3d0d048c",
-2171 => x"162283df",
-2172 => x"ff065574",
-2173 => x"8c172376",
-2174 => x"800c893d",
-2175 => x"0d047070",
-2176 => x"70748e11",
-2177 => x"2270902b",
-2178 => x"70902c55",
-2179 => x"51515380",
-2180 => x"cfec0851",
-2181 => x"bd3f5050",
-2182 => x"5004fb3d",
-2183 => x"0d800b80",
-2184 => x"dfe40c7a",
-2185 => x"53795278",
-2186 => x"5182fc3f",
-2187 => x"80085580",
-2188 => x"08ff2e88",
-2189 => x"3874800c",
-2190 => x"873d0d04",
-2191 => x"80dfe408",
-2192 => x"5675802e",
-2193 => x"f0387776",
-2194 => x"710c5474",
-2195 => x"800c873d",
-2196 => x"0d047070",
-2197 => x"7070800b",
-2198 => x"80dfe40c",
-2199 => x"765184c9",
-2200 => x"3f800853",
-2201 => x"8008ff2e",
-2202 => x"89387280",
-2203 => x"0c505050",
-2204 => x"500480df",
-2205 => x"e4085473",
-2206 => x"802eef38",
-2207 => x"7574710c",
-2208 => x"5272800c",
-2209 => x"50505050",
-2210 => x"04fc3d0d",
-2211 => x"800b80df",
-2212 => x"e40c7852",
-2213 => x"775187b0",
-2214 => x"3f800854",
-2215 => x"8008ff2e",
-2216 => x"88387380",
-2217 => x"0c863d0d",
-2218 => x"0480dfe4",
-2219 => x"08557480",
-2220 => x"2ef03876",
-2221 => x"75710c53",
-2222 => x"73800c86",
-2223 => x"3d0d04fb",
-2224 => x"3d0d800b",
-2225 => x"80dfe40c",
-2226 => x"7a537952",
-2227 => x"7851848b",
-2228 => x"3f800855",
-2229 => x"8008ff2e",
-2230 => x"88387480",
-2231 => x"0c873d0d",
-2232 => x"0480dfe4",
-2233 => x"08567580",
-2234 => x"2ef03877",
-2235 => x"76710c54",
-2236 => x"74800c87",
-2237 => x"3d0d04fb",
-2238 => x"3d0d800b",
-2239 => x"80dfe40c",
-2240 => x"7a537952",
-2241 => x"78518293",
-2242 => x"3f800855",
-2243 => x"8008ff2e",
-2244 => x"88387480",
-2245 => x"0c873d0d",
-2246 => x"0480dfe4",
-2247 => x"08567580",
-2248 => x"2ef03877",
-2249 => x"76710c54",
-2250 => x"74800c87",
-2251 => x"3d0d0470",
-2252 => x"707080df",
-2253 => x"d8088938",
-2254 => x"80dfe80b",
-2255 => x"80dfd80c",
-2256 => x"80dfd808",
-2257 => x"75115252",
-2258 => x"ff537087",
-2259 => x"fb808026",
-2260 => x"88387080",
-2261 => x"dfd80c71",
-2262 => x"5372800c",
-2263 => x"50505004",
-2264 => x"fd3d0d80",
-2265 => x"0b80cfe0",
-2266 => x"08545472",
-2267 => x"812e9b38",
-2268 => x"7380dfdc",
-2269 => x"0cc2af3f",
-2270 => x"c1863f80",
-2271 => x"dfb05281",
-2272 => x"51c3ff3f",
-2273 => x"80085186",
-2274 => x"bf3f7280",
-2275 => x"dfdc0cc2",
-2276 => x"953fc0ec",
-2277 => x"3f80dfb0",
-2278 => x"528151c3",
-2279 => x"e53f8008",
-2280 => x"5186a53f",
-2281 => x"00ff39f5",
-2282 => x"3d0d7e60",
-2283 => x"80dfdc08",
-2284 => x"705b585b",
-2285 => x"5b7580c2",
-2286 => x"38777a25",
-2287 => x"a138771b",
-2288 => x"70337081",
-2289 => x"ff065858",
-2290 => x"59758a2e",
-2291 => x"98387681",
-2292 => x"ff0651c1",
-2293 => x"b03f8118",
-2294 => x"58797824",
-2295 => x"e1387980",
-2296 => x"0c8d3d0d",
-2297 => x"048d51c1",
-2298 => x"9c3f7833",
-2299 => x"7081ff06",
-2300 => x"5257c191",
-2301 => x"3f811858",
-2302 => x"e0397955",
-2303 => x"7a547d53",
-2304 => x"85528d3d",
-2305 => x"fc0551c0",
-2306 => x"b93f8008",
-2307 => x"5685b23f",
-2308 => x"7b80080c",
-2309 => x"75800c8d",
-2310 => x"3d0d04f6",
-2311 => x"3d0d7d7f",
-2312 => x"80dfdc08",
-2313 => x"705b585a",
-2314 => x"5a7580c1",
-2315 => x"38777925",
-2316 => x"b338c0ac",
-2317 => x"3f800881",
-2318 => x"ff06708d",
-2319 => x"32703070",
-2320 => x"9f2a5151",
-2321 => x"5757768a",
-2322 => x"2e80c438",
-2323 => x"75802ebf",
-2324 => x"38771a56",
-2325 => x"76763476",
-2326 => x"51c0aa3f",
-2327 => x"81185878",
-2328 => x"7824cf38",
-2329 => x"77567580",
-2330 => x"0c8c3d0d",
-2331 => x"04785579",
-2332 => x"547c5384",
-2333 => x"528c3dfc",
-2334 => x"0551ffbf",
-2335 => x"c53f8008",
-2336 => x"5684be3f",
-2337 => x"7a80080c",
-2338 => x"75800c8c",
-2339 => x"3d0d0477",
-2340 => x"1a598a79",
-2341 => x"34811858",
-2342 => x"8d51ffbf",
-2343 => x"e83f8a51",
-2344 => x"ffbfe23f",
-2345 => x"7756ffbe",
-2346 => x"39fb3d0d",
-2347 => x"80dfdc08",
-2348 => x"70565473",
-2349 => x"88387480",
-2350 => x"0c873d0d",
-2351 => x"04775383",
-2352 => x"52873dfc",
-2353 => x"0551ffbe",
-2354 => x"f93f8008",
-2355 => x"5483f23f",
-2356 => x"7580080c",
-2357 => x"73800c87",
-2358 => x"3d0d04fa",
-2359 => x"3d0d80df",
-2360 => x"dc08802e",
-2361 => x"a3387a55",
-2362 => x"79547853",
-2363 => x"8652883d",
-2364 => x"fc0551ff",
-2365 => x"becc3f80",
-2366 => x"085683c5",
-2367 => x"3f768008",
-2368 => x"0c75800c",
-2369 => x"883d0d04",
-2370 => x"83b73f9d",
-2371 => x"0b80080c",
-2372 => x"ff0b800c",
-2373 => x"883d0d04",
-2374 => x"f73d0d7b",
-2375 => x"7d5b59bc",
-2376 => x"53805279",
-2377 => x"51f5fb3f",
-2378 => x"80705657",
-2379 => x"98567419",
-2380 => x"70337078",
-2381 => x"2b790781",
-2382 => x"18f81a5a",
-2383 => x"58595558",
-2384 => x"847524ea",
-2385 => x"38767a23",
-2386 => x"84195880",
-2387 => x"70565798",
-2388 => x"56741870",
-2389 => x"3370782b",
-2390 => x"79078118",
-2391 => x"f81a5a58",
-2392 => x"59515484",
-2393 => x"7524ea38",
-2394 => x"76821b23",
-2395 => x"88195880",
-2396 => x"70565798",
-2397 => x"56741870",
-2398 => x"3370782b",
-2399 => x"79078118",
-2400 => x"f81a5a58",
-2401 => x"59515484",
-2402 => x"7524ea38",
-2403 => x"76841b0c",
-2404 => x"8c195880",
-2405 => x"70565798",
-2406 => x"56741870",
-2407 => x"3370782b",
-2408 => x"79078118",
-2409 => x"f81a5a58",
-2410 => x"59515484",
-2411 => x"7524ea38",
-2412 => x"76881b23",
-2413 => x"90195880",
-2414 => x"70565798",
-2415 => x"56741870",
-2416 => x"3370782b",
-2417 => x"79078118",
-2418 => x"f81a5a58",
-2419 => x"59515484",
-2420 => x"7524ea38",
-2421 => x"768a1b23",
-2422 => x"94195880",
-2423 => x"70565798",
-2424 => x"56741870",
-2425 => x"3370782b",
-2426 => x"79078118",
-2427 => x"f81a5a58",
-2428 => x"59515484",
-2429 => x"7524ea38",
-2430 => x"768c1b23",
-2431 => x"98195880",
-2432 => x"70565798",
-2433 => x"56741870",
-2434 => x"3370782b",
-2435 => x"79078118",
-2436 => x"f81a5a58",
-2437 => x"59515484",
-2438 => x"7524ea38",
-2439 => x"768e1b23",
-2440 => x"9c195880",
-2441 => x"705657b8",
-2442 => x"56741870",
-2443 => x"3370782b",
-2444 => x"79078118",
-2445 => x"f81a5a58",
-2446 => x"595a5488",
-2447 => x"7524ea38",
-2448 => x"76901b0c",
-2449 => x"8b3d0d04",
-2450 => x"e93d0d6a",
-2451 => x"80dfdc08",
-2452 => x"57577593",
-2453 => x"3880c080",
-2454 => x"0b84180c",
-2455 => x"75ac180c",
-2456 => x"75800c99",
-2457 => x"3d0d0489",
-2458 => x"3d70556a",
-2459 => x"54558a52",
-2460 => x"993dffbc",
-2461 => x"0551ffbb",
-2462 => x"c93f8008",
-2463 => x"77537552",
-2464 => x"56fd953f",
-2465 => x"bc3f7780",
-2466 => x"080c7580",
-2467 => x"0c993d0d",
-2468 => x"04fc3d0d",
-2469 => x"815480df",
-2470 => x"dc088838",
-2471 => x"73800c86",
-2472 => x"3d0d0476",
-2473 => x"5397b952",
-2474 => x"863dfc05",
-2475 => x"51ffbb92",
-2476 => x"3f800854",
-2477 => x"8c3f7480",
-2478 => x"080c7380",
-2479 => x"0c863d0d",
-2480 => x"0480cfec",
-2481 => x"08800c04",
-2482 => x"f73d0d7b",
-2483 => x"80cfec08",
-2484 => x"82c81108",
-2485 => x"5a545a77",
-2486 => x"802e80da",
-2487 => x"38818818",
-2488 => x"841908ff",
-2489 => x"0581712b",
-2490 => x"59555980",
-2491 => x"742480ea",
-2492 => x"38807424",
-2493 => x"b5387382",
-2494 => x"2b781188",
-2495 => x"05565681",
-2496 => x"80190877",
-2497 => x"06537280",
-2498 => x"2eb63878",
-2499 => x"16700853",
-2500 => x"53795174",
-2501 => x"0853722d",
-2502 => x"ff14fc17",
-2503 => x"fc177981",
-2504 => x"2c5a5757",
-2505 => x"54738025",
-2506 => x"d6387708",
-2507 => x"5877ffad",
-2508 => x"3880cfec",
-2509 => x"0853bc13",
-2510 => x"08a53879",
-2511 => x"51f8e53f",
-2512 => x"74085372",
-2513 => x"2dff14fc",
-2514 => x"17fc1779",
-2515 => x"812c5a57",
-2516 => x"57547380",
-2517 => x"25ffa838",
-2518 => x"d1398057",
-2519 => x"ff933972",
-2520 => x"51bc1308",
-2521 => x"54732d79",
-2522 => x"51f8b93f",
-2523 => x"707080df",
-2524 => x"b80bfc05",
-2525 => x"70085252",
-2526 => x"70ff2e91",
-2527 => x"38702dfc",
-2528 => x"12700852",
-2529 => x"5270ff2e",
-2530 => x"098106f1",
-2531 => x"38505004",
-2532 => x"04ffbaff",
-2533 => x"3f040000",
-2534 => x"00000040",
-2535 => x"476f7420",
-2536 => x"696e7465",
-2537 => x"72727570",
-2538 => x"740a0000",
-2539 => x"4e6f2069",
-2540 => x"6e746572",
-2541 => x"72757074",
-2542 => x"0a000000",
-2543 => x"43000000",
-2544 => x"64756d6d",
-2545 => x"792e6578",
-2546 => x"65000000",
-2547 => x"00ffffff",
-2548 => x"ff00ffff",
-2549 => x"ffff00ff",
-2550 => x"ffffff00",
-2551 => x"00000000",
-2552 => x"00000000",
-2553 => x"00000000",
-2554 => x"00002fc0",
-2555 => x"000027f0",
-2556 => x"00000000",
-2557 => x"00002a58",
-2558 => x"00002ab4",
-2559 => x"00002b10",
-2560 => x"00000000",
-2561 => x"00000000",
-2562 => x"00000000",
-2563 => x"00000000",
-2564 => x"00000000",
-2565 => x"00000000",
-2566 => x"00000000",
-2567 => x"00000000",
-2568 => x"00000000",
-2569 => x"000027bc",
-2570 => x"00000000",
-2571 => x"00000000",
-2572 => x"00000000",
-2573 => x"00000000",
-2574 => x"00000000",
-2575 => x"00000000",
-2576 => x"00000000",
-2577 => x"00000000",
-2578 => x"00000000",
-2579 => x"00000000",
-2580 => x"00000000",
-2581 => x"00000000",
-2582 => x"00000000",
-2583 => x"00000000",
-2584 => x"00000000",
-2585 => x"00000000",
-2586 => x"00000000",
-2587 => x"00000000",
-2588 => x"00000000",
-2589 => x"00000000",
-2590 => x"00000000",
-2591 => x"00000000",
-2592 => x"00000000",
-2593 => x"00000000",
-2594 => x"00000000",
-2595 => x"00000000",
-2596 => x"00000000",
-2597 => x"00000000",
-2598 => x"00000001",
-2599 => x"330eabcd",
-2600 => x"1234e66d",
-2601 => x"deec0005",
-2602 => x"000b0000",
-2603 => x"00000000",
-2604 => x"00000000",
-2605 => x"00000000",
-2606 => x"00000000",
-2607 => x"00000000",
-2608 => x"00000000",
-2609 => x"00000000",
-2610 => x"00000000",
-2611 => x"00000000",
-2612 => x"00000000",
-2613 => x"00000000",
-2614 => x"00000000",
-2615 => x"00000000",
-2616 => x"00000000",
-2617 => x"00000000",
-2618 => x"00000000",
-2619 => x"00000000",
-2620 => x"00000000",
-2621 => x"00000000",
-2622 => x"00000000",
-2623 => x"00000000",
-2624 => x"00000000",
-2625 => x"00000000",
-2626 => x"00000000",
-2627 => x"00000000",
-2628 => x"00000000",
-2629 => x"00000000",
-2630 => x"00000000",
-2631 => x"00000000",
-2632 => x"00000000",
-2633 => x"00000000",
-2634 => x"00000000",
-2635 => x"00000000",
-2636 => x"00000000",
-2637 => x"00000000",
-2638 => x"00000000",
-2639 => x"00000000",
-2640 => x"00000000",
-2641 => x"00000000",
-2642 => x"00000000",
-2643 => x"00000000",
-2644 => x"00000000",
-2645 => x"00000000",
-2646 => x"00000000",
-2647 => x"00000000",
-2648 => x"00000000",
-2649 => x"00000000",
-2650 => x"00000000",
-2651 => x"00000000",
-2652 => x"00000000",
-2653 => x"00000000",
-2654 => x"00000000",
-2655 => x"00000000",
-2656 => x"00000000",
-2657 => x"00000000",
-2658 => x"00000000",
-2659 => x"00000000",
-2660 => x"00000000",
-2661 => x"00000000",
-2662 => x"00000000",
-2663 => x"00000000",
-2664 => x"00000000",
-2665 => x"00000000",
-2666 => x"00000000",
-2667 => x"00000000",
-2668 => x"00000000",
-2669 => x"00000000",
-2670 => x"00000000",
-2671 => x"00000000",
-2672 => x"00000000",
-2673 => x"00000000",
-2674 => x"00000000",
-2675 => x"00000000",
-2676 => x"00000000",
-2677 => x"00000000",
-2678 => x"00000000",
-2679 => x"00000000",
-2680 => x"00000000",
-2681 => x"00000000",
-2682 => x"00000000",
-2683 => x"00000000",
-2684 => x"00000000",
-2685 => x"00000000",
-2686 => x"00000000",
-2687 => x"00000000",
-2688 => x"00000000",
-2689 => x"00000000",
-2690 => x"00000000",
-2691 => x"00000000",
-2692 => x"00000000",
-2693 => x"00000000",
-2694 => x"00000000",
-2695 => x"00000000",
-2696 => x"00000000",
-2697 => x"00000000",
-2698 => x"00000000",
-2699 => x"00000000",
-2700 => x"00000000",
-2701 => x"00000000",
-2702 => x"00000000",
-2703 => x"00000000",
-2704 => x"00000000",
-2705 => x"00000000",
-2706 => x"00000000",
-2707 => x"00000000",
-2708 => x"00000000",
-2709 => x"00000000",
-2710 => x"00000000",
-2711 => x"00000000",
-2712 => x"00000000",
-2713 => x"00000000",
-2714 => x"00000000",
-2715 => x"00000000",
-2716 => x"00000000",
-2717 => x"00000000",
-2718 => x"00000000",
-2719 => x"00000000",
-2720 => x"00000000",
-2721 => x"00000000",
-2722 => x"00000000",
-2723 => x"00000000",
-2724 => x"00000000",
-2725 => x"00000000",
-2726 => x"00000000",
-2727 => x"00000000",
-2728 => x"00000000",
-2729 => x"00000000",
-2730 => x"00000000",
-2731 => x"00000000",
-2732 => x"00000000",
-2733 => x"00000000",
-2734 => x"00000000",
-2735 => x"00000000",
-2736 => x"00000000",
-2737 => x"00000000",
-2738 => x"00000000",
-2739 => x"00000000",
-2740 => x"00000000",
-2741 => x"00000000",
-2742 => x"00000000",
-2743 => x"00000000",
-2744 => x"00000000",
-2745 => x"00000000",
-2746 => x"00000000",
-2747 => x"00000000",
-2748 => x"00000000",
-2749 => x"00000000",
-2750 => x"00000000",
-2751 => x"00000000",
-2752 => x"00000000",
-2753 => x"00000000",
-2754 => x"00000000",
-2755 => x"00000000",
-2756 => x"00000000",
-2757 => x"00000000",
-2758 => x"00000000",
-2759 => x"00000000",
-2760 => x"00000000",
-2761 => x"00000000",
-2762 => x"00000000",
-2763 => x"00000000",
-2764 => x"00000000",
-2765 => x"00000000",
-2766 => x"00000000",
-2767 => x"00000000",
-2768 => x"00000000",
-2769 => x"00000000",
-2770 => x"00000000",
-2771 => x"00000000",
-2772 => x"00000000",
-2773 => x"00000000",
-2774 => x"00000000",
-2775 => x"00000000",
-2776 => x"00000000",
-2777 => x"00000000",
-2778 => x"00000000",
-2779 => x"00000000",
-2780 => x"00000000",
-2781 => x"00000000",
-2782 => x"00000000",
-2783 => x"00000000",
-2784 => x"00000000",
-2785 => x"00000000",
-2786 => x"00000000",
-2787 => x"00000000",
-2788 => x"00000000",
-2789 => x"00000000",
-2790 => x"00000000",
-2791 => x"ffffffff",
-2792 => x"00000000",
-2793 => x"00020000",
-2794 => x"00000000",
-2795 => x"00000000",
-2796 => x"00002ba8",
-2797 => x"00002ba8",
-2798 => x"00002bb0",
-2799 => x"00002bb0",
-2800 => x"00002bb8",
-2801 => x"00002bb8",
-2802 => x"00002bc0",
-2803 => x"00002bc0",
-2804 => x"00002bc8",
-2805 => x"00002bc8",
-2806 => x"00002bd0",
-2807 => x"00002bd0",
-2808 => x"00002bd8",
-2809 => x"00002bd8",
-2810 => x"00002be0",
-2811 => x"00002be0",
-2812 => x"00002be8",
-2813 => x"00002be8",
-2814 => x"00002bf0",
-2815 => x"00002bf0",
-2816 => x"00002bf8",
-2817 => x"00002bf8",
-2818 => x"00002c00",
-2819 => x"00002c00",
-2820 => x"00002c08",
-2821 => x"00002c08",
-2822 => x"00002c10",
-2823 => x"00002c10",
-2824 => x"00002c18",
-2825 => x"00002c18",
-2826 => x"00002c20",
-2827 => x"00002c20",
-2828 => x"00002c28",
-2829 => x"00002c28",
-2830 => x"00002c30",
-2831 => x"00002c30",
-2832 => x"00002c38",
-2833 => x"00002c38",
-2834 => x"00002c40",
-2835 => x"00002c40",
-2836 => x"00002c48",
-2837 => x"00002c48",
-2838 => x"00002c50",
-2839 => x"00002c50",
-2840 => x"00002c58",
-2841 => x"00002c58",
-2842 => x"00002c60",
-2843 => x"00002c60",
-2844 => x"00002c68",
-2845 => x"00002c68",
-2846 => x"00002c70",
-2847 => x"00002c70",
-2848 => x"00002c78",
-2849 => x"00002c78",
-2850 => x"00002c80",
-2851 => x"00002c80",
-2852 => x"00002c88",
-2853 => x"00002c88",
-2854 => x"00002c90",
-2855 => x"00002c90",
-2856 => x"00002c98",
-2857 => x"00002c98",
-2858 => x"00002ca0",
-2859 => x"00002ca0",
-2860 => x"00002ca8",
-2861 => x"00002ca8",
-2862 => x"00002cb0",
-2863 => x"00002cb0",
-2864 => x"00002cb8",
-2865 => x"00002cb8",
-2866 => x"00002cc0",
-2867 => x"00002cc0",
-2868 => x"00002cc8",
-2869 => x"00002cc8",
-2870 => x"00002cd0",
-2871 => x"00002cd0",
-2872 => x"00002cd8",
-2873 => x"00002cd8",
-2874 => x"00002ce0",
-2875 => x"00002ce0",
-2876 => x"00002ce8",
-2877 => x"00002ce8",
-2878 => x"00002cf0",
-2879 => x"00002cf0",
-2880 => x"00002cf8",
-2881 => x"00002cf8",
-2882 => x"00002d00",
-2883 => x"00002d00",
-2884 => x"00002d08",
-2885 => x"00002d08",
-2886 => x"00002d10",
-2887 => x"00002d10",
-2888 => x"00002d18",
-2889 => x"00002d18",
-2890 => x"00002d20",
-2891 => x"00002d20",
-2892 => x"00002d28",
-2893 => x"00002d28",
-2894 => x"00002d30",
-2895 => x"00002d30",
-2896 => x"00002d38",
-2897 => x"00002d38",
-2898 => x"00002d40",
-2899 => x"00002d40",
-2900 => x"00002d48",
-2901 => x"00002d48",
-2902 => x"00002d50",
-2903 => x"00002d50",
-2904 => x"00002d58",
-2905 => x"00002d58",
-2906 => x"00002d60",
-2907 => x"00002d60",
-2908 => x"00002d68",
-2909 => x"00002d68",
-2910 => x"00002d70",
-2911 => x"00002d70",
-2912 => x"00002d78",
-2913 => x"00002d78",
-2914 => x"00002d80",
-2915 => x"00002d80",
-2916 => x"00002d88",
-2917 => x"00002d88",
-2918 => x"00002d90",
-2919 => x"00002d90",
-2920 => x"00002d98",
-2921 => x"00002d98",
-2922 => x"00002da0",
-2923 => x"00002da0",
-2924 => x"00002da8",
-2925 => x"00002da8",
-2926 => x"00002db0",
-2927 => x"00002db0",
-2928 => x"00002db8",
-2929 => x"00002db8",
-2930 => x"00002dc0",
-2931 => x"00002dc0",
-2932 => x"00002dc8",
-2933 => x"00002dc8",
-2934 => x"00002dd0",
-2935 => x"00002dd0",
-2936 => x"00002dd8",
-2937 => x"00002dd8",
-2938 => x"00002de0",
-2939 => x"00002de0",
-2940 => x"00002de8",
-2941 => x"00002de8",
-2942 => x"00002df0",
-2943 => x"00002df0",
-2944 => x"00002df8",
-2945 => x"00002df8",
-2946 => x"00002e00",
-2947 => x"00002e00",
-2948 => x"00002e08",
-2949 => x"00002e08",
-2950 => x"00002e10",
-2951 => x"00002e10",
-2952 => x"00002e18",
-2953 => x"00002e18",
-2954 => x"00002e20",
-2955 => x"00002e20",
-2956 => x"00002e28",
-2957 => x"00002e28",
-2958 => x"00002e30",
-2959 => x"00002e30",
-2960 => x"00002e38",
-2961 => x"00002e38",
-2962 => x"00002e40",
-2963 => x"00002e40",
-2964 => x"00002e48",
-2965 => x"00002e48",
-2966 => x"00002e50",
-2967 => x"00002e50",
-2968 => x"00002e58",
-2969 => x"00002e58",
-2970 => x"00002e60",
-2971 => x"00002e60",
-2972 => x"00002e68",
-2973 => x"00002e68",
-2974 => x"00002e70",
-2975 => x"00002e70",
-2976 => x"00002e78",
-2977 => x"00002e78",
-2978 => x"00002e80",
-2979 => x"00002e80",
-2980 => x"00002e88",
-2981 => x"00002e88",
-2982 => x"00002e90",
-2983 => x"00002e90",
-2984 => x"00002e98",
-2985 => x"00002e98",
-2986 => x"00002ea0",
-2987 => x"00002ea0",
-2988 => x"00002ea8",
-2989 => x"00002ea8",
-2990 => x"00002eb0",
-2991 => x"00002eb0",
-2992 => x"00002eb8",
-2993 => x"00002eb8",
-2994 => x"00002ec0",
-2995 => x"00002ec0",
-2996 => x"00002ec8",
-2997 => x"00002ec8",
-2998 => x"00002ed0",
-2999 => x"00002ed0",
-3000 => x"00002ed8",
-3001 => x"00002ed8",
-3002 => x"00002ee0",
-3003 => x"00002ee0",
-3004 => x"00002ee8",
-3005 => x"00002ee8",
-3006 => x"00002ef0",
-3007 => x"00002ef0",
-3008 => x"00002ef8",
-3009 => x"00002ef8",
-3010 => x"00002f00",
-3011 => x"00002f00",
-3012 => x"00002f08",
-3013 => x"00002f08",
-3014 => x"00002f10",
-3015 => x"00002f10",
-3016 => x"00002f18",
-3017 => x"00002f18",
-3018 => x"00002f20",
-3019 => x"00002f20",
-3020 => x"00002f28",
-3021 => x"00002f28",
-3022 => x"00002f30",
-3023 => x"00002f30",
-3024 => x"00002f38",
-3025 => x"00002f38",
-3026 => x"00002f40",
-3027 => x"00002f40",
-3028 => x"00002f48",
-3029 => x"00002f48",
-3030 => x"00002f50",
-3031 => x"00002f50",
-3032 => x"00002f58",
-3033 => x"00002f58",
-3034 => x"00002f60",
-3035 => x"00002f60",
-3036 => x"00002f68",
-3037 => x"00002f68",
-3038 => x"00002f70",
-3039 => x"00002f70",
-3040 => x"00002f78",
-3041 => x"00002f78",
-3042 => x"00002f80",
-3043 => x"00002f80",
-3044 => x"00002f88",
-3045 => x"00002f88",
-3046 => x"00002f90",
-3047 => x"00002f90",
-3048 => x"00002f98",
-3049 => x"00002f98",
-3050 => x"00002fa0",
-3051 => x"00002fa0",
-3052 => x"000027c0",
-3053 => x"ffffffff",
-3054 => x"00000000",
-3055 => x"ffffffff",
-3056 => x"00000000",
- others => x"00000000"
-);
-
-begin
-
-process (clk)
-begin
- if (clk'event and clk = '1') then
- if (memAWriteEnable = '1') and (memBWriteEnable = '1') and (memAAddr=memBAddr) and (memAWrite/=memBWrite) then
- report "write collision" severity failure;
- end if;
-
- if (memAWriteEnable = '1') then
- ram(to_integer(unsigned(memAAddr))) := memAWrite;
- memARead <= memAWrite;
- else
- memARead <= ram(to_integer(unsigned(memAAddr)));
- end if;
- end if;
-end process;
-
-process (clk)
-begin
- if (clk'event and clk = '1') then
- if (memBWriteEnable = '1') then
- ram(to_integer(unsigned(memBAddr))) := memBWrite;
- memBRead <= memBWrite;
- else
- memBRead <= ram(to_integer(unsigned(memBAddr)));
- end if;
- end if;
-end process;
-
-
-
-
-end dualport_ram_arch;
+-- ZPU
+--
+-- Copyright 2004-2008 oharboe - Øyvind Harboe - oyvind.harboe@zylin.com
+--
+-- The FreeBSD license
+--
+-- Redistribution and use in source and binary forms, with or without
+-- modification, are permitted provided that the following conditions
+-- are met:
+--
+-- 1. Redistributions of source code must retain the above copyright
+-- notice, this list of conditions and the following disclaimer.
+-- 2. Redistributions in binary form must reproduce the above
+-- copyright notice, this list of conditions and the following
+-- disclaimer in the documentation and/or other materials
+-- provided with the distribution.
+--
+-- THIS SOFTWARE IS PROVIDED BY THE ZPU PROJECT ``AS IS'' AND ANY
+-- EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+-- THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+-- PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+-- ZPU PROJECT OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+-- INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+-- (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+-- OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+-- HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+-- STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+-- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+-- ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+--
+-- The views and conclusions contained in the software and documentation
+-- are those of the authors and should not be interpreted as representing
+-- official policies, either expressed or implied, of the ZPU Project.
+
+library ieee;
+use ieee.std_logic_1164.all;
+use ieee.numeric_std.all;
+
+
+library work;
+use work.zpu_config.all;
+use work.zpupkg.all;
+
+entity dualport_ram is
+port (clk : in std_logic;
+ memAWriteEnable : in std_logic;
+ memAAddr : in std_logic_vector(maxAddrBitBRAM downto minAddrBit);
+ memAWrite : in std_logic_vector(wordSize-1 downto 0);
+ memARead : out std_logic_vector(wordSize-1 downto 0);
+ memBWriteEnable : in std_logic;
+ memBAddr : in std_logic_vector(maxAddrBitBRAM downto minAddrBit);
+ memBWrite : in std_logic_vector(wordSize-1 downto 0);
+ memBRead : out std_logic_vector(wordSize-1 downto 0));
+end dualport_ram;
+
+architecture dualport_ram_arch of dualport_ram is
+
+
+type ram_type is array(natural range 0 to ((2**(maxAddrBitBRAM+1))/4)-1) of std_logic_vector(wordSize-1 downto 0);
+
+shared variable ram : ram_type :=
+(
+0 => x"0b0b0b0b",
+1 => x"82700b0b",
+2 => x"80cfe00c",
+3 => x"3a0b0b80",
+4 => x"c6e00400",
+5 => x"00000000",
+6 => x"00000000",
+7 => x"00000000",
+8 => x"80088408",
+9 => x"88080b0b",
+10 => x"0b8af02d",
+11 => x"880c840c",
+12 => x"800c0400",
+13 => x"00000000",
+14 => x"00000000",
+15 => x"00000000",
+16 => x"71fd0608",
+17 => x"72830609",
+18 => x"81058205",
+19 => x"832b2a83",
+20 => x"ffff0652",
+21 => x"04000000",
+22 => x"00000000",
+23 => x"00000000",
+24 => x"71fd0608",
+25 => x"83ffff73",
+26 => x"83060981",
+27 => x"05820583",
+28 => x"2b2b0906",
+29 => x"7383ffff",
+30 => x"0b0b0b0b",
+31 => x"83a70400",
+32 => x"72098105",
+33 => x"72057373",
+34 => x"09060906",
+35 => x"73097306",
+36 => x"070a8106",
+37 => x"53510400",
+38 => x"00000000",
+39 => x"00000000",
+40 => x"72722473",
+41 => x"732e0753",
+42 => x"51040000",
+43 => x"00000000",
+44 => x"00000000",
+45 => x"00000000",
+46 => x"00000000",
+47 => x"00000000",
+48 => x"71737109",
+49 => x"71068106",
+50 => x"30720a10",
+51 => x"0a720a10",
+52 => x"0a31050a",
+53 => x"81065151",
+54 => x"53510400",
+55 => x"00000000",
+56 => x"72722673",
+57 => x"732e0753",
+58 => x"51040000",
+59 => x"00000000",
+60 => x"00000000",
+61 => x"00000000",
+62 => x"00000000",
+63 => x"00000000",
+64 => x"00000000",
+65 => x"00000000",
+66 => x"00000000",
+67 => x"00000000",
+68 => x"00000000",
+69 => x"00000000",
+70 => x"00000000",
+71 => x"00000000",
+72 => x"0b0b0b88",
+73 => x"c4040000",
+74 => x"00000000",
+75 => x"00000000",
+76 => x"00000000",
+77 => x"00000000",
+78 => x"00000000",
+79 => x"00000000",
+80 => x"720a722b",
+81 => x"0a535104",
+82 => x"00000000",
+83 => x"00000000",
+84 => x"00000000",
+85 => x"00000000",
+86 => x"00000000",
+87 => x"00000000",
+88 => x"72729f06",
+89 => x"0981050b",
+90 => x"0b0b88a7",
+91 => x"05040000",
+92 => x"00000000",
+93 => x"00000000",
+94 => x"00000000",
+95 => x"00000000",
+96 => x"72722aff",
+97 => x"739f062a",
+98 => x"0974090a",
+99 => x"8106ff05",
+100 => x"06075351",
+101 => x"04000000",
+102 => x"00000000",
+103 => x"00000000",
+104 => x"71715351",
+105 => x"020d0406",
+106 => x"73830609",
+107 => x"81058205",
+108 => x"832b0b2b",
+109 => x"0772fc06",
+110 => x"0c515104",
+111 => x"00000000",
+112 => x"72098105",
+113 => x"72050970",
+114 => x"81050906",
+115 => x"0a810653",
+116 => x"51040000",
+117 => x"00000000",
+118 => x"00000000",
+119 => x"00000000",
+120 => x"72098105",
+121 => x"72050970",
+122 => x"81050906",
+123 => x"0a098106",
+124 => x"53510400",
+125 => x"00000000",
+126 => x"00000000",
+127 => x"00000000",
+128 => x"71098105",
+129 => x"52040000",
+130 => x"00000000",
+131 => x"00000000",
+132 => x"00000000",
+133 => x"00000000",
+134 => x"00000000",
+135 => x"00000000",
+136 => x"72720981",
+137 => x"05055351",
+138 => x"04000000",
+139 => x"00000000",
+140 => x"00000000",
+141 => x"00000000",
+142 => x"00000000",
+143 => x"00000000",
+144 => x"72097206",
+145 => x"73730906",
+146 => x"07535104",
+147 => x"00000000",
+148 => x"00000000",
+149 => x"00000000",
+150 => x"00000000",
+151 => x"00000000",
+152 => x"71fc0608",
+153 => x"72830609",
+154 => x"81058305",
+155 => x"1010102a",
+156 => x"81ff0652",
+157 => x"04000000",
+158 => x"00000000",
+159 => x"00000000",
+160 => x"71fc0608",
+161 => x"0b0b80cf",
+162 => x"cc738306",
+163 => x"10100508",
+164 => x"060b0b0b",
+165 => x"88aa0400",
+166 => x"00000000",
+167 => x"00000000",
+168 => x"80088408",
+169 => x"88087575",
+170 => x"0b0b0b8b",
+171 => x"ab2d5050",
+172 => x"80085688",
+173 => x"0c840c80",
+174 => x"0c510400",
+175 => x"00000000",
+176 => x"80088408",
+177 => x"88087575",
+178 => x"0b0b0b8b",
+179 => x"ef2d5050",
+180 => x"80085688",
+181 => x"0c840c80",
+182 => x"0c510400",
+183 => x"00000000",
+184 => x"72097081",
+185 => x"0509060a",
+186 => x"8106ff05",
+187 => x"70547106",
+188 => x"73097274",
+189 => x"05ff0506",
+190 => x"07515151",
+191 => x"04000000",
+192 => x"72097081",
+193 => x"0509060a",
+194 => x"098106ff",
+195 => x"05705471",
+196 => x"06730972",
+197 => x"7405ff05",
+198 => x"06075151",
+199 => x"51040000",
+200 => x"05ff0504",
+201 => x"00000000",
+202 => x"00000000",
+203 => x"00000000",
+204 => x"00000000",
+205 => x"00000000",
+206 => x"00000000",
+207 => x"00000000",
+208 => x"810b0b0b",
+209 => x"80cfdc0c",
+210 => x"51040000",
+211 => x"00000000",
+212 => x"00000000",
+213 => x"00000000",
+214 => x"00000000",
+215 => x"00000000",
+216 => x"71810552",
+217 => x"04000000",
+218 => x"00000000",
+219 => x"00000000",
+220 => x"00000000",
+221 => x"00000000",
+222 => x"00000000",
+223 => x"00000000",
+224 => x"00000000",
+225 => x"00000000",
+226 => x"00000000",
+227 => x"00000000",
+228 => x"00000000",
+229 => x"00000000",
+230 => x"00000000",
+231 => x"00000000",
+232 => x"02840572",
+233 => x"10100552",
+234 => x"04000000",
+235 => x"00000000",
+236 => x"00000000",
+237 => x"00000000",
+238 => x"00000000",
+239 => x"00000000",
+240 => x"00000000",
+241 => x"00000000",
+242 => x"00000000",
+243 => x"00000000",
+244 => x"00000000",
+245 => x"00000000",
+246 => x"00000000",
+247 => x"00000000",
+248 => x"717105ff",
+249 => x"05715351",
+250 => x"020d0400",
+251 => x"00000000",
+252 => x"00000000",
+253 => x"00000000",
+254 => x"00000000",
+255 => x"00000000",
+256 => x"82c53f80",
+257 => x"c6e63f04",
+258 => x"10101010",
+259 => x"10101010",
+260 => x"10101010",
+261 => x"10101010",
+262 => x"10101010",
+263 => x"10101010",
+264 => x"10101010",
+265 => x"10101053",
+266 => x"51047381",
+267 => x"ff067383",
+268 => x"06098105",
+269 => x"83051010",
+270 => x"102b0772",
+271 => x"fc060c51",
+272 => x"51043c04",
+273 => x"72728072",
+274 => x"8106ff05",
+275 => x"09720605",
+276 => x"71105272",
+277 => x"0a100a53",
+278 => x"72ed3851",
+279 => x"51535104",
+280 => x"fe3d0d0b",
+281 => x"0b80dfc8",
+282 => x"08538413",
+283 => x"0870882a",
+284 => x"70810651",
+285 => x"52527080",
+286 => x"2ef03871",
+287 => x"81ff0680",
+288 => x"0c843d0d",
+289 => x"04ff3d0d",
+290 => x"0b0b80df",
+291 => x"c8085271",
+292 => x"0870882a",
+293 => x"81327081",
+294 => x"06515151",
+295 => x"70f13873",
+296 => x"720c833d",
+297 => x"0d0480cf",
+298 => x"dc08802e",
+299 => x"a43880cf",
+300 => x"e008822e",
+301 => x"bd388380",
+302 => x"800b0b0b",
+303 => x"80dfc80c",
+304 => x"82a0800b",
+305 => x"80dfcc0c",
+306 => x"8290800b",
+307 => x"80dfd00c",
+308 => x"04f88080",
+309 => x"80a40b0b",
+310 => x"0b80dfc8",
+311 => x"0cf88080",
+312 => x"82800b80",
+313 => x"dfcc0cf8",
+314 => x"80808480",
+315 => x"0b80dfd0",
+316 => x"0c0480c0",
+317 => x"a8808c0b",
+318 => x"0b0b80df",
+319 => x"c80c80c0",
+320 => x"a880940b",
+321 => x"80dfcc0c",
+322 => x"0b0b80cf",
+323 => x"980b80df",
+324 => x"d00c0470",
+325 => x"7080dfd4",
+326 => x"335170a7",
+327 => x"3880cfe8",
+328 => x"08700852",
+329 => x"5270802e",
+330 => x"94388412",
+331 => x"80cfe80c",
+332 => x"702d80cf",
+333 => x"e8087008",
+334 => x"525270ee",
+335 => x"38810b80",
+336 => x"dfd43450",
+337 => x"50040470",
+338 => x"0b0b80df",
+339 => x"c408802e",
+340 => x"8e380b0b",
+341 => x"0b0b800b",
+342 => x"802e0981",
+343 => x"06833850",
+344 => x"040b0b80",
+345 => x"dfc4510b",
+346 => x"0b0bf594",
+347 => x"3f500404",
+348 => x"803d0d80",
+349 => x"dfe00881",
+350 => x"1180dfe0",
+351 => x"0c51823d",
+352 => x"0d04fe3d",
+353 => x"0d80dfe0",
+354 => x"085380df",
+355 => x"e0085272",
+356 => x"722e8f38",
+357 => x"80cf9c51",
+358 => x"82b03f80",
+359 => x"dfe00853",
+360 => x"e93980cf",
+361 => x"ac5182a2",
+362 => x"3fe039fb",
+363 => x"3d0d7779",
+364 => x"55558056",
+365 => x"757524ab",
+366 => x"38807424",
+367 => x"9d388053",
+368 => x"73527451",
+369 => x"80e13f80",
+370 => x"08547580",
+371 => x"2e853880",
+372 => x"08305473",
+373 => x"800c873d",
+374 => x"0d047330",
+375 => x"76813257",
+376 => x"54dc3974",
+377 => x"30558156",
+378 => x"738025d2",
+379 => x"38ec39fa",
+380 => x"3d0d787a",
+381 => x"57558057",
+382 => x"767524a4",
+383 => x"38759f2c",
+384 => x"54815375",
+385 => x"74327431",
+386 => x"5274519b",
+387 => x"3f800854",
+388 => x"76802e85",
+389 => x"38800830",
+390 => x"5473800c",
+391 => x"883d0d04",
+392 => x"74305581",
+393 => x"57d739fc",
+394 => x"3d0d7678",
+395 => x"53548153",
+396 => x"80747326",
+397 => x"52557280",
+398 => x"2e983870",
+399 => x"802eab38",
+400 => x"807224a6",
+401 => x"38711073",
+402 => x"10757226",
+403 => x"53545272",
+404 => x"ea387351",
+405 => x"78833874",
+406 => x"5170800c",
+407 => x"863d0d04",
+408 => x"720a100a",
+409 => x"720a100a",
+410 => x"53537280",
+411 => x"2ee43871",
+412 => x"7426ed38",
+413 => x"73723175",
+414 => x"7407740a",
+415 => x"100a740a",
+416 => x"100a5555",
+417 => x"5654e339",
+418 => x"f73d0d7c",
+419 => x"70525380",
+420 => x"fd3f7254",
+421 => x"8008550b",
+422 => x"0b80cfb8",
+423 => x"56815780",
+424 => x"0881055a",
+425 => x"8b3de411",
+426 => x"59538259",
+427 => x"f413527b",
+428 => x"88110852",
+429 => x"5381b43f",
+430 => x"80083070",
+431 => x"8008079f",
+432 => x"2c8a0780",
+433 => x"0c538b3d",
+434 => x"0d04f63d",
+435 => x"0d7c80cf",
+436 => x"ec087153",
+437 => x"5553b73f",
+438 => x"72558008",
+439 => x"560b0b80",
+440 => x"cfb85781",
+441 => x"58800881",
+442 => x"055b8c3d",
+443 => x"e4115a53",
+444 => x"825af413",
+445 => x"52881408",
+446 => x"5180f03f",
+447 => x"80083070",
+448 => x"8008079f",
+449 => x"2c8a0780",
+450 => x"0c548c3d",
+451 => x"0d047070",
+452 => x"70707570",
+453 => x"71830653",
+454 => x"555270b4",
+455 => x"38717008",
+456 => x"7009f7fb",
+457 => x"fdff1206",
+458 => x"f8848281",
+459 => x"80065452",
+460 => x"53719b38",
+461 => x"84137008",
+462 => x"7009f7fb",
+463 => x"fdff1206",
+464 => x"f8848281",
+465 => x"80065452",
+466 => x"5371802e",
+467 => x"e7387252",
+468 => x"71335372",
+469 => x"802e8a38",
+470 => x"81127033",
+471 => x"545272f8",
+472 => x"38717431",
+473 => x"800c5050",
+474 => x"505004f2",
+475 => x"3d0d6062",
+476 => x"88110870",
+477 => x"58565f5a",
+478 => x"73802e81",
+479 => x"8c388c1a",
+480 => x"2270832a",
+481 => x"81328106",
+482 => x"56587486",
+483 => x"38901a08",
+484 => x"91387951",
+485 => x"90b73fff",
+486 => x"55800880",
+487 => x"ec388c1a",
+488 => x"22587d08",
+489 => x"55807883",
+490 => x"ffff0670",
+491 => x"0a100a81",
+492 => x"06415c57",
+493 => x"7e772e80",
+494 => x"d7387690",
+495 => x"38740884",
+496 => x"16088817",
+497 => x"57585676",
+498 => x"802ef238",
+499 => x"76548880",
+500 => x"77278438",
+501 => x"88805473",
+502 => x"5375529c",
+503 => x"1a0851a4",
+504 => x"1a085877",
+505 => x"2d800b80",
+506 => x"082582e0",
+507 => x"38800816",
+508 => x"77800831",
+509 => x"7f880508",
+510 => x"80083170",
+511 => x"6188050c",
+512 => x"5b585678",
+513 => x"ffb43880",
+514 => x"5574800c",
+515 => x"903d0d04",
+516 => x"7a813281",
+517 => x"06774056",
+518 => x"75802e81",
+519 => x"bd387690",
+520 => x"38740884",
+521 => x"16088817",
+522 => x"57585976",
+523 => x"802ef238",
+524 => x"881a0878",
+525 => x"83ffff06",
+526 => x"70892a81",
+527 => x"06565956",
+528 => x"73802e82",
+529 => x"f8387577",
+530 => x"278b3877",
+531 => x"872a8106",
+532 => x"5c7b82b5",
+533 => x"38767627",
+534 => x"83387656",
+535 => x"75537852",
+536 => x"79085185",
+537 => x"833f881a",
+538 => x"08763188",
+539 => x"1b0c7908",
+540 => x"167a0c76",
+541 => x"56751977",
+542 => x"77317f88",
+543 => x"05087831",
+544 => x"70618805",
+545 => x"0c415859",
+546 => x"7e802efe",
+547 => x"fa388c1a",
+548 => x"2258ff8a",
+549 => x"39787954",
+550 => x"7c537b52",
+551 => x"5684c93f",
+552 => x"881a0879",
+553 => x"31881b0c",
+554 => x"7908197a",
+555 => x"0c7c7631",
+556 => x"5d7c8e38",
+557 => x"79518ff2",
+558 => x"3f800881",
+559 => x"8f388008",
+560 => x"5f751c77",
+561 => x"77317f88",
+562 => x"05087831",
+563 => x"70618805",
+564 => x"0c5d585c",
+565 => x"7a802efe",
+566 => x"ae387681",
+567 => x"83387408",
+568 => x"84160888",
+569 => x"1757585c",
+570 => x"76802ef2",
+571 => x"3876538a",
+572 => x"527b5182",
+573 => x"d33f8008",
+574 => x"7c318105",
+575 => x"5d800884",
+576 => x"3881175d",
+577 => x"815f7c59",
+578 => x"767d2783",
+579 => x"38765994",
+580 => x"1a08881b",
+581 => x"08115758",
+582 => x"807a085c",
+583 => x"54901a08",
+584 => x"7b278338",
+585 => x"81547579",
+586 => x"25843873",
+587 => x"ba387779",
+588 => x"24fee238",
+589 => x"77537b52",
+590 => x"9c1a0851",
+591 => x"a41a0859",
+592 => x"782d8008",
+593 => x"56800880",
+594 => x"24fee238",
+595 => x"8c1a2280",
+596 => x"c0075e7d",
+597 => x"8c1b23ff",
+598 => x"5574800c",
+599 => x"903d0d04",
+600 => x"7effa338",
+601 => x"ff873975",
+602 => x"537b527a",
+603 => x"5182f93f",
+604 => x"7908167a",
+605 => x"0c79518e",
+606 => x"b13f8008",
+607 => x"cf387c76",
+608 => x"315d7cfe",
+609 => x"bc38feac",
+610 => x"39901a08",
+611 => x"7a087131",
+612 => x"78117056",
+613 => x"5a575280",
+614 => x"cfec0851",
+615 => x"84943f80",
+616 => x"08802eff",
+617 => x"a7388008",
+618 => x"901b0c80",
+619 => x"08167a0c",
+620 => x"77941b0c",
+621 => x"76881b0c",
+622 => x"7656fd99",
+623 => x"39790858",
+624 => x"901a0878",
+625 => x"27833881",
+626 => x"54757727",
+627 => x"843873b3",
+628 => x"38941a08",
+629 => x"54737726",
+630 => x"80d33873",
+631 => x"5378529c",
+632 => x"1a0851a4",
+633 => x"1a085877",
+634 => x"2d800856",
+635 => x"80088024",
+636 => x"fd83388c",
+637 => x"1a2280c0",
+638 => x"075e7d8c",
+639 => x"1b23ff55",
+640 => x"fed73975",
+641 => x"53785277",
+642 => x"5181dd3f",
+643 => x"7908167a",
+644 => x"0c79518d",
+645 => x"953f8008",
+646 => x"802efcd9",
+647 => x"388c1a22",
+648 => x"80c0075e",
+649 => x"7d8c1b23",
+650 => x"ff55fead",
+651 => x"39767754",
+652 => x"79537852",
+653 => x"5681b13f",
+654 => x"881a0877",
+655 => x"31881b0c",
+656 => x"7908177a",
+657 => x"0cfcae39",
+658 => x"fa3d0d7a",
+659 => x"79028805",
+660 => x"a7053355",
+661 => x"53548374",
+662 => x"2780df38",
+663 => x"71830651",
+664 => x"7080d738",
+665 => x"71715755",
+666 => x"83517582",
+667 => x"802913ff",
+668 => x"12525670",
+669 => x"8025f338",
+670 => x"837427bc",
+671 => x"38740876",
+672 => x"327009f7",
+673 => x"fbfdff12",
+674 => x"06f88482",
+675 => x"81800651",
+676 => x"5170802e",
+677 => x"98387451",
+678 => x"80527033",
+679 => x"5772772e",
+680 => x"b9388111",
+681 => x"81135351",
+682 => x"837227ee",
+683 => x"38fc1484",
+684 => x"16565473",
+685 => x"8326c638",
+686 => x"7452ff14",
+687 => x"5170ff2e",
+688 => x"97387133",
+689 => x"5472742e",
+690 => x"98388112",
+691 => x"ff125252",
+692 => x"70ff2e09",
+693 => x"8106eb38",
+694 => x"80517080",
+695 => x"0c883d0d",
+696 => x"0471800c",
+697 => x"883d0d04",
+698 => x"fa3d0d78",
+699 => x"7a7c7272",
+700 => x"72595755",
+701 => x"58565774",
+702 => x"7727b238",
+703 => x"75155176",
+704 => x"7127aa38",
+705 => x"707618ff",
+706 => x"18535353",
+707 => x"70ff2e96",
+708 => x"38ff12ff",
+709 => x"14545272",
+710 => x"337234ff",
+711 => x"115170ff",
+712 => x"2e098106",
+713 => x"ec387680",
+714 => x"0c883d0d",
+715 => x"048f7627",
+716 => x"80e63874",
+717 => x"77078306",
+718 => x"517080dc",
+719 => x"38767552",
+720 => x"53707084",
+721 => x"05520873",
+722 => x"70840555",
+723 => x"0c727170",
+724 => x"84055308",
+725 => x"71708405",
+726 => x"530c7170",
+727 => x"84055308",
+728 => x"71708405",
+729 => x"530c7170",
+730 => x"84055308",
+731 => x"71708405",
+732 => x"530cf015",
+733 => x"5553738f",
+734 => x"26c73883",
+735 => x"74279538",
+736 => x"70708405",
+737 => x"52087370",
+738 => x"8405550c",
+739 => x"fc145473",
+740 => x"8326ed38",
+741 => x"72715452",
+742 => x"ff145170",
+743 => x"ff2eff86",
+744 => x"38727081",
+745 => x"05543372",
+746 => x"70810554",
+747 => x"34ff1151",
+748 => x"ea39ef3d",
+749 => x"0d636567",
+750 => x"405d427b",
+751 => x"802e8582",
+752 => x"386151a9",
+753 => x"e73ff81c",
+754 => x"70841208",
+755 => x"70fc0670",
+756 => x"628b0570",
+757 => x"f8064159",
+758 => x"455c5f41",
+759 => x"57967427",
+760 => x"82c53880",
+761 => x"7b247e7c",
+762 => x"26075880",
+763 => x"5477742e",
+764 => x"09810682",
+765 => x"ab38787b",
+766 => x"2581fe38",
+767 => x"781780d7",
+768 => x"a80b8805",
+769 => x"085b5679",
+770 => x"762e84c5",
+771 => x"38841608",
+772 => x"70fe0617",
+773 => x"84110881",
+774 => x"06415555",
+775 => x"7e828d38",
+776 => x"74fc0658",
+777 => x"79762e84",
+778 => x"e3387818",
+779 => x"5f7e7b25",
+780 => x"81ff387c",
+781 => x"81065473",
+782 => x"82c13876",
+783 => x"77083184",
+784 => x"1108fc06",
+785 => x"56577580",
+786 => x"2e913879",
+787 => x"762e84f0",
+788 => x"38741819",
+789 => x"58777b25",
+790 => x"84913876",
+791 => x"802e829b",
+792 => x"38781556",
+793 => x"7a762482",
+794 => x"92388c17",
+795 => x"08881808",
+796 => x"718c120c",
+797 => x"88120c5e",
+798 => x"75598817",
+799 => x"61fc055b",
+800 => x"5679a426",
+801 => x"85ff387b",
+802 => x"76595593",
+803 => x"7a2780c9",
+804 => x"387b7084",
+805 => x"055d087c",
+806 => x"56760c74",
+807 => x"70840556",
+808 => x"088c180c",
+809 => x"9017589b",
+810 => x"7a27ae38",
+811 => x"74708405",
+812 => x"5608780c",
+813 => x"74708405",
+814 => x"56089418",
+815 => x"0c981758",
+816 => x"a37a2795",
+817 => x"38747084",
+818 => x"05560878",
+819 => x"0c747084",
+820 => x"0556089c",
+821 => x"180ca017",
+822 => x"58747084",
+823 => x"05560875",
+824 => x"5f787084",
+825 => x"055a0c77",
+826 => x"7e708405",
+827 => x"40087170",
+828 => x"8405530c",
+829 => x"7e08710c",
+830 => x"5d787b31",
+831 => x"56758f26",
+832 => x"80c93884",
+833 => x"17088106",
+834 => x"79078418",
+835 => x"0c781784",
+836 => x"11088107",
+837 => x"84120c5b",
+838 => x"6151a791",
+839 => x"3f881754",
+840 => x"73800c93",
+841 => x"3d0d0490",
+842 => x"5bfdb839",
+843 => x"7756fe83",
+844 => x"398c1608",
+845 => x"88170871",
+846 => x"8c120c88",
+847 => x"120c587e",
+848 => x"707c3157",
+849 => x"598f7627",
+850 => x"ffb9387a",
+851 => x"17841808",
+852 => x"81067c07",
+853 => x"84190c76",
+854 => x"81078412",
+855 => x"0c761184",
+856 => x"11088107",
+857 => x"84120c5b",
+858 => x"88055261",
+859 => x"518fda3f",
+860 => x"6151a6b9",
+861 => x"3f881754",
+862 => x"ffa6397d",
+863 => x"52615197",
+864 => x"d73f8008",
+865 => x"5a800880",
+866 => x"2e81ab38",
+867 => x"8008f805",
+868 => x"60840508",
+869 => x"fe066105",
+870 => x"58557477",
+871 => x"2e83f238",
+872 => x"fc195877",
+873 => x"a42681b0",
+874 => x"387b8008",
+875 => x"56579378",
+876 => x"2780dc38",
+877 => x"7b707084",
+878 => x"05520880",
+879 => x"08708405",
+880 => x"800c0c80",
+881 => x"08717084",
+882 => x"0553085d",
+883 => x"567b7670",
+884 => x"8405580c",
+885 => x"579b7827",
+886 => x"b6387670",
+887 => x"84055808",
+888 => x"75708405",
+889 => x"570c7670",
+890 => x"84055808",
+891 => x"75708405",
+892 => x"570ca378",
+893 => x"27993876",
+894 => x"70840558",
+895 => x"08757084",
+896 => x"05570c76",
+897 => x"70840558",
+898 => x"08757084",
+899 => x"05570c76",
+900 => x"70840558",
+901 => x"08775e75",
+902 => x"70840557",
+903 => x"0c747d70",
+904 => x"84055f08",
+905 => x"71708405",
+906 => x"530c7d08",
+907 => x"710c5f7b",
+908 => x"5261518e",
+909 => x"943f6151",
+910 => x"a4f33f79",
+911 => x"800c933d",
+912 => x"0d047d52",
+913 => x"61519690",
+914 => x"3f800880",
+915 => x"0c933d0d",
+916 => x"04841608",
+917 => x"55fbc939",
+918 => x"77537b52",
+919 => x"800851a2",
+920 => x"a53f7b52",
+921 => x"61518de1",
+922 => x"3fcc398c",
+923 => x"16088817",
+924 => x"08718c12",
+925 => x"0c88120c",
+926 => x"5d8c1708",
+927 => x"88180871",
+928 => x"8c120c88",
+929 => x"120c5977",
+930 => x"59fbef39",
+931 => x"7818901c",
+932 => x"40557e75",
+933 => x"24fb9c38",
+934 => x"7a177080",
+935 => x"d7a80b88",
+936 => x"050c757c",
+937 => x"31810784",
+938 => x"120c5684",
+939 => x"17088106",
+940 => x"7b078418",
+941 => x"0c6151a3",
+942 => x"f43f8817",
+943 => x"54fce139",
+944 => x"74181990",
+945 => x"1c5e5a7c",
+946 => x"7a24fb8f",
+947 => x"388c1708",
+948 => x"88180871",
+949 => x"8c120c88",
+950 => x"120c5e88",
+951 => x"1761fc05",
+952 => x"575975a4",
+953 => x"2681b638",
+954 => x"7b795955",
+955 => x"93762780",
+956 => x"c9387b70",
+957 => x"84055d08",
+958 => x"7c56790c",
+959 => x"74708405",
+960 => x"56088c18",
+961 => x"0c901758",
+962 => x"9b7627ae",
+963 => x"38747084",
+964 => x"05560878",
+965 => x"0c747084",
+966 => x"05560894",
+967 => x"180c9817",
+968 => x"58a37627",
+969 => x"95387470",
+970 => x"84055608",
+971 => x"780c7470",
+972 => x"84055608",
+973 => x"9c180ca0",
+974 => x"17587470",
+975 => x"84055608",
+976 => x"75417870",
+977 => x"84055a0c",
+978 => x"77607084",
+979 => x"05420871",
+980 => x"70840553",
+981 => x"0c600871",
+982 => x"0c5e7a17",
+983 => x"7080d7a8",
+984 => x"0b88050c",
+985 => x"7a7c3181",
+986 => x"0784120c",
+987 => x"58841708",
+988 => x"81067b07",
+989 => x"84180c61",
+990 => x"51a2b23f",
+991 => x"78547380",
+992 => x"0c933d0d",
+993 => x"0479537b",
+994 => x"5275519f",
+995 => x"f93ffae9",
+996 => x"39841508",
+997 => x"fc061960",
+998 => x"5859fadd",
+999 => x"3975537b",
+1000 => x"5278519f",
+1001 => x"e13f7a17",
+1002 => x"7080d7a8",
+1003 => x"0b88050c",
+1004 => x"7a7c3181",
+1005 => x"0784120c",
+1006 => x"58841708",
+1007 => x"81067b07",
+1008 => x"84180c61",
+1009 => x"51a1e63f",
+1010 => x"7854ffb2",
+1011 => x"39fa3d0d",
+1012 => x"7880cfec",
+1013 => x"085455b8",
+1014 => x"1308802e",
+1015 => x"81af388c",
+1016 => x"15227083",
+1017 => x"ffff0670",
+1018 => x"832a8132",
+1019 => x"81065555",
+1020 => x"5672802e",
+1021 => x"80da3873",
+1022 => x"842a8132",
+1023 => x"810657ff",
+1024 => x"537680f2",
+1025 => x"3873822a",
+1026 => x"81065473",
+1027 => x"802eb938",
+1028 => x"b0150854",
+1029 => x"73802e9c",
+1030 => x"3880c015",
+1031 => x"5373732e",
+1032 => x"8f387352",
+1033 => x"80cfec08",
+1034 => x"518a9e3f",
+1035 => x"8c152256",
+1036 => x"76b0160c",
+1037 => x"75db0657",
+1038 => x"768c1623",
+1039 => x"800b8416",
+1040 => x"0c901508",
+1041 => x"750c7656",
+1042 => x"75880754",
+1043 => x"738c1623",
+1044 => x"90150880",
+1045 => x"2ebf388c",
+1046 => x"15227081",
+1047 => x"06555373",
+1048 => x"9c38720a",
+1049 => x"100a8106",
+1050 => x"56758538",
+1051 => x"94150854",
+1052 => x"7388160c",
+1053 => x"80537280",
+1054 => x"0c883d0d",
+1055 => x"04800b88",
+1056 => x"160c9415",
+1057 => x"08309816",
+1058 => x"0c8053ea",
+1059 => x"39725182",
+1060 => x"a63ffecb",
+1061 => x"3974518f",
+1062 => x"bc3f8c15",
+1063 => x"22708106",
+1064 => x"55537380",
+1065 => x"2effbb38",
+1066 => x"d439f83d",
+1067 => x"0d7a5776",
+1068 => x"802e8197",
+1069 => x"3880cfec",
+1070 => x"0854b814",
+1071 => x"08802e80",
+1072 => x"eb388c17",
+1073 => x"2270902b",
+1074 => x"70902c70",
+1075 => x"832a8132",
+1076 => x"81065b5b",
+1077 => x"57557780",
+1078 => x"cb389017",
+1079 => x"08567580",
+1080 => x"2e80c138",
+1081 => x"76087631",
+1082 => x"76780c79",
+1083 => x"83065555",
+1084 => x"73853894",
+1085 => x"17085877",
+1086 => x"88180c80",
+1087 => x"7525a538",
+1088 => x"74537552",
+1089 => x"9c170851",
+1090 => x"a4170854",
+1091 => x"732d800b",
+1092 => x"80082580",
+1093 => x"c9388008",
+1094 => x"16758008",
+1095 => x"31565674",
+1096 => x"8024dd38",
+1097 => x"800b800c",
+1098 => x"8a3d0d04",
+1099 => x"73518187",
+1100 => x"3f8c1722",
+1101 => x"70902b70",
+1102 => x"902c7083",
+1103 => x"2a813281",
+1104 => x"065b5b57",
+1105 => x"5577dd38",
+1106 => x"ff9039a1",
+1107 => x"aa5280cf",
+1108 => x"ec08518c",
+1109 => x"d03f8008",
+1110 => x"800c8a3d",
+1111 => x"0d048c17",
+1112 => x"2280c007",
+1113 => x"58778c18",
+1114 => x"23ff0b80",
+1115 => x"0c8a3d0d",
+1116 => x"04fa3d0d",
+1117 => x"797080dc",
+1118 => x"298c1154",
+1119 => x"7a535657",
+1120 => x"8fd63f80",
+1121 => x"08800855",
+1122 => x"56800880",
+1123 => x"2ea23880",
+1124 => x"088c0554",
+1125 => x"800b8008",
+1126 => x"0c768008",
+1127 => x"84050c73",
+1128 => x"80088805",
+1129 => x"0c745380",
+1130 => x"5273519c",
+1131 => x"f53f7554",
+1132 => x"73800c88",
+1133 => x"3d0d0470",
+1134 => x"707074a8",
+1135 => x"f60bbc12",
+1136 => x"0c53810b",
+1137 => x"b8140c80",
+1138 => x"0b84dc14",
+1139 => x"0c830b84",
+1140 => x"e0140c84",
+1141 => x"e81384e4",
+1142 => x"140c8413",
+1143 => x"08518070",
+1144 => x"720c7084",
+1145 => x"130c7088",
+1146 => x"130c5284",
+1147 => x"0b8c1223",
+1148 => x"718e1223",
+1149 => x"7190120c",
+1150 => x"7194120c",
+1151 => x"7198120c",
+1152 => x"709c120c",
+1153 => x"80c1e50b",
+1154 => x"a0120c80",
+1155 => x"c2b10ba4",
+1156 => x"120c80c3",
+1157 => x"ad0ba812",
+1158 => x"0c80c3fe",
+1159 => x"0bac120c",
+1160 => x"88130872",
+1161 => x"710c7284",
+1162 => x"120c7288",
+1163 => x"120c5189",
+1164 => x"0b8c1223",
+1165 => x"810b8e12",
+1166 => x"23719012",
+1167 => x"0c719412",
+1168 => x"0c719812",
+1169 => x"0c709c12",
+1170 => x"0c80c1e5",
+1171 => x"0ba0120c",
+1172 => x"80c2b10b",
+1173 => x"a4120c80",
+1174 => x"c3ad0ba8",
+1175 => x"120c80c3",
+1176 => x"fe0bac12",
+1177 => x"0c8c1308",
+1178 => x"72710c72",
+1179 => x"84120c72",
+1180 => x"88120c51",
+1181 => x"8a0b8c12",
+1182 => x"23820b8e",
+1183 => x"12237190",
+1184 => x"120c7194",
+1185 => x"120c7198",
+1186 => x"120c709c",
+1187 => x"120c80c1",
+1188 => x"e50ba012",
+1189 => x"0c80c2b1",
+1190 => x"0ba4120c",
+1191 => x"80c3ad0b",
+1192 => x"a8120c80",
+1193 => x"c3fe0bac",
+1194 => x"120c5050",
+1195 => x"5004f83d",
+1196 => x"0d7a80cf",
+1197 => x"ec08b811",
+1198 => x"08575758",
+1199 => x"7481ec38",
+1200 => x"a8f60bbc",
+1201 => x"170c810b",
+1202 => x"b8170c74",
+1203 => x"84dc170c",
+1204 => x"830b84e0",
+1205 => x"170c84e8",
+1206 => x"1684e417",
+1207 => x"0c841608",
+1208 => x"75710c75",
+1209 => x"84120c75",
+1210 => x"88120c59",
+1211 => x"840b8c1a",
+1212 => x"23748e1a",
+1213 => x"2374901a",
+1214 => x"0c74941a",
+1215 => x"0c74981a",
+1216 => x"0c789c1a",
+1217 => x"0c80c1e5",
+1218 => x"0ba01a0c",
+1219 => x"80c2b10b",
+1220 => x"a41a0c80",
+1221 => x"c3ad0ba8",
+1222 => x"1a0c80c3",
+1223 => x"fe0bac1a",
+1224 => x"0c881608",
+1225 => x"75710c75",
+1226 => x"84120c75",
+1227 => x"88120c57",
+1228 => x"890b8c18",
+1229 => x"23810b8e",
+1230 => x"18237490",
+1231 => x"180c7494",
+1232 => x"180c7498",
+1233 => x"180c769c",
+1234 => x"180c80c1",
+1235 => x"e50ba018",
+1236 => x"0c80c2b1",
+1237 => x"0ba4180c",
+1238 => x"80c3ad0b",
+1239 => x"a8180c80",
+1240 => x"c3fe0bac",
+1241 => x"180c8c16",
+1242 => x"0875710c",
+1243 => x"7584120c",
+1244 => x"7588120c",
+1245 => x"548a0b8c",
+1246 => x"1523820b",
+1247 => x"8e152374",
+1248 => x"90150c74",
+1249 => x"94150c74",
+1250 => x"98150c73",
+1251 => x"9c150c80",
+1252 => x"c1e50ba0",
+1253 => x"150c80c2",
+1254 => x"b10ba415",
+1255 => x"0c80c3ad",
+1256 => x"0ba8150c",
+1257 => x"80c3fe0b",
+1258 => x"ac150c84",
+1259 => x"dc168811",
+1260 => x"08841208",
+1261 => x"ff055757",
+1262 => x"57807524",
+1263 => x"9f388c16",
+1264 => x"2270902b",
+1265 => x"70902c51",
+1266 => x"55597380",
+1267 => x"2e80ed38",
+1268 => x"80dc16ff",
+1269 => x"16565674",
+1270 => x"8025e338",
+1271 => x"76085574",
+1272 => x"802e8f38",
+1273 => x"74881108",
+1274 => x"841208ff",
+1275 => x"05575757",
+1276 => x"c83982fc",
+1277 => x"5277518a",
+1278 => x"df3f8008",
+1279 => x"80085556",
+1280 => x"8008802e",
+1281 => x"a3388008",
+1282 => x"8c057580",
+1283 => x"080c5484",
+1284 => x"0b800884",
+1285 => x"050c7380",
+1286 => x"0888050c",
+1287 => x"82f05374",
+1288 => x"52735197",
+1289 => x"fd3f7554",
+1290 => x"7374780c",
+1291 => x"5573ffb4",
+1292 => x"388c780c",
+1293 => x"800b800c",
+1294 => x"8a3d0d04",
+1295 => x"810b8c17",
+1296 => x"2373760c",
+1297 => x"7388170c",
+1298 => x"7384170c",
+1299 => x"7390170c",
+1300 => x"7394170c",
+1301 => x"7398170c",
+1302 => x"ff0b8e17",
+1303 => x"2373b017",
+1304 => x"0c73b417",
+1305 => x"0c7380c4",
+1306 => x"170c7380",
+1307 => x"c8170c75",
+1308 => x"800c8a3d",
+1309 => x"0d047070",
+1310 => x"a1aa5273",
+1311 => x"5186a63f",
+1312 => x"50500470",
+1313 => x"70a1aa52",
+1314 => x"80cfec08",
+1315 => x"5186963f",
+1316 => x"505004fb",
+1317 => x"3d0d7770",
+1318 => x"52569890",
+1319 => x"3f80d7a8",
+1320 => x"0b880508",
+1321 => x"841108fc",
+1322 => x"06707b31",
+1323 => x"9fef05e0",
+1324 => x"8006e080",
+1325 => x"05525555",
+1326 => x"a0807524",
+1327 => x"94388052",
+1328 => x"755197ea",
+1329 => x"3f80d7b0",
+1330 => x"08145372",
+1331 => x"80082e8f",
+1332 => x"38755197",
+1333 => x"d83f8053",
+1334 => x"72800c87",
+1335 => x"3d0d0474",
+1336 => x"30527551",
+1337 => x"97c83f80",
+1338 => x"08ff2ea8",
+1339 => x"3880d7a8",
+1340 => x"0b880508",
+1341 => x"74763181",
+1342 => x"0784120c",
+1343 => x"5380d6ec",
+1344 => x"08753180",
+1345 => x"d6ec0c75",
+1346 => x"5197a23f",
+1347 => x"810b800c",
+1348 => x"873d0d04",
+1349 => x"80527551",
+1350 => x"97943f80",
+1351 => x"d7a80b88",
+1352 => x"05088008",
+1353 => x"71315454",
+1354 => x"8f7325ff",
+1355 => x"a4388008",
+1356 => x"80d79c08",
+1357 => x"3180d6ec",
+1358 => x"0c728107",
+1359 => x"84150c75",
+1360 => x"5196ea3f",
+1361 => x"8053ff90",
+1362 => x"39f73d0d",
+1363 => x"7b7d545a",
+1364 => x"72802e82",
+1365 => x"83387951",
+1366 => x"96d23ff8",
+1367 => x"13841108",
+1368 => x"70fe0670",
+1369 => x"13841108",
+1370 => x"fc065c57",
+1371 => x"58545780",
+1372 => x"d7b00874",
+1373 => x"2e82de38",
+1374 => x"7784150c",
+1375 => x"80738106",
+1376 => x"56597479",
+1377 => x"2e81d538",
+1378 => x"77148411",
+1379 => x"08810656",
+1380 => x"5374a038",
+1381 => x"77165678",
+1382 => x"81e63888",
+1383 => x"14085574",
+1384 => x"80d7b02e",
+1385 => x"82f9388c",
+1386 => x"1408708c",
+1387 => x"170c7588",
+1388 => x"120c5875",
+1389 => x"81078418",
+1390 => x"0c751776",
+1391 => x"710c5478",
+1392 => x"81913883",
+1393 => x"ff762781",
+1394 => x"c8387589",
+1395 => x"2a76832a",
+1396 => x"54547380",
+1397 => x"2ebf3875",
+1398 => x"862ab805",
+1399 => x"53847427",
+1400 => x"b43880db",
+1401 => x"14539474",
+1402 => x"27ab3875",
+1403 => x"8c2a80ee",
+1404 => x"055380d4",
+1405 => x"74279e38",
+1406 => x"758f2a80",
+1407 => x"f7055382",
+1408 => x"d4742791",
+1409 => x"3875922a",
+1410 => x"80fc0553",
+1411 => x"8ad47427",
+1412 => x"843880fe",
+1413 => x"53721010",
+1414 => x"1080d7a8",
+1415 => x"05881108",
+1416 => x"55557375",
+1417 => x"2e82bf38",
+1418 => x"841408fc",
+1419 => x"06597579",
+1420 => x"278d3888",
+1421 => x"14085473",
+1422 => x"752e0981",
+1423 => x"06ea388c",
+1424 => x"1408708c",
+1425 => x"190c7488",
+1426 => x"190c7788",
+1427 => x"120c5576",
+1428 => x"8c150c79",
+1429 => x"5194d63f",
+1430 => x"8b3d0d04",
+1431 => x"76087771",
+1432 => x"31587605",
+1433 => x"88180856",
+1434 => x"567480d7",
+1435 => x"b02e80e0",
+1436 => x"388c1708",
+1437 => x"708c170c",
+1438 => x"7588120c",
+1439 => x"53fe8939",
+1440 => x"8814088c",
+1441 => x"1508708c",
+1442 => x"130c5988",
+1443 => x"190cfea3",
+1444 => x"3975832a",
+1445 => x"70545480",
+1446 => x"74248198",
+1447 => x"3872822c",
+1448 => x"81712b80",
+1449 => x"d7ac0807",
+1450 => x"80d7a80b",
+1451 => x"84050c74",
+1452 => x"10101080",
+1453 => x"d7a80588",
+1454 => x"1108718c",
+1455 => x"1b0c7088",
+1456 => x"1b0c7988",
+1457 => x"130c565a",
+1458 => x"55768c15",
+1459 => x"0cff8439",
+1460 => x"8159fdb4",
+1461 => x"39771673",
+1462 => x"81065455",
+1463 => x"72983876",
+1464 => x"08777131",
+1465 => x"5875058c",
+1466 => x"18088819",
+1467 => x"08718c12",
+1468 => x"0c88120c",
+1469 => x"55557481",
+1470 => x"0784180c",
+1471 => x"7680d7a8",
+1472 => x"0b88050c",
+1473 => x"80d7a408",
+1474 => x"7526fec7",
+1475 => x"3880d7a0",
+1476 => x"08527951",
+1477 => x"fafd3f79",
+1478 => x"5193923f",
+1479 => x"feba3981",
+1480 => x"778c170c",
+1481 => x"7788170c",
+1482 => x"758c190c",
+1483 => x"7588190c",
+1484 => x"59fd8039",
+1485 => x"83147082",
+1486 => x"2c81712b",
+1487 => x"80d7ac08",
+1488 => x"0780d7a8",
+1489 => x"0b84050c",
+1490 => x"75101010",
+1491 => x"80d7a805",
+1492 => x"88110871",
+1493 => x"8c1c0c70",
+1494 => x"881c0c7a",
+1495 => x"88130c57",
+1496 => x"5b5653fe",
+1497 => x"e4398073",
+1498 => x"24a33872",
+1499 => x"822c8171",
+1500 => x"2b80d7ac",
+1501 => x"080780d7",
+1502 => x"a80b8405",
+1503 => x"0c58748c",
+1504 => x"180c7388",
+1505 => x"180c7688",
+1506 => x"160cfdc3",
+1507 => x"39831370",
+1508 => x"822c8171",
+1509 => x"2b80d7ac",
+1510 => x"080780d7",
+1511 => x"a80b8405",
+1512 => x"0c5953da",
+1513 => x"39f93d0d",
+1514 => x"797b5853",
+1515 => x"800b80cf",
+1516 => x"ec085356",
+1517 => x"72722ebc",
+1518 => x"3884dc13",
+1519 => x"5574762e",
+1520 => x"b3388815",
+1521 => x"08841608",
+1522 => x"ff055454",
+1523 => x"80732499",
+1524 => x"388c1422",
+1525 => x"70902b53",
+1526 => x"587180d4",
+1527 => x"3880dc14",
+1528 => x"ff145454",
+1529 => x"728025e9",
+1530 => x"38740855",
+1531 => x"74d43880",
+1532 => x"cfec0852",
+1533 => x"84dc1255",
+1534 => x"74802ead",
+1535 => x"38881508",
+1536 => x"841608ff",
+1537 => x"05545480",
+1538 => x"73249838",
+1539 => x"8c142270",
+1540 => x"902b5358",
+1541 => x"71ad3880",
+1542 => x"dc14ff14",
+1543 => x"54547280",
+1544 => x"25ea3874",
+1545 => x"085574d5",
+1546 => x"3875800c",
+1547 => x"893d0d04",
+1548 => x"7351762d",
+1549 => x"75800807",
+1550 => x"80dc15ff",
+1551 => x"15555556",
+1552 => x"ffa23973",
+1553 => x"51762d75",
+1554 => x"80080780",
+1555 => x"dc15ff15",
+1556 => x"555556ca",
+1557 => x"39ea3d0d",
+1558 => x"688c1122",
+1559 => x"700a100a",
+1560 => x"81065758",
+1561 => x"567480e4",
+1562 => x"388e1622",
+1563 => x"70902b70",
+1564 => x"902c5155",
+1565 => x"58807424",
+1566 => x"b138983d",
+1567 => x"c4055373",
+1568 => x"5280cfec",
+1569 => x"08519481",
+1570 => x"3f800b80",
+1571 => x"08249738",
+1572 => x"7983e080",
+1573 => x"06547380",
+1574 => x"c0802e81",
+1575 => x"8f387382",
+1576 => x"80802e81",
+1577 => x"91388c16",
+1578 => x"22577690",
+1579 => x"80075473",
+1580 => x"8c172388",
+1581 => x"805280cf",
+1582 => x"ec085181",
+1583 => x"9b3f8008",
+1584 => x"9d388c16",
+1585 => x"22820755",
+1586 => x"748c1723",
+1587 => x"80c31670",
+1588 => x"770c9017",
+1589 => x"0c810b94",
+1590 => x"170c983d",
+1591 => x"0d0480cf",
+1592 => x"ec08a8f6",
+1593 => x"0bbc120c",
+1594 => x"588c1622",
+1595 => x"81800754",
+1596 => x"738c1723",
+1597 => x"8008760c",
+1598 => x"80089017",
+1599 => x"0c88800b",
+1600 => x"94170c74",
+1601 => x"802ed338",
+1602 => x"8e162270",
+1603 => x"902b7090",
+1604 => x"2c535654",
+1605 => x"9afb3f80",
+1606 => x"08802eff",
+1607 => x"bd388c16",
+1608 => x"22810757",
+1609 => x"768c1723",
+1610 => x"983d0d04",
+1611 => x"810b8c17",
+1612 => x"225855fe",
+1613 => x"f539a816",
+1614 => x"0880c3ad",
+1615 => x"2e098106",
+1616 => x"fee4388c",
+1617 => x"16228880",
+1618 => x"0754738c",
+1619 => x"17238880",
+1620 => x"0b80cc17",
+1621 => x"0cfedc39",
+1622 => x"f43d0d7e",
+1623 => x"608b1170",
+1624 => x"f8065b55",
+1625 => x"555d7296",
+1626 => x"26833890",
+1627 => x"58807824",
+1628 => x"74792607",
+1629 => x"55805474",
+1630 => x"742e0981",
+1631 => x"0680ca38",
+1632 => x"7c518ea8",
+1633 => x"3f7783f7",
+1634 => x"2680c538",
+1635 => x"77832a70",
+1636 => x"10101080",
+1637 => x"d7a8058c",
+1638 => x"11085858",
+1639 => x"5475772e",
+1640 => x"81f03884",
+1641 => x"1608fc06",
+1642 => x"8c170888",
+1643 => x"1808718c",
+1644 => x"120c8812",
+1645 => x"0c5b7605",
+1646 => x"84110881",
+1647 => x"0784120c",
+1648 => x"537c518d",
+1649 => x"e83f8816",
+1650 => x"5473800c",
+1651 => x"8e3d0d04",
+1652 => x"77892a78",
+1653 => x"832a5854",
+1654 => x"73802ebf",
+1655 => x"3877862a",
+1656 => x"b8055784",
+1657 => x"7427b438",
+1658 => x"80db1457",
+1659 => x"947427ab",
+1660 => x"38778c2a",
+1661 => x"80ee0557",
+1662 => x"80d47427",
+1663 => x"9e38778f",
+1664 => x"2a80f705",
+1665 => x"5782d474",
+1666 => x"27913877",
+1667 => x"922a80fc",
+1668 => x"05578ad4",
+1669 => x"74278438",
+1670 => x"80fe5776",
+1671 => x"10101080",
+1672 => x"d7a8058c",
+1673 => x"11085653",
+1674 => x"74732ea3",
+1675 => x"38841508",
+1676 => x"fc067079",
+1677 => x"31555673",
+1678 => x"8f2488e4",
+1679 => x"38738025",
+1680 => x"88e6388c",
+1681 => x"15085574",
+1682 => x"732e0981",
+1683 => x"06df3881",
+1684 => x"175980d7",
+1685 => x"b8085675",
+1686 => x"80d7b02e",
+1687 => x"82cc3884",
+1688 => x"1608fc06",
+1689 => x"70793155",
+1690 => x"55738f24",
+1691 => x"bb3880d7",
+1692 => x"b00b80d7",
+1693 => x"bc0c80d7",
+1694 => x"b00b80d7",
+1695 => x"b80c8074",
+1696 => x"2480db38",
+1697 => x"74168411",
+1698 => x"08810784",
+1699 => x"120c53fe",
+1700 => x"b0398816",
+1701 => x"8c110857",
+1702 => x"5975792e",
+1703 => x"098106fe",
+1704 => x"82388214",
+1705 => x"59ffab39",
+1706 => x"77167881",
+1707 => x"0784180c",
+1708 => x"7080d7bc",
+1709 => x"0c7080d7",
+1710 => x"b80c80d7",
+1711 => x"b00b8c12",
+1712 => x"0c8c1108",
+1713 => x"88120c74",
+1714 => x"81078412",
+1715 => x"0c740574",
+1716 => x"710c5b7c",
+1717 => x"518bd63f",
+1718 => x"881654fd",
+1719 => x"ec3983ff",
+1720 => x"75278391",
+1721 => x"3874892a",
+1722 => x"75832a54",
+1723 => x"5473802e",
+1724 => x"bf387486",
+1725 => x"2ab80553",
+1726 => x"847427b4",
+1727 => x"3880db14",
+1728 => x"53947427",
+1729 => x"ab38748c",
+1730 => x"2a80ee05",
+1731 => x"5380d474",
+1732 => x"279e3874",
+1733 => x"8f2a80f7",
+1734 => x"055382d4",
+1735 => x"74279138",
+1736 => x"74922a80",
+1737 => x"fc05538a",
+1738 => x"d4742784",
+1739 => x"3880fe53",
+1740 => x"72101010",
+1741 => x"80d7a805",
+1742 => x"88110855",
+1743 => x"5773772e",
+1744 => x"868b3884",
+1745 => x"1408fc06",
+1746 => x"5b747b27",
+1747 => x"8d388814",
+1748 => x"08547377",
+1749 => x"2e098106",
+1750 => x"ea388c14",
+1751 => x"0880d7a8",
+1752 => x"0b840508",
+1753 => x"718c190c",
+1754 => x"7588190c",
+1755 => x"7788130c",
+1756 => x"5c57758c",
+1757 => x"150c7853",
+1758 => x"80792483",
+1759 => x"98387282",
+1760 => x"2c81712b",
+1761 => x"5656747b",
+1762 => x"2680ca38",
+1763 => x"7a750657",
+1764 => x"7682a338",
+1765 => x"78fc0684",
+1766 => x"05597410",
+1767 => x"707c0655",
+1768 => x"55738292",
+1769 => x"38841959",
+1770 => x"f13980d7",
+1771 => x"a80b8405",
+1772 => x"0879545b",
+1773 => x"788025c6",
+1774 => x"3882da39",
+1775 => x"74097b06",
+1776 => x"7080d7a8",
+1777 => x"0b84050c",
+1778 => x"5b741055",
+1779 => x"747b2685",
+1780 => x"387485bc",
+1781 => x"3880d7a8",
+1782 => x"0b880508",
+1783 => x"70841208",
+1784 => x"fc06707b",
+1785 => x"317b7226",
+1786 => x"8f722507",
+1787 => x"5d575c5c",
+1788 => x"5578802e",
+1789 => x"80d93879",
+1790 => x"1580d7a0",
+1791 => x"08199011",
+1792 => x"59545680",
+1793 => x"d79c08ff",
+1794 => x"2e8838a0",
+1795 => x"8f13e080",
+1796 => x"06577652",
+1797 => x"7c518996",
+1798 => x"3f800854",
+1799 => x"8008ff2e",
+1800 => x"90388008",
+1801 => x"762782a7",
+1802 => x"387480d7",
+1803 => x"a82e829f",
+1804 => x"3880d7a8",
+1805 => x"0b880508",
+1806 => x"55841508",
+1807 => x"fc067079",
+1808 => x"31797226",
+1809 => x"8f722507",
+1810 => x"5d555a7a",
+1811 => x"83f23877",
+1812 => x"81078416",
+1813 => x"0c771570",
+1814 => x"80d7a80b",
+1815 => x"88050c74",
+1816 => x"81078412",
+1817 => x"0c567c51",
+1818 => x"88c33f88",
+1819 => x"15547380",
+1820 => x"0c8e3d0d",
+1821 => x"0474832a",
+1822 => x"70545480",
+1823 => x"7424819b",
+1824 => x"3872822c",
+1825 => x"81712b80",
+1826 => x"d7ac0807",
+1827 => x"7080d7a8",
+1828 => x"0b84050c",
+1829 => x"75101010",
+1830 => x"80d7a805",
+1831 => x"88110871",
+1832 => x"8c1b0c70",
+1833 => x"881b0c79",
+1834 => x"88130c57",
+1835 => x"555c5575",
+1836 => x"8c150cfd",
+1837 => x"c1397879",
+1838 => x"10101080",
+1839 => x"d7a80570",
+1840 => x"565b5c8c",
+1841 => x"14085675",
+1842 => x"742ea338",
+1843 => x"841608fc",
+1844 => x"06707931",
+1845 => x"5853768f",
+1846 => x"2483f138",
+1847 => x"76802584",
+1848 => x"af388c16",
+1849 => x"08567574",
+1850 => x"2e098106",
+1851 => x"df388814",
+1852 => x"811a7083",
+1853 => x"06555a54",
+1854 => x"72c9387b",
+1855 => x"83065675",
+1856 => x"802efdb8",
+1857 => x"38ff1cf8",
+1858 => x"1b5b5c88",
+1859 => x"1a087a2e",
+1860 => x"ea38fdb5",
+1861 => x"39831953",
+1862 => x"fce43983",
+1863 => x"1470822c",
+1864 => x"81712b80",
+1865 => x"d7ac0807",
+1866 => x"7080d7a8",
+1867 => x"0b84050c",
+1868 => x"76101010",
+1869 => x"80d7a805",
+1870 => x"88110871",
+1871 => x"8c1c0c70",
+1872 => x"881c0c7a",
+1873 => x"88130c58",
+1874 => x"535d5653",
+1875 => x"fee13980",
+1876 => x"d6ec0817",
+1877 => x"59800876",
+1878 => x"2e818b38",
+1879 => x"80d79c08",
+1880 => x"ff2e848e",
+1881 => x"38737631",
+1882 => x"1980d6ec",
+1883 => x"0c738706",
+1884 => x"70565372",
+1885 => x"802e8838",
+1886 => x"88733170",
+1887 => x"15555576",
+1888 => x"149fff06",
+1889 => x"a0807131",
+1890 => x"1670547e",
+1891 => x"53515386",
+1892 => x"9d3f8008",
+1893 => x"568008ff",
+1894 => x"2e819e38",
+1895 => x"80d6ec08",
+1896 => x"137080d6",
+1897 => x"ec0c7475",
+1898 => x"80d7a80b",
+1899 => x"88050c77",
+1900 => x"76311581",
+1901 => x"07555659",
+1902 => x"7a80d7a8",
+1903 => x"2e83c038",
+1904 => x"798f2682",
+1905 => x"ef38810b",
+1906 => x"84150c84",
+1907 => x"1508fc06",
+1908 => x"70793179",
+1909 => x"72268f72",
+1910 => x"25075d55",
+1911 => x"5a7a802e",
+1912 => x"fced3880",
+1913 => x"db398008",
+1914 => x"9fff0655",
+1915 => x"74feed38",
+1916 => x"7880d6ec",
+1917 => x"0c80d7a8",
+1918 => x"0b880508",
+1919 => x"7a188107",
+1920 => x"84120c55",
+1921 => x"80d79808",
+1922 => x"79278638",
+1923 => x"7880d798",
+1924 => x"0c80d794",
+1925 => x"087927fc",
+1926 => x"a0387880",
+1927 => x"d7940c84",
+1928 => x"1508fc06",
+1929 => x"70793179",
+1930 => x"72268f72",
+1931 => x"25075d55",
+1932 => x"5a7a802e",
+1933 => x"fc993888",
+1934 => x"39807457",
+1935 => x"53fedd39",
+1936 => x"7c5184e9",
+1937 => x"3f800b80",
+1938 => x"0c8e3d0d",
+1939 => x"04807324",
+1940 => x"a5387282",
+1941 => x"2c81712b",
+1942 => x"80d7ac08",
+1943 => x"077080d7",
+1944 => x"a80b8405",
+1945 => x"0c5c5a76",
+1946 => x"8c170c73",
+1947 => x"88170c75",
+1948 => x"88180cf9",
+1949 => x"fd398313",
+1950 => x"70822c81",
+1951 => x"712b80d7",
+1952 => x"ac080770",
+1953 => x"80d7a80b",
+1954 => x"84050c5d",
+1955 => x"5b53d839",
+1956 => x"7a75065c",
+1957 => x"7bfc9f38",
+1958 => x"84197510",
+1959 => x"5659f139",
+1960 => x"ff178105",
+1961 => x"59f7ab39",
+1962 => x"8c150888",
+1963 => x"1608718c",
+1964 => x"120c8812",
+1965 => x"0c597515",
+1966 => x"84110881",
+1967 => x"0784120c",
+1968 => x"587c5183",
+1969 => x"e83f8815",
+1970 => x"54fba339",
+1971 => x"77167881",
+1972 => x"0784180c",
+1973 => x"8c170888",
+1974 => x"1808718c",
+1975 => x"120c8812",
+1976 => x"0c5c7080",
+1977 => x"d7bc0c70",
+1978 => x"80d7b80c",
+1979 => x"80d7b00b",
+1980 => x"8c120c8c",
+1981 => x"11088812",
+1982 => x"0c778107",
+1983 => x"84120c77",
+1984 => x"0577710c",
+1985 => x"557c5183",
+1986 => x"a43f8816",
+1987 => x"54f5ba39",
+1988 => x"72168411",
+1989 => x"08810784",
+1990 => x"120c588c",
+1991 => x"16088817",
+1992 => x"08718c12",
+1993 => x"0c88120c",
+1994 => x"577c5183",
+1995 => x"803f8816",
+1996 => x"54f59639",
+1997 => x"7284150c",
+1998 => x"f41af806",
+1999 => x"70841d08",
+2000 => x"81060784",
+2001 => x"1d0c701c",
+2002 => x"5556850b",
+2003 => x"84150c85",
+2004 => x"0b88150c",
+2005 => x"8f7627fd",
+2006 => x"ab38881b",
+2007 => x"527c51eb",
+2008 => x"e83f80d7",
+2009 => x"a80b8805",
+2010 => x"0880d6ec",
+2011 => x"085a55fd",
+2012 => x"93397880",
+2013 => x"d6ec0c73",
+2014 => x"80d79c0c",
+2015 => x"fbef3972",
+2016 => x"84150cfc",
+2017 => x"ff39fb3d",
+2018 => x"0d77707a",
+2019 => x"7c585553",
+2020 => x"568f7527",
+2021 => x"80e63872",
+2022 => x"76078306",
+2023 => x"517080dc",
+2024 => x"38757352",
+2025 => x"54707084",
+2026 => x"05520874",
+2027 => x"70840556",
+2028 => x"0c737170",
+2029 => x"84055308",
+2030 => x"71708405",
+2031 => x"530c7170",
+2032 => x"84055308",
+2033 => x"71708405",
+2034 => x"530c7170",
+2035 => x"84055308",
+2036 => x"71708405",
+2037 => x"530cf016",
+2038 => x"5654748f",
+2039 => x"26c73883",
+2040 => x"75279538",
+2041 => x"70708405",
+2042 => x"52087470",
+2043 => x"8405560c",
+2044 => x"fc155574",
+2045 => x"8326ed38",
+2046 => x"73715452",
+2047 => x"ff155170",
+2048 => x"ff2e9838",
+2049 => x"72708105",
+2050 => x"54337270",
+2051 => x"81055434",
+2052 => x"ff115170",
+2053 => x"ff2e0981",
+2054 => x"06ea3875",
+2055 => x"800c873d",
+2056 => x"0d04fb3d",
+2057 => x"0d777a71",
+2058 => x"028c05a3",
+2059 => x"05335854",
+2060 => x"54568373",
+2061 => x"2780d438",
+2062 => x"75830651",
+2063 => x"7080cc38",
+2064 => x"74882b75",
+2065 => x"07707190",
+2066 => x"2b075551",
+2067 => x"8f7327a7",
+2068 => x"38737270",
+2069 => x"8405540c",
+2070 => x"71747170",
+2071 => x"8405530c",
+2072 => x"74717084",
+2073 => x"05530c74",
+2074 => x"71708405",
+2075 => x"530cf014",
+2076 => x"5452728f",
+2077 => x"26db3883",
+2078 => x"73279038",
+2079 => x"73727084",
+2080 => x"05540cfc",
+2081 => x"13537283",
+2082 => x"26f238ff",
+2083 => x"135170ff",
+2084 => x"2e933874",
+2085 => x"72708105",
+2086 => x"5434ff11",
+2087 => x"5170ff2e",
+2088 => x"098106ef",
+2089 => x"3875800c",
+2090 => x"873d0d04",
+2091 => x"04047070",
+2092 => x"7070800b",
+2093 => x"80dfe40c",
+2094 => x"765184f3",
+2095 => x"3f800853",
+2096 => x"8008ff2e",
+2097 => x"89387280",
+2098 => x"0c505050",
+2099 => x"500480df",
+2100 => x"e4085473",
+2101 => x"802eef38",
+2102 => x"7574710c",
+2103 => x"5272800c",
+2104 => x"50505050",
+2105 => x"04f93d0d",
+2106 => x"797c557b",
+2107 => x"548e1122",
+2108 => x"70902b70",
+2109 => x"902c5557",
+2110 => x"80cfec08",
+2111 => x"53585683",
+2112 => x"f63f8008",
+2113 => x"57800b80",
+2114 => x"08249338",
+2115 => x"80d01608",
+2116 => x"80080580",
+2117 => x"d0170c76",
+2118 => x"800c893d",
+2119 => x"0d048c16",
+2120 => x"2283dfff",
+2121 => x"0655748c",
+2122 => x"17237680",
+2123 => x"0c893d0d",
+2124 => x"04fa3d0d",
+2125 => x"788c1122",
+2126 => x"70882a70",
+2127 => x"81065157",
+2128 => x"585674a9",
+2129 => x"388c1622",
+2130 => x"83dfff06",
+2131 => x"55748c17",
+2132 => x"237a5479",
+2133 => x"538e1622",
+2134 => x"70902b70",
+2135 => x"902c5456",
+2136 => x"80cfec08",
+2137 => x"525681b2",
+2138 => x"3f883d0d",
+2139 => x"04825480",
+2140 => x"538e1622",
+2141 => x"70902b70",
+2142 => x"902c5456",
+2143 => x"80cfec08",
+2144 => x"525782bb",
+2145 => x"3f8c1622",
+2146 => x"83dfff06",
+2147 => x"55748c17",
+2148 => x"237a5479",
+2149 => x"538e1622",
+2150 => x"70902b70",
+2151 => x"902c5456",
+2152 => x"80cfec08",
+2153 => x"525680f2",
+2154 => x"3f883d0d",
+2155 => x"04f93d0d",
+2156 => x"797c557b",
+2157 => x"548e1122",
+2158 => x"70902b70",
+2159 => x"902c5557",
+2160 => x"80cfec08",
+2161 => x"53585681",
+2162 => x"f63f8008",
+2163 => x"578008ff",
+2164 => x"2e99388c",
+2165 => x"1622a080",
+2166 => x"0755748c",
+2167 => x"17238008",
+2168 => x"80d0170c",
+2169 => x"76800c89",
+2170 => x"3d0d048c",
+2171 => x"162283df",
+2172 => x"ff065574",
+2173 => x"8c172376",
+2174 => x"800c893d",
+2175 => x"0d047070",
+2176 => x"70748e11",
+2177 => x"2270902b",
+2178 => x"70902c55",
+2179 => x"51515380",
+2180 => x"cfec0851",
+2181 => x"bd3f5050",
+2182 => x"5004fb3d",
+2183 => x"0d800b80",
+2184 => x"dfe40c7a",
+2185 => x"53795278",
+2186 => x"5182fc3f",
+2187 => x"80085580",
+2188 => x"08ff2e88",
+2189 => x"3874800c",
+2190 => x"873d0d04",
+2191 => x"80dfe408",
+2192 => x"5675802e",
+2193 => x"f0387776",
+2194 => x"710c5474",
+2195 => x"800c873d",
+2196 => x"0d047070",
+2197 => x"7070800b",
+2198 => x"80dfe40c",
+2199 => x"765184c9",
+2200 => x"3f800853",
+2201 => x"8008ff2e",
+2202 => x"89387280",
+2203 => x"0c505050",
+2204 => x"500480df",
+2205 => x"e4085473",
+2206 => x"802eef38",
+2207 => x"7574710c",
+2208 => x"5272800c",
+2209 => x"50505050",
+2210 => x"04fc3d0d",
+2211 => x"800b80df",
+2212 => x"e40c7852",
+2213 => x"775187b0",
+2214 => x"3f800854",
+2215 => x"8008ff2e",
+2216 => x"88387380",
+2217 => x"0c863d0d",
+2218 => x"0480dfe4",
+2219 => x"08557480",
+2220 => x"2ef03876",
+2221 => x"75710c53",
+2222 => x"73800c86",
+2223 => x"3d0d04fb",
+2224 => x"3d0d800b",
+2225 => x"80dfe40c",
+2226 => x"7a537952",
+2227 => x"7851848b",
+2228 => x"3f800855",
+2229 => x"8008ff2e",
+2230 => x"88387480",
+2231 => x"0c873d0d",
+2232 => x"0480dfe4",
+2233 => x"08567580",
+2234 => x"2ef03877",
+2235 => x"76710c54",
+2236 => x"74800c87",
+2237 => x"3d0d04fb",
+2238 => x"3d0d800b",
+2239 => x"80dfe40c",
+2240 => x"7a537952",
+2241 => x"78518293",
+2242 => x"3f800855",
+2243 => x"8008ff2e",
+2244 => x"88387480",
+2245 => x"0c873d0d",
+2246 => x"0480dfe4",
+2247 => x"08567580",
+2248 => x"2ef03877",
+2249 => x"76710c54",
+2250 => x"74800c87",
+2251 => x"3d0d0470",
+2252 => x"707080df",
+2253 => x"d8088938",
+2254 => x"80dfe80b",
+2255 => x"80dfd80c",
+2256 => x"80dfd808",
+2257 => x"75115252",
+2258 => x"ff537087",
+2259 => x"fb808026",
+2260 => x"88387080",
+2261 => x"dfd80c71",
+2262 => x"5372800c",
+2263 => x"50505004",
+2264 => x"fd3d0d80",
+2265 => x"0b80cfe0",
+2266 => x"08545472",
+2267 => x"812e9b38",
+2268 => x"7380dfdc",
+2269 => x"0cc2af3f",
+2270 => x"c1863f80",
+2271 => x"dfb05281",
+2272 => x"51c3ff3f",
+2273 => x"80085186",
+2274 => x"bf3f7280",
+2275 => x"dfdc0cc2",
+2276 => x"953fc0ec",
+2277 => x"3f80dfb0",
+2278 => x"528151c3",
+2279 => x"e53f8008",
+2280 => x"5186a53f",
+2281 => x"00ff39f5",
+2282 => x"3d0d7e60",
+2283 => x"80dfdc08",
+2284 => x"705b585b",
+2285 => x"5b7580c2",
+2286 => x"38777a25",
+2287 => x"a138771b",
+2288 => x"70337081",
+2289 => x"ff065858",
+2290 => x"59758a2e",
+2291 => x"98387681",
+2292 => x"ff0651c1",
+2293 => x"b03f8118",
+2294 => x"58797824",
+2295 => x"e1387980",
+2296 => x"0c8d3d0d",
+2297 => x"048d51c1",
+2298 => x"9c3f7833",
+2299 => x"7081ff06",
+2300 => x"5257c191",
+2301 => x"3f811858",
+2302 => x"e0397955",
+2303 => x"7a547d53",
+2304 => x"85528d3d",
+2305 => x"fc0551c0",
+2306 => x"b93f8008",
+2307 => x"5685b23f",
+2308 => x"7b80080c",
+2309 => x"75800c8d",
+2310 => x"3d0d04f6",
+2311 => x"3d0d7d7f",
+2312 => x"80dfdc08",
+2313 => x"705b585a",
+2314 => x"5a7580c1",
+2315 => x"38777925",
+2316 => x"b338c0ac",
+2317 => x"3f800881",
+2318 => x"ff06708d",
+2319 => x"32703070",
+2320 => x"9f2a5151",
+2321 => x"5757768a",
+2322 => x"2e80c438",
+2323 => x"75802ebf",
+2324 => x"38771a56",
+2325 => x"76763476",
+2326 => x"51c0aa3f",
+2327 => x"81185878",
+2328 => x"7824cf38",
+2329 => x"77567580",
+2330 => x"0c8c3d0d",
+2331 => x"04785579",
+2332 => x"547c5384",
+2333 => x"528c3dfc",
+2334 => x"0551ffbf",
+2335 => x"c53f8008",
+2336 => x"5684be3f",
+2337 => x"7a80080c",
+2338 => x"75800c8c",
+2339 => x"3d0d0477",
+2340 => x"1a598a79",
+2341 => x"34811858",
+2342 => x"8d51ffbf",
+2343 => x"e83f8a51",
+2344 => x"ffbfe23f",
+2345 => x"7756ffbe",
+2346 => x"39fb3d0d",
+2347 => x"80dfdc08",
+2348 => x"70565473",
+2349 => x"88387480",
+2350 => x"0c873d0d",
+2351 => x"04775383",
+2352 => x"52873dfc",
+2353 => x"0551ffbe",
+2354 => x"f93f8008",
+2355 => x"5483f23f",
+2356 => x"7580080c",
+2357 => x"73800c87",
+2358 => x"3d0d04fa",
+2359 => x"3d0d80df",
+2360 => x"dc08802e",
+2361 => x"a3387a55",
+2362 => x"79547853",
+2363 => x"8652883d",
+2364 => x"fc0551ff",
+2365 => x"becc3f80",
+2366 => x"085683c5",
+2367 => x"3f768008",
+2368 => x"0c75800c",
+2369 => x"883d0d04",
+2370 => x"83b73f9d",
+2371 => x"0b80080c",
+2372 => x"ff0b800c",
+2373 => x"883d0d04",
+2374 => x"f73d0d7b",
+2375 => x"7d5b59bc",
+2376 => x"53805279",
+2377 => x"51f5fb3f",
+2378 => x"80705657",
+2379 => x"98567419",
+2380 => x"70337078",
+2381 => x"2b790781",
+2382 => x"18f81a5a",
+2383 => x"58595558",
+2384 => x"847524ea",
+2385 => x"38767a23",
+2386 => x"84195880",
+2387 => x"70565798",
+2388 => x"56741870",
+2389 => x"3370782b",
+2390 => x"79078118",
+2391 => x"f81a5a58",
+2392 => x"59515484",
+2393 => x"7524ea38",
+2394 => x"76821b23",
+2395 => x"88195880",
+2396 => x"70565798",
+2397 => x"56741870",
+2398 => x"3370782b",
+2399 => x"79078118",
+2400 => x"f81a5a58",
+2401 => x"59515484",
+2402 => x"7524ea38",
+2403 => x"76841b0c",
+2404 => x"8c195880",
+2405 => x"70565798",
+2406 => x"56741870",
+2407 => x"3370782b",
+2408 => x"79078118",
+2409 => x"f81a5a58",
+2410 => x"59515484",
+2411 => x"7524ea38",
+2412 => x"76881b23",
+2413 => x"90195880",
+2414 => x"70565798",
+2415 => x"56741870",
+2416 => x"3370782b",
+2417 => x"79078118",
+2418 => x"f81a5a58",
+2419 => x"59515484",
+2420 => x"7524ea38",
+2421 => x"768a1b23",
+2422 => x"94195880",
+2423 => x"70565798",
+2424 => x"56741870",
+2425 => x"3370782b",
+2426 => x"79078118",
+2427 => x"f81a5a58",
+2428 => x"59515484",
+2429 => x"7524ea38",
+2430 => x"768c1b23",
+2431 => x"98195880",
+2432 => x"70565798",
+2433 => x"56741870",
+2434 => x"3370782b",
+2435 => x"79078118",
+2436 => x"f81a5a58",
+2437 => x"59515484",
+2438 => x"7524ea38",
+2439 => x"768e1b23",
+2440 => x"9c195880",
+2441 => x"705657b8",
+2442 => x"56741870",
+2443 => x"3370782b",
+2444 => x"79078118",
+2445 => x"f81a5a58",
+2446 => x"595a5488",
+2447 => x"7524ea38",
+2448 => x"76901b0c",
+2449 => x"8b3d0d04",
+2450 => x"e93d0d6a",
+2451 => x"80dfdc08",
+2452 => x"57577593",
+2453 => x"3880c080",
+2454 => x"0b84180c",
+2455 => x"75ac180c",
+2456 => x"75800c99",
+2457 => x"3d0d0489",
+2458 => x"3d70556a",
+2459 => x"54558a52",
+2460 => x"993dffbc",
+2461 => x"0551ffbb",
+2462 => x"c93f8008",
+2463 => x"77537552",
+2464 => x"56fd953f",
+2465 => x"bc3f7780",
+2466 => x"080c7580",
+2467 => x"0c993d0d",
+2468 => x"04fc3d0d",
+2469 => x"815480df",
+2470 => x"dc088838",
+2471 => x"73800c86",
+2472 => x"3d0d0476",
+2473 => x"5397b952",
+2474 => x"863dfc05",
+2475 => x"51ffbb92",
+2476 => x"3f800854",
+2477 => x"8c3f7480",
+2478 => x"080c7380",
+2479 => x"0c863d0d",
+2480 => x"0480cfec",
+2481 => x"08800c04",
+2482 => x"f73d0d7b",
+2483 => x"80cfec08",
+2484 => x"82c81108",
+2485 => x"5a545a77",
+2486 => x"802e80da",
+2487 => x"38818818",
+2488 => x"841908ff",
+2489 => x"0581712b",
+2490 => x"59555980",
+2491 => x"742480ea",
+2492 => x"38807424",
+2493 => x"b5387382",
+2494 => x"2b781188",
+2495 => x"05565681",
+2496 => x"80190877",
+2497 => x"06537280",
+2498 => x"2eb63878",
+2499 => x"16700853",
+2500 => x"53795174",
+2501 => x"0853722d",
+2502 => x"ff14fc17",
+2503 => x"fc177981",
+2504 => x"2c5a5757",
+2505 => x"54738025",
+2506 => x"d6387708",
+2507 => x"5877ffad",
+2508 => x"3880cfec",
+2509 => x"0853bc13",
+2510 => x"08a53879",
+2511 => x"51f8e53f",
+2512 => x"74085372",
+2513 => x"2dff14fc",
+2514 => x"17fc1779",
+2515 => x"812c5a57",
+2516 => x"57547380",
+2517 => x"25ffa838",
+2518 => x"d1398057",
+2519 => x"ff933972",
+2520 => x"51bc1308",
+2521 => x"54732d79",
+2522 => x"51f8b93f",
+2523 => x"707080df",
+2524 => x"b80bfc05",
+2525 => x"70085252",
+2526 => x"70ff2e91",
+2527 => x"38702dfc",
+2528 => x"12700852",
+2529 => x"5270ff2e",
+2530 => x"098106f1",
+2531 => x"38505004",
+2532 => x"04ffbaff",
+2533 => x"3f040000",
+2534 => x"00000040",
+2535 => x"476f7420",
+2536 => x"696e7465",
+2537 => x"72727570",
+2538 => x"740a0000",
+2539 => x"4e6f2069",
+2540 => x"6e746572",
+2541 => x"72757074",
+2542 => x"0a000000",
+2543 => x"43000000",
+2544 => x"64756d6d",
+2545 => x"792e6578",
+2546 => x"65000000",
+2547 => x"00ffffff",
+2548 => x"ff00ffff",
+2549 => x"ffff00ff",
+2550 => x"ffffff00",
+2551 => x"00000000",
+2552 => x"00000000",
+2553 => x"00000000",
+2554 => x"00002fc0",
+2555 => x"000027f0",
+2556 => x"00000000",
+2557 => x"00002a58",
+2558 => x"00002ab4",
+2559 => x"00002b10",
+2560 => x"00000000",
+2561 => x"00000000",
+2562 => x"00000000",
+2563 => x"00000000",
+2564 => x"00000000",
+2565 => x"00000000",
+2566 => x"00000000",
+2567 => x"00000000",
+2568 => x"00000000",
+2569 => x"000027bc",
+2570 => x"00000000",
+2571 => x"00000000",
+2572 => x"00000000",
+2573 => x"00000000",
+2574 => x"00000000",
+2575 => x"00000000",
+2576 => x"00000000",
+2577 => x"00000000",
+2578 => x"00000000",
+2579 => x"00000000",
+2580 => x"00000000",
+2581 => x"00000000",
+2582 => x"00000000",
+2583 => x"00000000",
+2584 => x"00000000",
+2585 => x"00000000",
+2586 => x"00000000",
+2587 => x"00000000",
+2588 => x"00000000",
+2589 => x"00000000",
+2590 => x"00000000",
+2591 => x"00000000",
+2592 => x"00000000",
+2593 => x"00000000",
+2594 => x"00000000",
+2595 => x"00000000",
+2596 => x"00000000",
+2597 => x"00000000",
+2598 => x"00000001",
+2599 => x"330eabcd",
+2600 => x"1234e66d",
+2601 => x"deec0005",
+2602 => x"000b0000",
+2603 => x"00000000",
+2604 => x"00000000",
+2605 => x"00000000",
+2606 => x"00000000",
+2607 => x"00000000",
+2608 => x"00000000",
+2609 => x"00000000",
+2610 => x"00000000",
+2611 => x"00000000",
+2612 => x"00000000",
+2613 => x"00000000",
+2614 => x"00000000",
+2615 => x"00000000",
+2616 => x"00000000",
+2617 => x"00000000",
+2618 => x"00000000",
+2619 => x"00000000",
+2620 => x"00000000",
+2621 => x"00000000",
+2622 => x"00000000",
+2623 => x"00000000",
+2624 => x"00000000",
+2625 => x"00000000",
+2626 => x"00000000",
+2627 => x"00000000",
+2628 => x"00000000",
+2629 => x"00000000",
+2630 => x"00000000",
+2631 => x"00000000",
+2632 => x"00000000",
+2633 => x"00000000",
+2634 => x"00000000",
+2635 => x"00000000",
+2636 => x"00000000",
+2637 => x"00000000",
+2638 => x"00000000",
+2639 => x"00000000",
+2640 => x"00000000",
+2641 => x"00000000",
+2642 => x"00000000",
+2643 => x"00000000",
+2644 => x"00000000",
+2645 => x"00000000",
+2646 => x"00000000",
+2647 => x"00000000",
+2648 => x"00000000",
+2649 => x"00000000",
+2650 => x"00000000",
+2651 => x"00000000",
+2652 => x"00000000",
+2653 => x"00000000",
+2654 => x"00000000",
+2655 => x"00000000",
+2656 => x"00000000",
+2657 => x"00000000",
+2658 => x"00000000",
+2659 => x"00000000",
+2660 => x"00000000",
+2661 => x"00000000",
+2662 => x"00000000",
+2663 => x"00000000",
+2664 => x"00000000",
+2665 => x"00000000",
+2666 => x"00000000",
+2667 => x"00000000",
+2668 => x"00000000",
+2669 => x"00000000",
+2670 => x"00000000",
+2671 => x"00000000",
+2672 => x"00000000",
+2673 => x"00000000",
+2674 => x"00000000",
+2675 => x"00000000",
+2676 => x"00000000",
+2677 => x"00000000",
+2678 => x"00000000",
+2679 => x"00000000",
+2680 => x"00000000",
+2681 => x"00000000",
+2682 => x"00000000",
+2683 => x"00000000",
+2684 => x"00000000",
+2685 => x"00000000",
+2686 => x"00000000",
+2687 => x"00000000",
+2688 => x"00000000",
+2689 => x"00000000",
+2690 => x"00000000",
+2691 => x"00000000",
+2692 => x"00000000",
+2693 => x"00000000",
+2694 => x"00000000",
+2695 => x"00000000",
+2696 => x"00000000",
+2697 => x"00000000",
+2698 => x"00000000",
+2699 => x"00000000",
+2700 => x"00000000",
+2701 => x"00000000",
+2702 => x"00000000",
+2703 => x"00000000",
+2704 => x"00000000",
+2705 => x"00000000",
+2706 => x"00000000",
+2707 => x"00000000",
+2708 => x"00000000",
+2709 => x"00000000",
+2710 => x"00000000",
+2711 => x"00000000",
+2712 => x"00000000",
+2713 => x"00000000",
+2714 => x"00000000",
+2715 => x"00000000",
+2716 => x"00000000",
+2717 => x"00000000",
+2718 => x"00000000",
+2719 => x"00000000",
+2720 => x"00000000",
+2721 => x"00000000",
+2722 => x"00000000",
+2723 => x"00000000",
+2724 => x"00000000",
+2725 => x"00000000",
+2726 => x"00000000",
+2727 => x"00000000",
+2728 => x"00000000",
+2729 => x"00000000",
+2730 => x"00000000",
+2731 => x"00000000",
+2732 => x"00000000",
+2733 => x"00000000",
+2734 => x"00000000",
+2735 => x"00000000",
+2736 => x"00000000",
+2737 => x"00000000",
+2738 => x"00000000",
+2739 => x"00000000",
+2740 => x"00000000",
+2741 => x"00000000",
+2742 => x"00000000",
+2743 => x"00000000",
+2744 => x"00000000",
+2745 => x"00000000",
+2746 => x"00000000",
+2747 => x"00000000",
+2748 => x"00000000",
+2749 => x"00000000",
+2750 => x"00000000",
+2751 => x"00000000",
+2752 => x"00000000",
+2753 => x"00000000",
+2754 => x"00000000",
+2755 => x"00000000",
+2756 => x"00000000",
+2757 => x"00000000",
+2758 => x"00000000",
+2759 => x"00000000",
+2760 => x"00000000",
+2761 => x"00000000",
+2762 => x"00000000",
+2763 => x"00000000",
+2764 => x"00000000",
+2765 => x"00000000",
+2766 => x"00000000",
+2767 => x"00000000",
+2768 => x"00000000",
+2769 => x"00000000",
+2770 => x"00000000",
+2771 => x"00000000",
+2772 => x"00000000",
+2773 => x"00000000",
+2774 => x"00000000",
+2775 => x"00000000",
+2776 => x"00000000",
+2777 => x"00000000",
+2778 => x"00000000",
+2779 => x"00000000",
+2780 => x"00000000",
+2781 => x"00000000",
+2782 => x"00000000",
+2783 => x"00000000",
+2784 => x"00000000",
+2785 => x"00000000",
+2786 => x"00000000",
+2787 => x"00000000",
+2788 => x"00000000",
+2789 => x"00000000",
+2790 => x"00000000",
+2791 => x"ffffffff",
+2792 => x"00000000",
+2793 => x"00020000",
+2794 => x"00000000",
+2795 => x"00000000",
+2796 => x"00002ba8",
+2797 => x"00002ba8",
+2798 => x"00002bb0",
+2799 => x"00002bb0",
+2800 => x"00002bb8",
+2801 => x"00002bb8",
+2802 => x"00002bc0",
+2803 => x"00002bc0",
+2804 => x"00002bc8",
+2805 => x"00002bc8",
+2806 => x"00002bd0",
+2807 => x"00002bd0",
+2808 => x"00002bd8",
+2809 => x"00002bd8",
+2810 => x"00002be0",
+2811 => x"00002be0",
+2812 => x"00002be8",
+2813 => x"00002be8",
+2814 => x"00002bf0",
+2815 => x"00002bf0",
+2816 => x"00002bf8",
+2817 => x"00002bf8",
+2818 => x"00002c00",
+2819 => x"00002c00",
+2820 => x"00002c08",
+2821 => x"00002c08",
+2822 => x"00002c10",
+2823 => x"00002c10",
+2824 => x"00002c18",
+2825 => x"00002c18",
+2826 => x"00002c20",
+2827 => x"00002c20",
+2828 => x"00002c28",
+2829 => x"00002c28",
+2830 => x"00002c30",
+2831 => x"00002c30",
+2832 => x"00002c38",
+2833 => x"00002c38",
+2834 => x"00002c40",
+2835 => x"00002c40",
+2836 => x"00002c48",
+2837 => x"00002c48",
+2838 => x"00002c50",
+2839 => x"00002c50",
+2840 => x"00002c58",
+2841 => x"00002c58",
+2842 => x"00002c60",
+2843 => x"00002c60",
+2844 => x"00002c68",
+2845 => x"00002c68",
+2846 => x"00002c70",
+2847 => x"00002c70",
+2848 => x"00002c78",
+2849 => x"00002c78",
+2850 => x"00002c80",
+2851 => x"00002c80",
+2852 => x"00002c88",
+2853 => x"00002c88",
+2854 => x"00002c90",
+2855 => x"00002c90",
+2856 => x"00002c98",
+2857 => x"00002c98",
+2858 => x"00002ca0",
+2859 => x"00002ca0",
+2860 => x"00002ca8",
+2861 => x"00002ca8",
+2862 => x"00002cb0",
+2863 => x"00002cb0",
+2864 => x"00002cb8",
+2865 => x"00002cb8",
+2866 => x"00002cc0",
+2867 => x"00002cc0",
+2868 => x"00002cc8",
+2869 => x"00002cc8",
+2870 => x"00002cd0",
+2871 => x"00002cd0",
+2872 => x"00002cd8",
+2873 => x"00002cd8",
+2874 => x"00002ce0",
+2875 => x"00002ce0",
+2876 => x"00002ce8",
+2877 => x"00002ce8",
+2878 => x"00002cf0",
+2879 => x"00002cf0",
+2880 => x"00002cf8",
+2881 => x"00002cf8",
+2882 => x"00002d00",
+2883 => x"00002d00",
+2884 => x"00002d08",
+2885 => x"00002d08",
+2886 => x"00002d10",
+2887 => x"00002d10",
+2888 => x"00002d18",
+2889 => x"00002d18",
+2890 => x"00002d20",
+2891 => x"00002d20",
+2892 => x"00002d28",
+2893 => x"00002d28",
+2894 => x"00002d30",
+2895 => x"00002d30",
+2896 => x"00002d38",
+2897 => x"00002d38",
+2898 => x"00002d40",
+2899 => x"00002d40",
+2900 => x"00002d48",
+2901 => x"00002d48",
+2902 => x"00002d50",
+2903 => x"00002d50",
+2904 => x"00002d58",
+2905 => x"00002d58",
+2906 => x"00002d60",
+2907 => x"00002d60",
+2908 => x"00002d68",
+2909 => x"00002d68",
+2910 => x"00002d70",
+2911 => x"00002d70",
+2912 => x"00002d78",
+2913 => x"00002d78",
+2914 => x"00002d80",
+2915 => x"00002d80",
+2916 => x"00002d88",
+2917 => x"00002d88",
+2918 => x"00002d90",
+2919 => x"00002d90",
+2920 => x"00002d98",
+2921 => x"00002d98",
+2922 => x"00002da0",
+2923 => x"00002da0",
+2924 => x"00002da8",
+2925 => x"00002da8",
+2926 => x"00002db0",
+2927 => x"00002db0",
+2928 => x"00002db8",
+2929 => x"00002db8",
+2930 => x"00002dc0",
+2931 => x"00002dc0",
+2932 => x"00002dc8",
+2933 => x"00002dc8",
+2934 => x"00002dd0",
+2935 => x"00002dd0",
+2936 => x"00002dd8",
+2937 => x"00002dd8",
+2938 => x"00002de0",
+2939 => x"00002de0",
+2940 => x"00002de8",
+2941 => x"00002de8",
+2942 => x"00002df0",
+2943 => x"00002df0",
+2944 => x"00002df8",
+2945 => x"00002df8",
+2946 => x"00002e00",
+2947 => x"00002e00",
+2948 => x"00002e08",
+2949 => x"00002e08",
+2950 => x"00002e10",
+2951 => x"00002e10",
+2952 => x"00002e18",
+2953 => x"00002e18",
+2954 => x"00002e20",
+2955 => x"00002e20",
+2956 => x"00002e28",
+2957 => x"00002e28",
+2958 => x"00002e30",
+2959 => x"00002e30",
+2960 => x"00002e38",
+2961 => x"00002e38",
+2962 => x"00002e40",
+2963 => x"00002e40",
+2964 => x"00002e48",
+2965 => x"00002e48",
+2966 => x"00002e50",
+2967 => x"00002e50",
+2968 => x"00002e58",
+2969 => x"00002e58",
+2970 => x"00002e60",
+2971 => x"00002e60",
+2972 => x"00002e68",
+2973 => x"00002e68",
+2974 => x"00002e70",
+2975 => x"00002e70",
+2976 => x"00002e78",
+2977 => x"00002e78",
+2978 => x"00002e80",
+2979 => x"00002e80",
+2980 => x"00002e88",
+2981 => x"00002e88",
+2982 => x"00002e90",
+2983 => x"00002e90",
+2984 => x"00002e98",
+2985 => x"00002e98",
+2986 => x"00002ea0",
+2987 => x"00002ea0",
+2988 => x"00002ea8",
+2989 => x"00002ea8",
+2990 => x"00002eb0",
+2991 => x"00002eb0",
+2992 => x"00002eb8",
+2993 => x"00002eb8",
+2994 => x"00002ec0",
+2995 => x"00002ec0",
+2996 => x"00002ec8",
+2997 => x"00002ec8",
+2998 => x"00002ed0",
+2999 => x"00002ed0",
+3000 => x"00002ed8",
+3001 => x"00002ed8",
+3002 => x"00002ee0",
+3003 => x"00002ee0",
+3004 => x"00002ee8",
+3005 => x"00002ee8",
+3006 => x"00002ef0",
+3007 => x"00002ef0",
+3008 => x"00002ef8",
+3009 => x"00002ef8",
+3010 => x"00002f00",
+3011 => x"00002f00",
+3012 => x"00002f08",
+3013 => x"00002f08",
+3014 => x"00002f10",
+3015 => x"00002f10",
+3016 => x"00002f18",
+3017 => x"00002f18",
+3018 => x"00002f20",
+3019 => x"00002f20",
+3020 => x"00002f28",
+3021 => x"00002f28",
+3022 => x"00002f30",
+3023 => x"00002f30",
+3024 => x"00002f38",
+3025 => x"00002f38",
+3026 => x"00002f40",
+3027 => x"00002f40",
+3028 => x"00002f48",
+3029 => x"00002f48",
+3030 => x"00002f50",
+3031 => x"00002f50",
+3032 => x"00002f58",
+3033 => x"00002f58",
+3034 => x"00002f60",
+3035 => x"00002f60",
+3036 => x"00002f68",
+3037 => x"00002f68",
+3038 => x"00002f70",
+3039 => x"00002f70",
+3040 => x"00002f78",
+3041 => x"00002f78",
+3042 => x"00002f80",
+3043 => x"00002f80",
+3044 => x"00002f88",
+3045 => x"00002f88",
+3046 => x"00002f90",
+3047 => x"00002f90",
+3048 => x"00002f98",
+3049 => x"00002f98",
+3050 => x"00002fa0",
+3051 => x"00002fa0",
+3052 => x"000027c0",
+3053 => x"ffffffff",
+3054 => x"00000000",
+3055 => x"ffffffff",
+3056 => x"00000000",
+ others => x"00000000"
+);
+
+begin
+
+process (clk)
+begin
+ if (clk'event and clk = '1') then
+ if (memAWriteEnable = '1') and (memBWriteEnable = '1') and (memAAddr=memBAddr) and (memAWrite/=memBWrite) then
+ report "write collision" severity failure;
+ end if;
+
+ if (memAWriteEnable = '1') then
+ ram(to_integer(unsigned(memAAddr))) := memAWrite;
+ memARead <= memAWrite;
+ else
+ memARead <= ram(to_integer(unsigned(memAAddr)));
+ end if;
+ end if;
+end process;
+
+process (clk)
+begin
+ if (clk'event and clk = '1') then
+ if (memBWriteEnable = '1') then
+ ram(to_integer(unsigned(memBAddr))) := memBWrite;
+ memBRead <= memBWrite;
+ else
+ memBRead <= ram(to_integer(unsigned(memBAddr)));
+ end if;
+ end if;
+end process;
+
+
+
+
+end dualport_ram_arch;
diff --git a/zpu/hdl/example/sim_small_fpga_top.vhd b/zpu/hdl/example/sim_small_fpga_top.vhd
index f36a285..e671460 100644
--- a/zpu/hdl/example/sim_small_fpga_top.vhd
+++ b/zpu/hdl/example/sim_small_fpga_top.vhd
@@ -1,207 +1,207 @@
--- ZPU
---
--- Copyright 2004-2008 oharboe - Øyvind Harboe - oyvind.harboe@zylin.com
---
--- The FreeBSD license
---
--- Redistribution and use in source and binary forms, with or without
--- modification, are permitted provided that the following conditions
--- are met:
---
--- 1. Redistributions of source code must retain the above copyright
--- notice, this list of conditions and the following disclaimer.
--- 2. Redistributions in binary form must reproduce the above
--- copyright notice, this list of conditions and the following
--- disclaimer in the documentation and/or other materials
--- provided with the distribution.
---
--- THIS SOFTWARE IS PROVIDED BY THE ZPU PROJECT ``AS IS'' AND ANY
--- EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
--- THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
--- PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
--- ZPU PROJECT OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
--- INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
--- (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
--- OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
--- HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
--- STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
--- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
--- ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
---
--- The views and conclusions contained in the software and documentation
--- are those of the authors and should not be interpreted as representing
--- official policies, either expressed or implied, of the ZPU Project.--------------------------------------------------------------------------------
-
-library IEEE;
-use IEEE.STD_LOGIC_1164.ALL;
-use ieee.numeric_std.all;
-
----- Uncomment the following library declaration if instantiating
----- any Xilinx primitives in this code.
---library UNISIM;
---use UNISIM.VComponents.all;
-
-library work;
-use work.zpu_config.all;
-use work.zpupkg.all;
-
-entity fpga_top is
-end fpga_top;
-
-architecture behave of fpga_top is
-
-
-signal clk : std_logic;
-
-signal areset : std_logic := '1';
-
-
-component zpu_io is
- generic (
- log_file: string := "log.txt"
- );
- port(
- clk : in std_logic;
- areset : in std_logic;
- busy : out std_logic;
- writeEnable : in std_logic;
- readEnable : in std_logic;
- write : in std_logic_vector(wordSize-1 downto 0);
- read : out std_logic_vector(wordSize-1 downto 0);
- addr : in std_logic_vector(maxAddrBit downto minAddrBit)
- );
-end component;
-
-
-
-
-
-signal mem_busy : std_logic;
-signal mem_read : std_logic_vector(wordSize-1 downto 0);
-signal mem_write : std_logic_vector(wordSize-1 downto 0);
-signal mem_addr : std_logic_vector(maxAddrBitIncIO downto 0);
-signal mem_writeEnable : std_logic;
-signal mem_readEnable : std_logic;
-signal mem_writeMask: std_logic_vector(wordBytes-1 downto 0);
-
-signal enable : std_logic;
-
-signal dram_mem_busy : std_logic;
-signal dram_mem_read : std_logic_vector(wordSize-1 downto 0);
-signal dram_mem_write : std_logic_vector(wordSize-1 downto 0);
-signal dram_mem_writeEnable : std_logic;
-signal dram_mem_readEnable : std_logic;
-signal dram_mem_writeMask: std_logic_vector(wordBytes-1 downto 0);
-
-
-signal io_busy : std_logic;
-
-signal io_mem_read : std_logic_vector(wordSize-1 downto 0);
-signal io_mem_writeEnable : std_logic;
-signal io_mem_readEnable : std_logic;
-
-
-signal dram_ready : std_logic;
-signal io_ready : std_logic;
-signal io_reading : std_logic;
-signal interruptcounter : unsigned(15 downto 0);
-signal interrupt : std_logic;
-
-
-
-signal break : std_logic;
-
-begin
-
- zpu: zpu_core port map (
- clk => clk ,
- areset => areset,
- enable => enable,
- in_mem_busy => mem_busy,
- mem_read => mem_read,
- mem_write => mem_write,
- out_mem_addr => mem_addr,
- out_mem_writeEnable => mem_writeEnable,
- out_mem_readEnable => mem_readEnable,
- mem_writeMask => mem_writeMask,
- interrupt => interrupt,
- break => break);
-
-
- ioMap: zpu_io port map (
- clk => clk,
- areset => areset,
- busy => io_busy,
- writeEnable => io_mem_writeEnable,
- readEnable => io_mem_readEnable,
- write => mem_write,
- read => io_mem_read,
- addr => mem_addr(maxAddrBit downto minAddrBit)
- );
-
- dram_mem_writeEnable <= mem_writeEnable and not mem_addr(ioBit);
- dram_mem_readEnable <= mem_readEnable and not mem_addr(ioBit);
- io_mem_writeEnable <= mem_writeEnable and mem_addr(ioBit);
- io_mem_readEnable <= mem_readEnable and mem_addr(ioBit);
- mem_busy <= io_busy;
-
-
-
- -- Memory reads either come from IO or DRAM. We need to pick the right one.
- memorycontrol:
- process(dram_mem_read, dram_ready, io_ready, io_mem_read)
- begin
- mem_read <= (others => 'U');
- if dram_ready='1' then
- mem_read <= dram_mem_read;
- end if;
-
- if io_ready='1' then
- mem_read <= (others => '0');
- mem_read <= io_mem_read;
- end if;
- end process;
-
-
-
- io_ready <= (io_reading or io_mem_readEnable) and not io_busy;
-
- memoryControlSync:
- process(clk, areset)
- begin
- if areset = '1' then
- enable <= '0';
- io_reading <= '0';
- dram_ready <= '0';
-
- interruptcounter <= to_unsigned(0, 16);
- interrupt <= '0';
-
- elsif (clk'event and clk = '1') then
- enable <= '1';
- io_reading <= io_busy or io_mem_readEnable;
- dram_ready<=dram_mem_readEnable;
-
- -- keep interrupt signal high for 16 cycles
- interruptcounter <= interruptcounter + 1;
- if (interruptcounter < 16) then
- report "Interrupt asserted!" severity note;
- interrupt <='1';
- else
- interrupt <='0';
- end if;
- end if;
- end process;
-
- -- wiggle the clock @ 100MHz
- clock : PROCESS
- begin
- clk <= '0';
- wait for 5 ns;
- clk <= '1';
- wait for 5 ns;
- areset <= '0';
- end PROCESS clock;
-
-
-end behave;
+-- ZPU
+--
+-- Copyright 2004-2008 oharboe - Øyvind Harboe - oyvind.harboe@zylin.com
+--
+-- The FreeBSD license
+--
+-- Redistribution and use in source and binary forms, with or without
+-- modification, are permitted provided that the following conditions
+-- are met:
+--
+-- 1. Redistributions of source code must retain the above copyright
+-- notice, this list of conditions and the following disclaimer.
+-- 2. Redistributions in binary form must reproduce the above
+-- copyright notice, this list of conditions and the following
+-- disclaimer in the documentation and/or other materials
+-- provided with the distribution.
+--
+-- THIS SOFTWARE IS PROVIDED BY THE ZPU PROJECT ``AS IS'' AND ANY
+-- EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+-- THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+-- PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+-- ZPU PROJECT OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+-- INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+-- (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+-- OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+-- HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+-- STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+-- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+-- ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+--
+-- The views and conclusions contained in the software and documentation
+-- are those of the authors and should not be interpreted as representing
+-- official policies, either expressed or implied, of the ZPU Project.--------------------------------------------------------------------------------
+
+library IEEE;
+use IEEE.STD_LOGIC_1164.ALL;
+use ieee.numeric_std.all;
+
+---- Uncomment the following library declaration if instantiating
+---- any Xilinx primitives in this code.
+--library UNISIM;
+--use UNISIM.VComponents.all;
+
+library work;
+use work.zpu_config.all;
+use work.zpupkg.all;
+
+entity fpga_top is
+end fpga_top;
+
+architecture behave of fpga_top is
+
+
+signal clk : std_logic;
+
+signal areset : std_logic := '1';
+
+
+component zpu_io is
+ generic (
+ log_file: string := "log.txt"
+ );
+ port(
+ clk : in std_logic;
+ areset : in std_logic;
+ busy : out std_logic;
+ writeEnable : in std_logic;
+ readEnable : in std_logic;
+ write : in std_logic_vector(wordSize-1 downto 0);
+ read : out std_logic_vector(wordSize-1 downto 0);
+ addr : in std_logic_vector(maxAddrBit downto minAddrBit)
+ );
+end component;
+
+
+
+
+
+signal mem_busy : std_logic;
+signal mem_read : std_logic_vector(wordSize-1 downto 0);
+signal mem_write : std_logic_vector(wordSize-1 downto 0);
+signal mem_addr : std_logic_vector(maxAddrBitIncIO downto 0);
+signal mem_writeEnable : std_logic;
+signal mem_readEnable : std_logic;
+signal mem_writeMask: std_logic_vector(wordBytes-1 downto 0);
+
+signal enable : std_logic;
+
+signal dram_mem_busy : std_logic;
+signal dram_mem_read : std_logic_vector(wordSize-1 downto 0);
+signal dram_mem_write : std_logic_vector(wordSize-1 downto 0);
+signal dram_mem_writeEnable : std_logic;
+signal dram_mem_readEnable : std_logic;
+signal dram_mem_writeMask: std_logic_vector(wordBytes-1 downto 0);
+
+
+signal io_busy : std_logic;
+
+signal io_mem_read : std_logic_vector(wordSize-1 downto 0);
+signal io_mem_writeEnable : std_logic;
+signal io_mem_readEnable : std_logic;
+
+
+signal dram_ready : std_logic;
+signal io_ready : std_logic;
+signal io_reading : std_logic;
+signal interruptcounter : unsigned(15 downto 0);
+signal interrupt : std_logic;
+
+
+
+signal break : std_logic;
+
+begin
+
+ zpu: zpu_core port map (
+ clk => clk ,
+ areset => areset,
+ enable => enable,
+ in_mem_busy => mem_busy,
+ mem_read => mem_read,
+ mem_write => mem_write,
+ out_mem_addr => mem_addr,
+ out_mem_writeEnable => mem_writeEnable,
+ out_mem_readEnable => mem_readEnable,
+ mem_writeMask => mem_writeMask,
+ interrupt => interrupt,
+ break => break);
+
+
+ ioMap: zpu_io port map (
+ clk => clk,
+ areset => areset,
+ busy => io_busy,
+ writeEnable => io_mem_writeEnable,
+ readEnable => io_mem_readEnable,
+ write => mem_write,
+ read => io_mem_read,
+ addr => mem_addr(maxAddrBit downto minAddrBit)
+ );
+
+ dram_mem_writeEnable <= mem_writeEnable and not mem_addr(ioBit);
+ dram_mem_readEnable <= mem_readEnable and not mem_addr(ioBit);
+ io_mem_writeEnable <= mem_writeEnable and mem_addr(ioBit);
+ io_mem_readEnable <= mem_readEnable and mem_addr(ioBit);
+ mem_busy <= io_busy;
+
+
+
+ -- Memory reads either come from IO or DRAM. We need to pick the right one.
+ memorycontrol:
+ process(dram_mem_read, dram_ready, io_ready, io_mem_read)
+ begin
+ mem_read <= (others => 'U');
+ if dram_ready='1' then
+ mem_read <= dram_mem_read;
+ end if;
+
+ if io_ready='1' then
+ mem_read <= (others => '0');
+ mem_read <= io_mem_read;
+ end if;
+ end process;
+
+
+
+ io_ready <= (io_reading or io_mem_readEnable) and not io_busy;
+
+ memoryControlSync:
+ process(clk, areset)
+ begin
+ if areset = '1' then
+ enable <= '0';
+ io_reading <= '0';
+ dram_ready <= '0';
+
+ interruptcounter <= to_unsigned(0, 16);
+ interrupt <= '0';
+
+ elsif (clk'event and clk = '1') then
+ enable <= '1';
+ io_reading <= io_busy or io_mem_readEnable;
+ dram_ready<=dram_mem_readEnable;
+
+ -- keep interrupt signal high for 16 cycles
+ interruptcounter <= interruptcounter + 1;
+ if (interruptcounter < 16) then
+ report "Interrupt asserted!" severity note;
+ interrupt <='1';
+ else
+ interrupt <='0';
+ end if;
+ end if;
+ end process;
+
+ -- wiggle the clock @ 100MHz
+ clock : PROCESS
+ begin
+ clk <= '0';
+ wait for 5 ns;
+ clk <= '1';
+ wait for 5 ns;
+ areset <= '0';
+ end PROCESS clock;
+
+
+end behave;
diff --git a/zpu/hdl/example/sim_small_fpga_top_noint.vhd b/zpu/hdl/example/sim_small_fpga_top_noint.vhd
index b342d26..0edb8c7 100644
--- a/zpu/hdl/example/sim_small_fpga_top_noint.vhd
+++ b/zpu/hdl/example/sim_small_fpga_top_noint.vhd
@@ -1,193 +1,193 @@
--- ZPU
---
--- Copyright 2004-2008 oharboe - Øyvind Harboe - oyvind.harboe@zylin.com
---
--- The FreeBSD license
---
--- Redistribution and use in source and binary forms, with or without
--- modification, are permitted provided that the following conditions
--- are met:
---
--- 1. Redistributions of source code must retain the above copyright
--- notice, this list of conditions and the following disclaimer.
--- 2. Redistributions in binary form must reproduce the above
--- copyright notice, this list of conditions and the following
--- disclaimer in the documentation and/or other materials
--- provided with the distribution.
---
--- THIS SOFTWARE IS PROVIDED BY THE ZPU PROJECT ``AS IS'' AND ANY
--- EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
--- THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
--- PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
--- ZPU PROJECT OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
--- INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
--- (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
--- OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
--- HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
--- STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
--- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
--- ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
---
--- The views and conclusions contained in the software and documentation
--- are those of the authors and should not be interpreted as representing
--- official policies, either expressed or implied, of the ZPU Project.
-
-library IEEE;
-use IEEE.STD_LOGIC_1164.ALL;
-use ieee.numeric_std.all;
-
----- Uncomment the following library declaration if instantiating
----- any Xilinx primitives in this code.
---library UNISIM;
---use UNISIM.VComponents.all;
-
-library work;
-use work.zpu_config.all;
-use work.zpupkg.all;
-
-entity fpga_top is
-end fpga_top;
-
-architecture behave of fpga_top is
-
-
-signal clk : std_logic;
-
-signal areset : std_logic := '1';
-
-
-component zpu_io is
- generic (
- log_file: string := "log.txt"
- );
- port(
- clk : in std_logic;
- areset : in std_logic;
- busy : out std_logic;
- writeEnable : in std_logic;
- readEnable : in std_logic;
- write : in std_logic_vector(wordSize-1 downto 0);
- read : out std_logic_vector(wordSize-1 downto 0);
- addr : in std_logic_vector(maxAddrBit downto minAddrBit)
- );
-end component;
-
-
-
-
-
-signal mem_busy : std_logic;
-signal mem_read : std_logic_vector(wordSize-1 downto 0);
-signal mem_write : std_logic_vector(wordSize-1 downto 0);
-signal mem_addr : std_logic_vector(maxAddrBitIncIO downto 0);
-signal mem_writeEnable : std_logic;
-signal mem_readEnable : std_logic;
-signal mem_writeMask: std_logic_vector(wordBytes-1 downto 0);
-
-signal enable : std_logic;
-
-signal dram_mem_busy : std_logic;
-signal dram_mem_read : std_logic_vector(wordSize-1 downto 0);
-signal dram_mem_write : std_logic_vector(wordSize-1 downto 0);
-signal dram_mem_writeEnable : std_logic;
-signal dram_mem_readEnable : std_logic;
-signal dram_mem_writeMask: std_logic_vector(wordBytes-1 downto 0);
-
-
-signal io_busy : std_logic;
-
-signal io_mem_read : std_logic_vector(wordSize-1 downto 0);
-signal io_mem_writeEnable : std_logic;
-signal io_mem_readEnable : std_logic;
-
-
-signal dram_ready : std_logic;
-signal io_ready : std_logic;
-signal io_reading : std_logic;
-
-
-
-signal break : std_logic;
-
-begin
-
- zpu: zpu_core port map (
- clk => clk ,
- areset => areset,
- enable => enable,
- in_mem_busy => mem_busy,
- mem_read => mem_read,
- mem_write => mem_write,
- out_mem_addr => mem_addr,
- out_mem_writeEnable => mem_writeEnable,
- out_mem_readEnable => mem_readEnable,
- mem_writeMask => mem_writeMask,
- interrupt => '0',
- break => break);
-
-
- ioMap: zpu_io port map (
- clk => clk,
- areset => areset,
- busy => io_busy,
- writeEnable => io_mem_writeEnable,
- readEnable => io_mem_readEnable,
- write => mem_write,
- read => io_mem_read,
- addr => mem_addr(maxAddrBit downto minAddrBit)
- );
-
- dram_mem_writeEnable <= mem_writeEnable and not mem_addr(ioBit);
- dram_mem_readEnable <= mem_readEnable and not mem_addr(ioBit);
- io_mem_writeEnable <= mem_writeEnable and mem_addr(ioBit);
- io_mem_readEnable <= mem_readEnable and mem_addr(ioBit);
- mem_busy <= io_busy;
-
-
-
- -- Memory reads either come from IO or DRAM. We need to pick the right one.
- memorycontrol:
- process(dram_mem_read, dram_ready, io_ready, io_mem_read)
- begin
- mem_read <= (others => 'U');
- if dram_ready='1' then
- mem_read <= dram_mem_read;
- end if;
-
- if io_ready='1' then
- mem_read <= (others => '0');
- mem_read <= io_mem_read;
- end if;
- end process;
-
-
-
- io_ready <= (io_reading or io_mem_readEnable) and not io_busy;
-
- memoryControlSync:
- process(clk, areset)
- begin
- if areset = '1' then
- enable <= '0';
- io_reading <= '0';
- dram_ready <= '0';
-
- elsif (clk'event and clk = '1') then
- enable <= '1';
- io_reading <= io_busy or io_mem_readEnable;
- dram_ready<=dram_mem_readEnable;
- end if;
- end process;
-
- -- wiggle the clock @ 100MHz
- clock : PROCESS
- begin
- clk <= '0';
- wait for 5 ns;
- clk <= '1';
- wait for 5 ns;
- areset <= '0';
- end PROCESS clock;
-
-
-end behave;
+-- ZPU
+--
+-- Copyright 2004-2008 oharboe - Øyvind Harboe - oyvind.harboe@zylin.com
+--
+-- The FreeBSD license
+--
+-- Redistribution and use in source and binary forms, with or without
+-- modification, are permitted provided that the following conditions
+-- are met:
+--
+-- 1. Redistributions of source code must retain the above copyright
+-- notice, this list of conditions and the following disclaimer.
+-- 2. Redistributions in binary form must reproduce the above
+-- copyright notice, this list of conditions and the following
+-- disclaimer in the documentation and/or other materials
+-- provided with the distribution.
+--
+-- THIS SOFTWARE IS PROVIDED BY THE ZPU PROJECT ``AS IS'' AND ANY
+-- EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+-- THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+-- PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+-- ZPU PROJECT OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+-- INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+-- (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+-- OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+-- HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+-- STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+-- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+-- ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+--
+-- The views and conclusions contained in the software and documentation
+-- are those of the authors and should not be interpreted as representing
+-- official policies, either expressed or implied, of the ZPU Project.
+
+library IEEE;
+use IEEE.STD_LOGIC_1164.ALL;
+use ieee.numeric_std.all;
+
+---- Uncomment the following library declaration if instantiating
+---- any Xilinx primitives in this code.
+--library UNISIM;
+--use UNISIM.VComponents.all;
+
+library work;
+use work.zpu_config.all;
+use work.zpupkg.all;
+
+entity fpga_top is
+end fpga_top;
+
+architecture behave of fpga_top is
+
+
+signal clk : std_logic;
+
+signal areset : std_logic := '1';
+
+
+component zpu_io is
+ generic (
+ log_file: string := "log.txt"
+ );
+ port(
+ clk : in std_logic;
+ areset : in std_logic;
+ busy : out std_logic;
+ writeEnable : in std_logic;
+ readEnable : in std_logic;
+ write : in std_logic_vector(wordSize-1 downto 0);
+ read : out std_logic_vector(wordSize-1 downto 0);
+ addr : in std_logic_vector(maxAddrBit downto minAddrBit)
+ );
+end component;
+
+
+
+
+
+signal mem_busy : std_logic;
+signal mem_read : std_logic_vector(wordSize-1 downto 0);
+signal mem_write : std_logic_vector(wordSize-1 downto 0);
+signal mem_addr : std_logic_vector(maxAddrBitIncIO downto 0);
+signal mem_writeEnable : std_logic;
+signal mem_readEnable : std_logic;
+signal mem_writeMask: std_logic_vector(wordBytes-1 downto 0);
+
+signal enable : std_logic;
+
+signal dram_mem_busy : std_logic;
+signal dram_mem_read : std_logic_vector(wordSize-1 downto 0);
+signal dram_mem_write : std_logic_vector(wordSize-1 downto 0);
+signal dram_mem_writeEnable : std_logic;
+signal dram_mem_readEnable : std_logic;
+signal dram_mem_writeMask: std_logic_vector(wordBytes-1 downto 0);
+
+
+signal io_busy : std_logic;
+
+signal io_mem_read : std_logic_vector(wordSize-1 downto 0);
+signal io_mem_writeEnable : std_logic;
+signal io_mem_readEnable : std_logic;
+
+
+signal dram_ready : std_logic;
+signal io_ready : std_logic;
+signal io_reading : std_logic;
+
+
+
+signal break : std_logic;
+
+begin
+
+ zpu: zpu_core port map (
+ clk => clk ,
+ areset => areset,
+ enable => enable,
+ in_mem_busy => mem_busy,
+ mem_read => mem_read,
+ mem_write => mem_write,
+ out_mem_addr => mem_addr,
+ out_mem_writeEnable => mem_writeEnable,
+ out_mem_readEnable => mem_readEnable,
+ mem_writeMask => mem_writeMask,
+ interrupt => '0',
+ break => break);
+
+
+ ioMap: zpu_io port map (
+ clk => clk,
+ areset => areset,
+ busy => io_busy,
+ writeEnable => io_mem_writeEnable,
+ readEnable => io_mem_readEnable,
+ write => mem_write,
+ read => io_mem_read,
+ addr => mem_addr(maxAddrBit downto minAddrBit)
+ );
+
+ dram_mem_writeEnable <= mem_writeEnable and not mem_addr(ioBit);
+ dram_mem_readEnable <= mem_readEnable and not mem_addr(ioBit);
+ io_mem_writeEnable <= mem_writeEnable and mem_addr(ioBit);
+ io_mem_readEnable <= mem_readEnable and mem_addr(ioBit);
+ mem_busy <= io_busy;
+
+
+
+ -- Memory reads either come from IO or DRAM. We need to pick the right one.
+ memorycontrol:
+ process(dram_mem_read, dram_ready, io_ready, io_mem_read)
+ begin
+ mem_read <= (others => 'U');
+ if dram_ready='1' then
+ mem_read <= dram_mem_read;
+ end if;
+
+ if io_ready='1' then
+ mem_read <= (others => '0');
+ mem_read <= io_mem_read;
+ end if;
+ end process;
+
+
+
+ io_ready <= (io_reading or io_mem_readEnable) and not io_busy;
+
+ memoryControlSync:
+ process(clk, areset)
+ begin
+ if areset = '1' then
+ enable <= '0';
+ io_reading <= '0';
+ dram_ready <= '0';
+
+ elsif (clk'event and clk = '1') then
+ enable <= '1';
+ io_reading <= io_busy or io_mem_readEnable;
+ dram_ready<=dram_mem_readEnable;
+ end if;
+ end process;
+
+ -- wiggle the clock @ 100MHz
+ clock : PROCESS
+ begin
+ clk <= '0';
+ wait for 5 ns;
+ clk <= '1';
+ wait for 5 ns;
+ areset <= '0';
+ end PROCESS clock;
+
+
+end behave;
diff --git a/zpu/hdl/example/zpu_config.vhd b/zpu/hdl/example/zpu_config.vhd
index c4c09b5..c3c60c1 100644
--- a/zpu/hdl/example/zpu_config.vhd
+++ b/zpu/hdl/example/zpu_config.vhd
@@ -1,56 +1,56 @@
--- ZPU
---
--- Copyright 2004-2008 oharboe - Øyvind Harboe - oyvind.harboe@zylin.com
---
--- The FreeBSD license
---
--- Redistribution and use in source and binary forms, with or without
--- modification, are permitted provided that the following conditions
--- are met:
---
--- 1. Redistributions of source code must retain the above copyright
--- notice, this list of conditions and the following disclaimer.
--- 2. Redistributions in binary form must reproduce the above
--- copyright notice, this list of conditions and the following
--- disclaimer in the documentation and/or other materials
--- provided with the distribution.
---
--- THIS SOFTWARE IS PROVIDED BY THE ZPU PROJECT ``AS IS'' AND ANY
--- EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
--- THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
--- PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
--- ZPU PROJECT OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
--- INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
--- (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
--- OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
--- HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
--- STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
--- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
--- ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
---
--- The views and conclusions contained in the software and documentation
--- are those of the authors and should not be interpreted as representing
--- official policies, either expressed or implied, of the ZPU Project.
-
-library ieee;
-use ieee.std_logic_1164.all;
-use ieee.std_logic_unsigned.all;
-use ieee.std_logic_arith.all;
-
-package zpu_config is
- -- generate trace output
- constant Generate_Trace : boolean := true;
- constant wordPower : integer := 5;
- -- during simulation, set this to '0' to get matching trace.txt
- constant DontCareValue : std_logic := '0';
- -- Clock frequency in MHz.
- constant ZPU_Frequency : std_logic_vector(7 downto 0) := x"64";
- -- This is the msb address bit. bytes=2^(maxAddrBitIncIO+1)
- constant maxAddrBitIncIO : integer := 27;
- constant maxAddrBitBRAM : integer := 16;
-
- -- start byte address of stack.
- -- point to top of RAM - 2*words
- constant spStart : std_logic_vector(maxAddrBitIncIO downto 0) :=
- conv_std_logic_vector((2**(maxAddrBitBRAM+1))-8, maxAddrBitIncIO+1);
-end zpu_config;
+-- ZPU
+--
+-- Copyright 2004-2008 oharboe - Øyvind Harboe - oyvind.harboe@zylin.com
+--
+-- The FreeBSD license
+--
+-- Redistribution and use in source and binary forms, with or without
+-- modification, are permitted provided that the following conditions
+-- are met:
+--
+-- 1. Redistributions of source code must retain the above copyright
+-- notice, this list of conditions and the following disclaimer.
+-- 2. Redistributions in binary form must reproduce the above
+-- copyright notice, this list of conditions and the following
+-- disclaimer in the documentation and/or other materials
+-- provided with the distribution.
+--
+-- THIS SOFTWARE IS PROVIDED BY THE ZPU PROJECT ``AS IS'' AND ANY
+-- EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+-- THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+-- PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+-- ZPU PROJECT OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+-- INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+-- (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+-- OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+-- HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+-- STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+-- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+-- ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+--
+-- The views and conclusions contained in the software and documentation
+-- are those of the authors and should not be interpreted as representing
+-- official policies, either expressed or implied, of the ZPU Project.
+
+library ieee;
+use ieee.std_logic_1164.all;
+use ieee.std_logic_unsigned.all;
+use ieee.std_logic_arith.all;
+
+package zpu_config is
+ -- generate trace output
+ constant Generate_Trace : boolean := true;
+ constant wordPower : integer := 5;
+ -- during simulation, set this to '0' to get matching trace.txt
+ constant DontCareValue : std_logic := '0';
+ -- Clock frequency in MHz.
+ constant ZPU_Frequency : std_logic_vector(7 downto 0) := x"64";
+ -- This is the msb address bit. bytes=2^(maxAddrBitIncIO+1)
+ constant maxAddrBitIncIO : integer := 27;
+ constant maxAddrBitBRAM : integer := 16;
+
+ -- start byte address of stack.
+ -- point to top of RAM - 2*words
+ constant spStart : std_logic_vector(maxAddrBitIncIO downto 0) :=
+ conv_std_logic_vector((2**(maxAddrBitBRAM+1))-8, maxAddrBitIncIO+1);
+end zpu_config;
diff --git a/zpu/hdl/example_medium/dram_dmips.vhd b/zpu/hdl/example_medium/dram_dmips.vhd
index a9fd59e..0437adc 100644
--- a/zpu/hdl/example_medium/dram_dmips.vhd
+++ b/zpu/hdl/example_medium/dram_dmips.vhd
@@ -1,3308 +1,3308 @@
-library ieee;
-use ieee.std_logic_1164.all;
-use ieee.numeric_std.all;
-
-
-library work;
-use work.zpu_config.all;
-use work.zpupkg.all;
-
-entity dram is
-port (clk : in std_logic;
-areset : std_logic;
- mem_writeEnable : in std_logic;
- mem_readEnable : in std_logic;
- mem_addr : in std_logic_vector(maxAddrBit downto 0);
- mem_write : in std_logic_vector(wordSize-1 downto 0);
- mem_read : out std_logic_vector(wordSize-1 downto 0);
- mem_busy : out std_logic;
- mem_writeMask : in std_logic_vector(wordBytes-1 downto 0));
-end dram;
-
-architecture dram_arch of dram is
-
-
-type ram_type is array(natural range 0 to ((2**(maxAddrBitDRAM+1))/4)-1) of std_logic_vector(wordSize-1 downto 0);
-
-shared variable ram : ram_type :=
-(
-0 => x"0b0b0b0b",
-1 => x"82700b0b",
-2 => x"80d5f40c",
-3 => x"3a0b0b80",
-4 => x"c4fb0400",
-5 => x"00000000",
-6 => x"00000000",
-7 => x"00000000",
-8 => x"80088408",
-9 => x"88080b0b",
-10 => x"80c5c22d",
-11 => x"880c840c",
-12 => x"800c0400",
-13 => x"00000000",
-14 => x"00000000",
-15 => x"00000000",
-16 => x"71fd0608",
-17 => x"72830609",
-18 => x"81058205",
-19 => x"832b2a83",
-20 => x"ffff0652",
-21 => x"04000000",
-22 => x"00000000",
-23 => x"00000000",
-24 => x"71fd0608",
-25 => x"83ffff73",
-26 => x"83060981",
-27 => x"05820583",
-28 => x"2b2b0906",
-29 => x"7383ffff",
-30 => x"0b0b0b0b",
-31 => x"83a70400",
-32 => x"72098105",
-33 => x"72057373",
-34 => x"09060906",
-35 => x"73097306",
-36 => x"070a8106",
-37 => x"53510400",
-38 => x"00000000",
-39 => x"00000000",
-40 => x"72722473",
-41 => x"732e0753",
-42 => x"51040000",
-43 => x"00000000",
-44 => x"00000000",
-45 => x"00000000",
-46 => x"00000000",
-47 => x"00000000",
-48 => x"71737109",
-49 => x"71068106",
-50 => x"30720a10",
-51 => x"0a720a10",
-52 => x"0a31050a",
-53 => x"81065151",
-54 => x"53510400",
-55 => x"00000000",
-56 => x"72722673",
-57 => x"732e0753",
-58 => x"51040000",
-59 => x"00000000",
-60 => x"00000000",
-61 => x"00000000",
-62 => x"00000000",
-63 => x"00000000",
-64 => x"00000000",
-65 => x"00000000",
-66 => x"00000000",
-67 => x"00000000",
-68 => x"00000000",
-69 => x"00000000",
-70 => x"00000000",
-71 => x"00000000",
-72 => x"0b0b0b88",
-73 => x"c3040000",
-74 => x"00000000",
-75 => x"00000000",
-76 => x"00000000",
-77 => x"00000000",
-78 => x"00000000",
-79 => x"00000000",
-80 => x"720a722b",
-81 => x"0a535104",
-82 => x"00000000",
-83 => x"00000000",
-84 => x"00000000",
-85 => x"00000000",
-86 => x"00000000",
-87 => x"00000000",
-88 => x"72729f06",
-89 => x"0981050b",
-90 => x"0b0b88a6",
-91 => x"05040000",
-92 => x"00000000",
-93 => x"00000000",
-94 => x"00000000",
-95 => x"00000000",
-96 => x"72722aff",
-97 => x"739f062a",
-98 => x"0974090a",
-99 => x"8106ff05",
-100 => x"06075351",
-101 => x"04000000",
-102 => x"00000000",
-103 => x"00000000",
-104 => x"71715351",
-105 => x"020d0406",
-106 => x"73830609",
-107 => x"81058205",
-108 => x"832b0b2b",
-109 => x"0772fc06",
-110 => x"0c515104",
-111 => x"00000000",
-112 => x"72098105",
-113 => x"72050970",
-114 => x"81050906",
-115 => x"0a810653",
-116 => x"51040000",
-117 => x"00000000",
-118 => x"00000000",
-119 => x"00000000",
-120 => x"72098105",
-121 => x"72050970",
-122 => x"81050906",
-123 => x"0a098106",
-124 => x"53510400",
-125 => x"00000000",
-126 => x"00000000",
-127 => x"00000000",
-128 => x"71098105",
-129 => x"52040000",
-130 => x"00000000",
-131 => x"00000000",
-132 => x"00000000",
-133 => x"00000000",
-134 => x"00000000",
-135 => x"00000000",
-136 => x"72720981",
-137 => x"05055351",
-138 => x"04000000",
-139 => x"00000000",
-140 => x"00000000",
-141 => x"00000000",
-142 => x"00000000",
-143 => x"00000000",
-144 => x"72097206",
-145 => x"73730906",
-146 => x"07535104",
-147 => x"00000000",
-148 => x"00000000",
-149 => x"00000000",
-150 => x"00000000",
-151 => x"00000000",
-152 => x"71fc0608",
-153 => x"72830609",
-154 => x"81058305",
-155 => x"1010102a",
-156 => x"81ff0652",
-157 => x"04000000",
-158 => x"00000000",
-159 => x"00000000",
-160 => x"71fc0608",
-161 => x"0b0b80d5",
-162 => x"e0738306",
-163 => x"10100508",
-164 => x"060b0b0b",
-165 => x"88a90400",
-166 => x"00000000",
-167 => x"00000000",
-168 => x"80088408",
-169 => x"88087575",
-170 => x"0b0b0bad",
-171 => x"aa2d5050",
-172 => x"80085688",
-173 => x"0c840c80",
-174 => x"0c510400",
-175 => x"00000000",
-176 => x"80088408",
-177 => x"88087575",
-178 => x"0b0b0bad",
-179 => x"ee2d5050",
-180 => x"80085688",
-181 => x"0c840c80",
-182 => x"0c510400",
-183 => x"00000000",
-184 => x"72097081",
-185 => x"0509060a",
-186 => x"8106ff05",
-187 => x"70547106",
-188 => x"73097274",
-189 => x"05ff0506",
-190 => x"07515151",
-191 => x"04000000",
-192 => x"72097081",
-193 => x"0509060a",
-194 => x"098106ff",
-195 => x"05705471",
-196 => x"06730972",
-197 => x"7405ff05",
-198 => x"06075151",
-199 => x"51040000",
-200 => x"05ff0504",
-201 => x"00000000",
-202 => x"00000000",
-203 => x"00000000",
-204 => x"00000000",
-205 => x"00000000",
-206 => x"00000000",
-207 => x"00000000",
-208 => x"810b0b0b",
-209 => x"80d5f00c",
-210 => x"51040000",
-211 => x"00000000",
-212 => x"00000000",
-213 => x"00000000",
-214 => x"00000000",
-215 => x"00000000",
-216 => x"71810552",
-217 => x"04000000",
-218 => x"00000000",
-219 => x"00000000",
-220 => x"00000000",
-221 => x"00000000",
-222 => x"00000000",
-223 => x"00000000",
-224 => x"00000000",
-225 => x"00000000",
-226 => x"00000000",
-227 => x"00000000",
-228 => x"00000000",
-229 => x"00000000",
-230 => x"00000000",
-231 => x"00000000",
-232 => x"02840572",
-233 => x"10100552",
-234 => x"04000000",
-235 => x"00000000",
-236 => x"00000000",
-237 => x"00000000",
-238 => x"00000000",
-239 => x"00000000",
-240 => x"00000000",
-241 => x"00000000",
-242 => x"00000000",
-243 => x"00000000",
-244 => x"00000000",
-245 => x"00000000",
-246 => x"00000000",
-247 => x"00000000",
-248 => x"717105ff",
-249 => x"05715351",
-250 => x"020d0400",
-251 => x"00000000",
-252 => x"00000000",
-253 => x"00000000",
-254 => x"00000000",
-255 => x"00000000",
-256 => x"82fd3fbf",
-257 => x"a03f0410",
-258 => x"10101010",
-259 => x"10101010",
-260 => x"10101010",
-261 => x"10101010",
-262 => x"10101010",
-263 => x"10101010",
-264 => x"10101010",
-265 => x"10105351",
-266 => x"047381ff",
-267 => x"06738306",
-268 => x"09810583",
-269 => x"05101010",
-270 => x"2b0772fc",
-271 => x"060c5151",
-272 => x"043c0472",
-273 => x"72807281",
-274 => x"06ff0509",
-275 => x"72060571",
-276 => x"1052720a",
-277 => x"100a5372",
-278 => x"ed385151",
-279 => x"535104ff",
-280 => x"3d0d0b0b",
-281 => x"80e5e408",
-282 => x"52710870",
-283 => x"882a8132",
-284 => x"70810651",
-285 => x"515170f1",
-286 => x"3873720c",
-287 => x"833d0d04",
-288 => x"80d5f008",
-289 => x"802ea438",
-290 => x"80d5f408",
-291 => x"822ebd38",
-292 => x"8380800b",
-293 => x"0b0b80e5",
-294 => x"e40c82a0",
-295 => x"800b80e5",
-296 => x"e80c8290",
-297 => x"800b80e5",
-298 => x"ec0c04f8",
-299 => x"808080a4",
-300 => x"0b0b0b80",
-301 => x"e5e40cf8",
-302 => x"80808280",
-303 => x"0b80e5e8",
-304 => x"0cf88080",
-305 => x"84800b80",
-306 => x"e5ec0c04",
-307 => x"80c0a880",
-308 => x"8c0b0b0b",
-309 => x"80e5e40c",
-310 => x"80c0a880",
-311 => x"940b80e5",
-312 => x"e80c0b0b",
-313 => x"80c7d00b",
-314 => x"80e5ec0c",
-315 => x"04f23d0d",
-316 => x"6080e5e8",
-317 => x"08565d82",
-318 => x"750c8059",
-319 => x"805a800b",
-320 => x"8f3d5d5b",
-321 => x"7a101015",
-322 => x"70087108",
-323 => x"719f2c7e",
-324 => x"852b5855",
-325 => x"557d5359",
-326 => x"5799993f",
-327 => x"7d7f7a72",
-328 => x"077c7207",
-329 => x"71716081",
-330 => x"05415f5d",
-331 => x"5b595755",
-332 => x"817b278f",
-333 => x"38767d0c",
-334 => x"77841e0c",
-335 => x"7c800c90",
-336 => x"3d0d0480",
-337 => x"e5e80855",
-338 => x"ffba3970",
-339 => x"7080e5f0",
-340 => x"335170a7",
-341 => x"3880d5fc",
-342 => x"08700852",
-343 => x"5270802e",
-344 => x"94388412",
-345 => x"80d5fc0c",
-346 => x"702d80d5",
-347 => x"fc087008",
-348 => x"525270ee",
-349 => x"38810b80",
-350 => x"e5f03450",
-351 => x"50040470",
-352 => x"0b0b80e5",
-353 => x"e008802e",
-354 => x"8e380b0b",
-355 => x"0b0b800b",
-356 => x"802e0981",
-357 => x"06833850",
-358 => x"040b0b80",
-359 => x"e5e0510b",
-360 => x"0b0bf4dc",
-361 => x"3f500404",
-362 => x"ff3d0d02",
-363 => x"8f053352",
-364 => x"718a2e8a",
-365 => x"387151fd",
-366 => x"a63f833d",
-367 => x"0d048d51",
-368 => x"fd9d3f71",
-369 => x"51fd983f",
-370 => x"833d0d04",
-371 => x"ce3d0db5",
-372 => x"3d707084",
-373 => x"0552088b",
-374 => x"a85c56a5",
-375 => x"3d5e5c80",
-376 => x"75708105",
-377 => x"5733765b",
-378 => x"55587378",
-379 => x"2e80c138",
-380 => x"8e3d5b73",
-381 => x"a52e0981",
-382 => x"0680c538",
-383 => x"78708105",
-384 => x"5a335473",
-385 => x"80e42e81",
-386 => x"b6387380",
-387 => x"e42480c6",
-388 => x"387380e3",
-389 => x"2ea13880",
-390 => x"52a55179",
-391 => x"2d805273",
-392 => x"51792d82",
-393 => x"18587870",
-394 => x"81055a33",
-395 => x"5473c438",
-396 => x"77800cb4",
-397 => x"3d0d047b",
-398 => x"841d8312",
-399 => x"33565d57",
-400 => x"80527351",
-401 => x"792d8118",
-402 => x"79708105",
-403 => x"5b335558",
-404 => x"73ffa038",
-405 => x"db397380",
-406 => x"f32e0981",
-407 => x"06ffb838",
-408 => x"7b841d71",
-409 => x"08595d56",
-410 => x"80773355",
-411 => x"5673762e",
-412 => x"8d388116",
-413 => x"70187033",
-414 => x"57555674",
-415 => x"f538ff16",
-416 => x"55807625",
-417 => x"ffa03876",
-418 => x"70810558",
-419 => x"33548052",
-420 => x"7351792d",
-421 => x"811875ff",
-422 => x"17575758",
-423 => x"807625ff",
-424 => x"85387670",
-425 => x"81055833",
-426 => x"54805273",
-427 => x"51792d81",
-428 => x"1875ff17",
-429 => x"57575875",
-430 => x"8024cc38",
-431 => x"fee8397b",
-432 => x"841d7108",
-433 => x"70719f2c",
-434 => x"5953595d",
-435 => x"56807524",
-436 => x"81913875",
-437 => x"7d7c5856",
-438 => x"54805773",
-439 => x"772e0981",
-440 => x"06b638b0",
-441 => x"7b3402b5",
-442 => x"05567a76",
-443 => x"2e9738ff",
-444 => x"16567533",
-445 => x"75708105",
-446 => x"57348117",
-447 => x"577a762e",
-448 => x"098106eb",
-449 => x"38807534",
-450 => x"767dff12",
-451 => x"57585675",
-452 => x"8024fef3",
-453 => x"38fe8f39",
-454 => x"8a527351",
-455 => x"9fd03f80",
-456 => x"0880c7d4",
-457 => x"05337670",
-458 => x"81055834",
-459 => x"8a527351",
-460 => x"9ef83f80",
-461 => x"08548008",
-462 => x"802effae",
-463 => x"388a5273",
-464 => x"519fab3f",
-465 => x"800880c7",
-466 => x"d4053376",
-467 => x"70810558",
-468 => x"348a5273",
-469 => x"519ed33f",
-470 => x"80085480",
-471 => x"08ffb938",
-472 => x"ff883974",
-473 => x"527653b4",
-474 => x"3dffb805",
-475 => x"51949a3f",
-476 => x"a33d0856",
-477 => x"fedd3980",
-478 => x"3d0d80c1",
-479 => x"0b81b4bc",
-480 => x"34800b81",
-481 => x"b6980c70",
-482 => x"800c823d",
-483 => x"0d04ff3d",
-484 => x"0d800b81",
-485 => x"b4bc3352",
-486 => x"527080c1",
-487 => x"2e993871",
-488 => x"81b69808",
-489 => x"0781b698",
-490 => x"0c80c20b",
-491 => x"81b4c034",
-492 => x"70800c83",
-493 => x"3d0d0481",
-494 => x"0b81b698",
-495 => x"080781b6",
-496 => x"980c80c2",
-497 => x"0b81b4c0",
-498 => x"3470800c",
-499 => x"833d0d04",
-500 => x"fd3d0d75",
-501 => x"70088a05",
-502 => x"535381b4",
-503 => x"bc335170",
-504 => x"80c12e8b",
-505 => x"3873f338",
-506 => x"70800c85",
-507 => x"3d0d04ff",
-508 => x"127081b4",
-509 => x"b8083174",
-510 => x"0c800c85",
-511 => x"3d0d04fc",
-512 => x"3d0d81b4",
-513 => x"c4085574",
-514 => x"802e8c38",
-515 => x"76750871",
-516 => x"0c81b4c4",
-517 => x"0856548c",
-518 => x"155381b4",
-519 => x"b808528a",
-520 => x"518fd43f",
-521 => x"73800c86",
-522 => x"3d0d04fb",
-523 => x"3d0d7770",
-524 => x"085656b0",
-525 => x"5381b4c4",
-526 => x"08527451",
-527 => x"ab943f85",
-528 => x"0b8c170c",
-529 => x"850b8c16",
-530 => x"0c750875",
-531 => x"0c81b4c4",
-532 => x"08547380",
-533 => x"2e8a3873",
-534 => x"08750c81",
-535 => x"b4c40854",
-536 => x"8c145381",
-537 => x"b4b80852",
-538 => x"8a518f8b",
-539 => x"3f841508",
-540 => x"ad38860b",
-541 => x"8c160c88",
-542 => x"15528816",
-543 => x"08518e97",
-544 => x"3f81b4c4",
-545 => x"08700876",
-546 => x"0c548c15",
-547 => x"7054548a",
-548 => x"52730851",
-549 => x"8ee13f73",
-550 => x"800c873d",
-551 => x"0d047508",
-552 => x"54b05373",
-553 => x"527551aa",
-554 => x"a93f7380",
-555 => x"0c873d0d",
-556 => x"04d93d0d",
-557 => x"b0519dcf",
-558 => x"3f800881",
-559 => x"b4b40cb0",
-560 => x"519dc43f",
-561 => x"800881b4",
-562 => x"c40c81b4",
-563 => x"b4088008",
-564 => x"0c800b80",
-565 => x"0884050c",
-566 => x"820b8008",
-567 => x"88050ca8",
-568 => x"0b80088c",
-569 => x"050c9f53",
-570 => x"80c7e052",
-571 => x"80089005",
-572 => x"51a9df3f",
-573 => x"a13d5e9f",
-574 => x"5380c880",
-575 => x"527d51a9",
-576 => x"d13f8a0b",
-577 => x"80f2f80c",
-578 => x"80d2a451",
-579 => x"f9be3f80",
-580 => x"c8a051f9",
-581 => x"b73f80d2",
-582 => x"a451f9b0",
-583 => x"3f80d684",
-584 => x"08802e89",
-585 => x"d33880c8",
-586 => x"d051f9a0",
-587 => x"3f80d2a4",
-588 => x"51f9993f",
-589 => x"80d68008",
-590 => x"5280c8fc",
-591 => x"51f98d3f",
-592 => x"80e69451",
-593 => x"b2ff3f81",
-594 => x"0b9a3d5e",
-595 => x"5b800b80",
-596 => x"d6800825",
-597 => x"82d43890",
-598 => x"3d5f80c1",
-599 => x"0b81b4bc",
-600 => x"34810b81",
-601 => x"b6980c80",
-602 => x"c20b81b4",
-603 => x"c0348240",
-604 => x"835a9f53",
-605 => x"80c9ac52",
-606 => x"7c51a8d6",
-607 => x"3f814180",
-608 => x"7d537e52",
-609 => x"568e943f",
-610 => x"8008762e",
-611 => x"09810683",
-612 => x"38815675",
-613 => x"81b6980c",
-614 => x"7f705856",
-615 => x"758325a2",
-616 => x"38751010",
-617 => x"16fd0542",
-618 => x"a93dffa4",
-619 => x"05538352",
-620 => x"76518cc3",
-621 => x"3f7f8105",
-622 => x"70417058",
-623 => x"56837624",
-624 => x"e0386154",
-625 => x"755380e6",
-626 => x"9c5281b4",
-627 => x"d0518cb7",
-628 => x"3f81b4c4",
-629 => x"08700858",
-630 => x"58b05377",
-631 => x"527651a7",
-632 => x"f13f850b",
-633 => x"8c190c85",
-634 => x"0b8c180c",
-635 => x"7708770c",
-636 => x"81b4c408",
-637 => x"5675802e",
-638 => x"8a387508",
-639 => x"770c81b4",
-640 => x"c408568c",
-641 => x"165381b4",
-642 => x"b808528a",
-643 => x"518be83f",
-644 => x"84170887",
-645 => x"ea38860b",
-646 => x"8c180c88",
-647 => x"17528818",
-648 => x"08518af3",
-649 => x"3f81b4c4",
-650 => x"08700878",
-651 => x"0c568c17",
-652 => x"7054598a",
-653 => x"52780851",
-654 => x"8bbd3f80",
-655 => x"c10b81b4",
-656 => x"c0335757",
-657 => x"767626a2",
-658 => x"3880c352",
-659 => x"76518ca1",
-660 => x"3f800861",
-661 => x"2e89e438",
-662 => x"81177081",
-663 => x"ff0681b4",
-664 => x"c0335858",
-665 => x"58757727",
-666 => x"e0387960",
-667 => x"29627054",
-668 => x"71535b59",
-669 => x"98b43f80",
-670 => x"0840787a",
-671 => x"31708729",
-672 => x"80083180",
-673 => x"088a0581",
-674 => x"b4bc3381",
-675 => x"b4b8085e",
-676 => x"5b525a56",
-677 => x"7780c12e",
-678 => x"89ce387b",
-679 => x"f738811b",
-680 => x"5b80d680",
-681 => x"087b25fd",
-682 => x"b13881b4",
-683 => x"ac51b095",
-684 => x"3f80c9cc",
-685 => x"51f6953f",
-686 => x"80d2a451",
-687 => x"f68e3f80",
-688 => x"c9dc51f6",
-689 => x"873f80d2",
-690 => x"a451f680",
-691 => x"3f81b4b8",
-692 => x"085280ca",
-693 => x"9451f5f4",
-694 => x"3f855280",
-695 => x"cab051f5",
-696 => x"eb3f81b6",
-697 => x"98085280",
-698 => x"cacc51f5",
-699 => x"df3f8152",
-700 => x"80cab051",
-701 => x"f5d63f81",
-702 => x"b4bc3352",
-703 => x"80cae851",
-704 => x"f5ca3f80",
-705 => x"c15280cb",
-706 => x"8451f5c0",
-707 => x"3f81b4c0",
-708 => x"335280cb",
-709 => x"a051f5b4",
-710 => x"3f80c252",
-711 => x"80cb8451",
-712 => x"f5aa3f81",
-713 => x"b4f00852",
-714 => x"80cbbc51",
-715 => x"f59e3f87",
-716 => x"5280cab0",
-717 => x"51f5953f",
-718 => x"80f2f808",
-719 => x"5280cbd8",
-720 => x"51f5893f",
-721 => x"80cbf451",
-722 => x"f5823f80",
-723 => x"cca051f4",
-724 => x"fb3f81b4",
-725 => x"c4087008",
-726 => x"535a80cc",
-727 => x"ac51f4ec",
-728 => x"3f80ccc8",
-729 => x"51f4e53f",
-730 => x"81b4c408",
-731 => x"84110853",
-732 => x"5680ccfc",
-733 => x"51f4d53f",
-734 => x"805280ca",
-735 => x"b051f4cc",
-736 => x"3f81b4c4",
-737 => x"08881108",
-738 => x"535880cd",
-739 => x"9851f4bc",
-740 => x"3f825280",
-741 => x"cab051f4",
-742 => x"b33f81b4",
-743 => x"c4088c11",
-744 => x"08535780",
-745 => x"cdb451f4",
-746 => x"a33f9152",
-747 => x"80cab051",
-748 => x"f49a3f81",
-749 => x"b4c40890",
-750 => x"055280cd",
-751 => x"d051f48c",
-752 => x"3f80cdec",
-753 => x"51f4853f",
-754 => x"80cea451",
-755 => x"f3fe3f81",
-756 => x"b4b40870",
-757 => x"08535f80",
-758 => x"ccac51f3",
-759 => x"ef3f80ce",
-760 => x"b851f3e8",
-761 => x"3f81b4b4",
-762 => x"08841108",
-763 => x"535b80cc",
-764 => x"fc51f3d8",
-765 => x"3f805280",
-766 => x"cab051f3",
-767 => x"cf3f81b4",
-768 => x"b4088811",
-769 => x"08535c80",
-770 => x"cd9851f3",
-771 => x"bf3f8152",
-772 => x"80cab051",
-773 => x"f3b63f81",
-774 => x"b4b4088c",
-775 => x"1108535a",
-776 => x"80cdb451",
-777 => x"f3a63f92",
-778 => x"5280cab0",
-779 => x"51f39d3f",
-780 => x"81b4b408",
-781 => x"90055280",
-782 => x"cdd051f3",
-783 => x"8f3f80cd",
-784 => x"ec51f388",
-785 => x"3f7f5280",
-786 => x"cef851f2",
-787 => x"ff3f8552",
-788 => x"80cab051",
-789 => x"f2f63f78",
-790 => x"5280cf94",
-791 => x"51f2ed3f",
-792 => x"8d5280ca",
-793 => x"b051f2e4",
-794 => x"3f615280",
-795 => x"cfb051f2",
-796 => x"db3f8752",
-797 => x"80cab051",
-798 => x"f2d23f60",
-799 => x"5280cfcc",
-800 => x"51f2c93f",
-801 => x"815280ca",
-802 => x"b051f2c0",
-803 => x"3f7d5280",
-804 => x"cfe851f2",
-805 => x"b73f80d0",
-806 => x"8451f2b0",
-807 => x"3f7c5280",
-808 => x"d0bc51f2",
-809 => x"a73f80d0",
-810 => x"d851f2a0",
-811 => x"3f80d2a4",
-812 => x"51f2993f",
-813 => x"81b4ac08",
-814 => x"81b4b008",
-815 => x"80e69408",
-816 => x"80e69808",
-817 => x"72713170",
-818 => x"74267574",
-819 => x"31707231",
-820 => x"80e68c0c",
-821 => x"444480e6",
-822 => x"900c80e6",
-823 => x"90085680",
-824 => x"d190555c",
-825 => x"595758f1",
-826 => x"e33f80e6",
-827 => x"8c085680",
-828 => x"762582a3",
-829 => x"3880d680",
-830 => x"0870719f",
-831 => x"2c9a3d53",
-832 => x"565680e6",
-833 => x"8c0880e6",
-834 => x"90084153",
-835 => x"7f547052",
-836 => x"5a89eb3f",
-837 => x"66685f80",
-838 => x"e5fc0c7d",
-839 => x"80e6800c",
-840 => x"80d68008",
-841 => x"709f2c58",
-842 => x"568058bd",
-843 => x"84c07855",
-844 => x"55765275",
-845 => x"53795187",
-846 => x"d13f953d",
-847 => x"80e68c08",
-848 => x"80e69008",
-849 => x"41557f56",
-850 => x"67694053",
-851 => x"7e547052",
-852 => x"5c89ab3f",
-853 => x"64665e80",
-854 => x"e6840c7c",
-855 => x"80e6880c",
-856 => x"80d68008",
-857 => x"709f2c40",
-858 => x"58805783",
-859 => x"dceb9480",
-860 => x"7755557e",
-861 => x"5277537b",
-862 => x"51878f3f",
-863 => x"64665d5b",
-864 => x"805e8ddd",
-865 => x"7e555580",
-866 => x"e68c0880",
-867 => x"e6900859",
-868 => x"52775379",
-869 => x"5186f33f",
-870 => x"66684054",
-871 => x"7e557a52",
-872 => x"7b53a93d",
-873 => x"ffa80551",
-874 => x"88d43f62",
-875 => x"645e81b4",
-876 => x"c80c7c81",
-877 => x"b4cc0c80",
-878 => x"d1a051f0",
-879 => x"8f3f80e6",
-880 => x"80085280",
-881 => x"d1d051f0",
-882 => x"833f80d1",
-883 => x"d851effc",
-884 => x"3f80e688",
-885 => x"085280d1",
-886 => x"d051eff0",
-887 => x"3f81b4cc",
-888 => x"085280d2",
-889 => x"8851efe4",
-890 => x"3f80d2a4",
-891 => x"51efdd3f",
-892 => x"800b800c",
-893 => x"a93d0d04",
-894 => x"80d2a851",
-895 => x"f6ac3977",
-896 => x"0857b053",
-897 => x"76527751",
-898 => x"9fc83f80",
-899 => x"c10b81b4",
-900 => x"c0335757",
-901 => x"f8ae3975",
-902 => x"8a3880e6",
-903 => x"90088126",
-904 => x"fdd33880",
-905 => x"d2d851ef",
-906 => x"a33f80d3",
-907 => x"9051ef9c",
-908 => x"3f80d2a4",
-909 => x"51ef953f",
-910 => x"80d68008",
-911 => x"70719f2c",
-912 => x"9a3d5356",
-913 => x"5680e68c",
-914 => x"0880e690",
-915 => x"0841537f",
-916 => x"5470525a",
-917 => x"87a83f66",
-918 => x"685f80e5",
-919 => x"fc0c7d80",
-920 => x"e6800c80",
-921 => x"d6800870",
-922 => x"9f2c5856",
-923 => x"8058bd84",
-924 => x"c0785555",
-925 => x"76527553",
-926 => x"7951858e",
-927 => x"3f953d80",
-928 => x"e68c0880",
-929 => x"e6900841",
-930 => x"557f5667",
-931 => x"6940537e",
-932 => x"5470525c",
-933 => x"86e83f64",
-934 => x"665e80e6",
-935 => x"840c7c80",
-936 => x"e6880c80",
-937 => x"d6800870",
-938 => x"9f2c4058",
-939 => x"805783dc",
-940 => x"eb948077",
-941 => x"55557e52",
-942 => x"77537b51",
-943 => x"84cc3f64",
-944 => x"665d5b80",
-945 => x"5e8ddd7e",
-946 => x"555580e6",
-947 => x"8c0880e6",
-948 => x"90085952",
-949 => x"77537951",
-950 => x"84b03f66",
-951 => x"6840547e",
-952 => x"557a527b",
-953 => x"53a93dff",
-954 => x"a8055186",
-955 => x"913f6264",
-956 => x"5e81b4c8",
-957 => x"0c7c81b4",
-958 => x"cc0c80d1",
-959 => x"a051edcc",
-960 => x"3f80e680",
-961 => x"085280d1",
-962 => x"d051edc0",
-963 => x"3f80d1d8",
-964 => x"51edb93f",
-965 => x"80e68808",
-966 => x"5280d1d0",
-967 => x"51edad3f",
-968 => x"81b4cc08",
-969 => x"5280d288",
-970 => x"51eda13f",
-971 => x"80d2a451",
-972 => x"ed9a3f80",
-973 => x"0b800ca9",
-974 => x"3d0d04a9",
-975 => x"3dffa005",
-976 => x"52805180",
-977 => x"d23f9f53",
-978 => x"80d3b052",
-979 => x"7c519d82",
-980 => x"3f7a7b81",
-981 => x"b4b80c81",
-982 => x"187081ff",
-983 => x"0681b4c0",
-984 => x"33595959",
-985 => x"5af5fe39",
-986 => x"ff16707b",
-987 => x"31600c5c",
-988 => x"800b811c",
-989 => x"5c5c80d6",
-990 => x"80087b25",
-991 => x"f3dc38f6",
-992 => x"a939ff3d",
-993 => x"0d738232",
-994 => x"70307072",
-995 => x"07802580",
-996 => x"0c525283",
-997 => x"3d0d04fe",
-998 => x"3d0d7476",
-999 => x"71535452",
-1000 => x"71822e83",
-1001 => x"38835171",
-1002 => x"812e9a38",
-1003 => x"8172269f",
-1004 => x"3871822e",
-1005 => x"b8387184",
-1006 => x"2ea93870",
-1007 => x"730c7080",
-1008 => x"0c843d0d",
-1009 => x"0480e40b",
-1010 => x"81b4b808",
-1011 => x"258b3880",
-1012 => x"730c7080",
-1013 => x"0c843d0d",
-1014 => x"0483730c",
-1015 => x"70800c84",
-1016 => x"3d0d0482",
-1017 => x"730c7080",
-1018 => x"0c843d0d",
-1019 => x"0481730c",
-1020 => x"70800c84",
-1021 => x"3d0d0480",
-1022 => x"3d0d7474",
-1023 => x"14820571",
-1024 => x"0c800c82",
-1025 => x"3d0d04f7",
-1026 => x"3d0d7b7d",
-1027 => x"7f618512",
-1028 => x"70822b75",
-1029 => x"11707471",
-1030 => x"70840553",
-1031 => x"0c5a5a5d",
-1032 => x"5b760c79",
-1033 => x"80f8180c",
-1034 => x"79861252",
-1035 => x"57585a5a",
-1036 => x"76762499",
-1037 => x"3876b329",
-1038 => x"822b7911",
-1039 => x"51537673",
-1040 => x"70840555",
-1041 => x"0c811454",
-1042 => x"757425f2",
-1043 => x"387681cc",
-1044 => x"2919fc11",
-1045 => x"088105fc",
-1046 => x"120c7a19",
-1047 => x"70089fa0",
-1048 => x"130c5856",
-1049 => x"850b81b4",
-1050 => x"b80c7580",
-1051 => x"0c8b3d0d",
-1052 => x"04fe3d0d",
-1053 => x"02930533",
-1054 => x"51800284",
-1055 => x"05970533",
-1056 => x"54527073",
-1057 => x"2e883871",
-1058 => x"800c843d",
-1059 => x"0d047081",
-1060 => x"b4bc3481",
-1061 => x"0b800c84",
-1062 => x"3d0d04f8",
-1063 => x"3d0d7a7c",
-1064 => x"5956820b",
-1065 => x"83195555",
-1066 => x"74167033",
-1067 => x"75335b51",
-1068 => x"5372792e",
-1069 => x"80c63880",
-1070 => x"c10b8116",
-1071 => x"81165656",
-1072 => x"57827525",
-1073 => x"e338ffa9",
-1074 => x"177081ff",
-1075 => x"06555973",
-1076 => x"82268338",
-1077 => x"87558153",
-1078 => x"7680d22e",
-1079 => x"98387752",
-1080 => x"75519bc3",
-1081 => x"3f805372",
-1082 => x"80082589",
-1083 => x"38871581",
-1084 => x"b4b80c81",
-1085 => x"5372800c",
-1086 => x"8a3d0d04",
-1087 => x"7281b4bc",
-1088 => x"34827525",
-1089 => x"ffa238ff",
-1090 => x"bd39ef3d",
-1091 => x"0d636567",
-1092 => x"5b427943",
-1093 => x"67695940",
-1094 => x"77415a80",
-1095 => x"5d805e61",
-1096 => x"7083ffff",
-1097 => x"0671902a",
-1098 => x"627083ff",
-1099 => x"ff067190",
-1100 => x"2a747229",
-1101 => x"74732975",
-1102 => x"73297774",
-1103 => x"2973902a",
-1104 => x"05721151",
-1105 => x"5856535f",
-1106 => x"5a575a58",
-1107 => x"55587373",
-1108 => x"27863884",
-1109 => x"80801656",
-1110 => x"73902a16",
-1111 => x"5b7883ff",
-1112 => x"ff067484",
-1113 => x"80802905",
-1114 => x"5c7a7c5a",
-1115 => x"5d785e77",
-1116 => x"7f296178",
-1117 => x"29057d05",
-1118 => x"5d7c7e56",
-1119 => x"7a0c7484",
-1120 => x"1b0c7980",
-1121 => x"0c933d0d",
-1122 => x"04f93d0d",
-1123 => x"797b7d54",
-1124 => x"58725977",
-1125 => x"30797030",
-1126 => x"7072079f",
-1127 => x"2a737131",
-1128 => x"5a525977",
-1129 => x"7956730c",
-1130 => x"53738413",
-1131 => x"0c54800c",
-1132 => x"893d0d04",
-1133 => x"f93d0d79",
-1134 => x"7b7d7f56",
-1135 => x"54525472",
-1136 => x"802ea038",
-1137 => x"70577158",
-1138 => x"a0733152",
-1139 => x"807225a1",
-1140 => x"38777074",
-1141 => x"2b577073",
-1142 => x"2a78752b",
-1143 => x"07565174",
-1144 => x"76535170",
-1145 => x"740c7184",
-1146 => x"150c7380",
-1147 => x"0c893d0d",
-1148 => x"04805677",
-1149 => x"72302b55",
-1150 => x"74765351",
-1151 => x"e639e43d",
-1152 => x"0d6ea13d",
-1153 => x"08a33d08",
-1154 => x"59575f80",
-1155 => x"764d774e",
-1156 => x"a33d08a5",
-1157 => x"3d08574b",
-1158 => x"754c5e7d",
-1159 => x"6c2486fb",
-1160 => x"38806a24",
-1161 => x"878f3869",
-1162 => x"6b58566b",
-1163 => x"6d5d467b",
-1164 => x"47754476",
-1165 => x"45646468",
-1166 => x"685c5c56",
-1167 => x"567481e7",
-1168 => x"38787627",
-1169 => x"82c73875",
-1170 => x"81ff2683",
-1171 => x"2b5583ff",
-1172 => x"ff76278c",
-1173 => x"389055fe",
-1174 => x"800a7627",
-1175 => x"83389855",
-1176 => x"75752a80",
-1177 => x"d3d00570",
-1178 => x"33a07731",
-1179 => x"71315755",
-1180 => x"5774802e",
-1181 => x"95387575",
-1182 => x"2ba07631",
-1183 => x"7a772b7c",
-1184 => x"722a077c",
-1185 => x"782b5d5b",
-1186 => x"59567590",
-1187 => x"2a7683ff",
-1188 => x"ff067154",
-1189 => x"7a535957",
-1190 => x"88803f80",
-1191 => x"085b87ea",
-1192 => x"3f800880",
-1193 => x"0879297c",
-1194 => x"902b7c90",
-1195 => x"2a075656",
-1196 => x"59737527",
-1197 => x"94388008",
-1198 => x"ff057615",
-1199 => x"55597574",
-1200 => x"26873874",
-1201 => x"742687b9",
-1202 => x"38765273",
-1203 => x"75315187",
-1204 => x"c93f8008",
-1205 => x"5587b33f",
-1206 => x"80088008",
-1207 => x"79297b83",
-1208 => x"ffff0677",
-1209 => x"902b0756",
-1210 => x"59577378",
-1211 => x"27963880",
-1212 => x"08ff0576",
-1213 => x"15555775",
-1214 => x"74268938",
-1215 => x"77742677",
-1216 => x"71315856",
-1217 => x"78902b77",
-1218 => x"0758805b",
-1219 => x"7a407741",
-1220 => x"7f615654",
-1221 => x"7d80d938",
-1222 => x"737f0c74",
-1223 => x"7f84050c",
-1224 => x"7e800c9e",
-1225 => x"3d0d0480",
-1226 => x"705c5874",
-1227 => x"7926dd38",
-1228 => x"7481ff26",
-1229 => x"832b5774",
-1230 => x"83ffff26",
-1231 => x"82a53874",
-1232 => x"772a80d3",
-1233 => x"d0057033",
-1234 => x"a0793171",
-1235 => x"31595c5d",
-1236 => x"7682b338",
-1237 => x"76547479",
-1238 => x"27833881",
-1239 => x"54797627",
-1240 => x"74075981",
-1241 => x"5878ffa2",
-1242 => x"38765880",
-1243 => x"5bff9d39",
-1244 => x"73527453",
-1245 => x"9e3de805",
-1246 => x"51fc8e3f",
-1247 => x"6769567f",
-1248 => x"0c747f84",
-1249 => x"050c7e80",
-1250 => x"0c9e3d0d",
-1251 => x"0475802e",
-1252 => x"81c43875",
-1253 => x"81ff2683",
-1254 => x"2b5583ff",
-1255 => x"ff76278c",
-1256 => x"389055fe",
-1257 => x"800a7627",
-1258 => x"83389855",
-1259 => x"75752a80",
-1260 => x"d3d00570",
-1261 => x"33a07731",
-1262 => x"7131575e",
-1263 => x"54748491",
-1264 => x"38787631",
-1265 => x"54817690",
-1266 => x"2a7783ff",
-1267 => x"ff065f5d",
-1268 => x"5b7b5273",
-1269 => x"5185c33f",
-1270 => x"80085785",
-1271 => x"ad3f8008",
-1272 => x"80087e29",
-1273 => x"78902b7c",
-1274 => x"902a0756",
-1275 => x"56597375",
-1276 => x"27943880",
-1277 => x"08ff0576",
-1278 => x"15555975",
-1279 => x"74268738",
-1280 => x"74742684",
-1281 => x"f3387b52",
-1282 => x"73753151",
-1283 => x"858c3f80",
-1284 => x"085584f6",
-1285 => x"3f800880",
-1286 => x"087e297b",
-1287 => x"83ffff06",
-1288 => x"77902b07",
-1289 => x"56595773",
-1290 => x"78279638",
-1291 => x"8008ff05",
-1292 => x"76155557",
-1293 => x"75742689",
-1294 => x"38777426",
-1295 => x"77713158",
-1296 => x"5a78902b",
-1297 => x"77077b41",
-1298 => x"417f6156",
-1299 => x"547d802e",
-1300 => x"fdc638fe",
-1301 => x"9b397552",
-1302 => x"815184ae",
-1303 => x"3f800856",
-1304 => x"feb13990",
-1305 => x"57fe800a",
-1306 => x"7527fdd3",
-1307 => x"38987571",
-1308 => x"2a80d3d0",
-1309 => x"057033a0",
-1310 => x"73317131",
-1311 => x"535d5e57",
-1312 => x"76802efd",
-1313 => x"cf38a077",
-1314 => x"3175782b",
-1315 => x"77722a07",
-1316 => x"77792b7b",
-1317 => x"7a2b7d74",
-1318 => x"2a077d7b",
-1319 => x"2b73902a",
-1320 => x"7483ffff",
-1321 => x"0671597f",
-1322 => x"772a585e",
-1323 => x"5c415f58",
-1324 => x"5c5483e6",
-1325 => x"3f800854",
-1326 => x"83d03f80",
-1327 => x"08800879",
-1328 => x"2975902b",
-1329 => x"7e902a07",
-1330 => x"56565973",
-1331 => x"75279938",
-1332 => x"8008ff05",
-1333 => x"7b155559",
-1334 => x"7a74268c",
-1335 => x"38737527",
-1336 => x"8738ff19",
-1337 => x"7b155559",
-1338 => x"76527375",
-1339 => x"315183aa",
-1340 => x"3f800855",
-1341 => x"83943f80",
-1342 => x"08800879",
-1343 => x"297d83ff",
-1344 => x"ff067790",
-1345 => x"2b075659",
-1346 => x"57737827",
-1347 => x"99388008",
-1348 => x"ff057b15",
-1349 => x"55577a74",
-1350 => x"268c3873",
-1351 => x"78278738",
-1352 => x"ff177b15",
-1353 => x"55577378",
-1354 => x"3179902b",
-1355 => x"78077083",
-1356 => x"ffff0671",
-1357 => x"902a7983",
-1358 => x"ffff067a",
-1359 => x"902a7372",
-1360 => x"29737329",
-1361 => x"74732976",
-1362 => x"74297390",
-1363 => x"2a057205",
-1364 => x"5755435f",
-1365 => x"5b585a57",
-1366 => x"595a747c",
-1367 => x"27863884",
-1368 => x"80801757",
-1369 => x"74902a17",
-1370 => x"7983ffff",
-1371 => x"06768480",
-1372 => x"80290557",
-1373 => x"57767a26",
-1374 => x"9a38767a",
-1375 => x"32703070",
-1376 => x"72078025",
-1377 => x"565a5b7c",
-1378 => x"7627fafe",
-1379 => x"3873802e",
-1380 => x"faf838ff",
-1381 => x"1858805b",
-1382 => x"faf239ff",
-1383 => x"76537754",
-1384 => x"9f3de805",
-1385 => x"525ef7e1",
-1386 => x"3f676957",
-1387 => x"4c754d69",
-1388 => x"8025f8f3",
-1389 => x"387d096a",
-1390 => x"6c5c537a",
-1391 => x"549f3de8",
-1392 => x"05525ef7",
-1393 => x"c43f6769",
-1394 => x"714c704d",
-1395 => x"5856f8db",
-1396 => x"39a07531",
-1397 => x"76762b7a",
-1398 => x"772b7c73",
-1399 => x"2a077c78",
-1400 => x"2b72902a",
-1401 => x"7383ffff",
-1402 => x"0671587e",
-1403 => x"762a5742",
-1404 => x"405d5d57",
-1405 => x"5881a33f",
-1406 => x"80085781",
-1407 => x"8d3f8008",
-1408 => x"80087e29",
-1409 => x"78902b7d",
-1410 => x"902a0756",
-1411 => x"56597375",
-1412 => x"27993880",
-1413 => x"08ff0576",
-1414 => x"15555975",
-1415 => x"74268c38",
-1416 => x"73752787",
-1417 => x"38ff1976",
-1418 => x"1555597b",
-1419 => x"52737531",
-1420 => x"5180e73f",
-1421 => x"80085580",
-1422 => x"d13f8008",
-1423 => x"80087e29",
-1424 => x"7c83ffff",
-1425 => x"06707890",
-1426 => x"2b075156",
-1427 => x"58587377",
-1428 => x"27993880",
-1429 => x"08ff0576",
-1430 => x"15555875",
-1431 => x"74268c38",
-1432 => x"73772787",
-1433 => x"38ff1876",
-1434 => x"15555878",
-1435 => x"902b7807",
-1436 => x"74783155",
-1437 => x"5bfada39",
-1438 => x"ff197615",
-1439 => x"5559fb86",
-1440 => x"39ff1976",
-1441 => x"155559f8",
-1442 => x"c0397070",
-1443 => x"70805375",
-1444 => x"52745181",
-1445 => x"913f5050",
-1446 => x"50047070",
-1447 => x"70815375",
-1448 => x"52745181",
-1449 => x"813f5050",
-1450 => x"5004fb3d",
-1451 => x"0d777955",
-1452 => x"55805675",
-1453 => x"7524ab38",
-1454 => x"8074249d",
-1455 => x"38805373",
-1456 => x"52745180",
-1457 => x"e13f8008",
-1458 => x"5475802e",
-1459 => x"85388008",
-1460 => x"30547380",
-1461 => x"0c873d0d",
-1462 => x"04733076",
-1463 => x"81325754",
-1464 => x"dc397430",
-1465 => x"55815673",
-1466 => x"8025d238",
-1467 => x"ec39fa3d",
-1468 => x"0d787a57",
-1469 => x"55805776",
-1470 => x"7524a438",
-1471 => x"759f2c54",
-1472 => x"81537574",
-1473 => x"32743152",
-1474 => x"74519b3f",
-1475 => x"80085476",
-1476 => x"802e8538",
-1477 => x"80083054",
-1478 => x"73800c88",
-1479 => x"3d0d0474",
-1480 => x"30558157",
-1481 => x"d739fc3d",
-1482 => x"0d767853",
-1483 => x"54815380",
-1484 => x"74732652",
-1485 => x"5572802e",
-1486 => x"98387080",
-1487 => x"2eab3880",
-1488 => x"7224a638",
-1489 => x"71107310",
-1490 => x"75722653",
-1491 => x"545272ea",
-1492 => x"38735178",
-1493 => x"83387451",
-1494 => x"70800c86",
-1495 => x"3d0d0472",
-1496 => x"0a100a72",
-1497 => x"0a100a53",
-1498 => x"5372802e",
-1499 => x"e4387174",
-1500 => x"26ed3873",
-1501 => x"72317574",
-1502 => x"07740a10",
-1503 => x"0a740a10",
-1504 => x"0a555556",
-1505 => x"54e33970",
-1506 => x"70735280",
-1507 => x"decc0851",
-1508 => x"933f5050",
-1509 => x"04707073",
-1510 => x"5280decc",
-1511 => x"085190ce",
-1512 => x"3f505004",
-1513 => x"f43d0d7e",
-1514 => x"608b1170",
-1515 => x"f8065b55",
-1516 => x"555d7296",
-1517 => x"26833890",
-1518 => x"58807824",
-1519 => x"74792607",
-1520 => x"55805474",
-1521 => x"742e0981",
-1522 => x"0680ca38",
-1523 => x"7c518d9e",
-1524 => x"3f7783f7",
-1525 => x"2680c538",
-1526 => x"77832a70",
-1527 => x"10101080",
-1528 => x"d6c4058c",
-1529 => x"11085858",
-1530 => x"5475772e",
-1531 => x"81f03884",
-1532 => x"1608fc06",
-1533 => x"8c170888",
-1534 => x"1808718c",
-1535 => x"120c8812",
-1536 => x"0c5b7605",
-1537 => x"84110881",
-1538 => x"0784120c",
-1539 => x"537c518c",
-1540 => x"de3f8816",
-1541 => x"5473800c",
-1542 => x"8e3d0d04",
-1543 => x"77892a78",
-1544 => x"832a5854",
-1545 => x"73802ebf",
-1546 => x"3877862a",
-1547 => x"b8055784",
-1548 => x"7427b438",
-1549 => x"80db1457",
-1550 => x"947427ab",
-1551 => x"38778c2a",
-1552 => x"80ee0557",
-1553 => x"80d47427",
-1554 => x"9e38778f",
-1555 => x"2a80f705",
-1556 => x"5782d474",
-1557 => x"27913877",
-1558 => x"922a80fc",
-1559 => x"05578ad4",
-1560 => x"74278438",
-1561 => x"80fe5776",
-1562 => x"10101080",
-1563 => x"d6c4058c",
-1564 => x"11085653",
-1565 => x"74732ea3",
-1566 => x"38841508",
-1567 => x"fc067079",
-1568 => x"31555673",
-1569 => x"8f2488e4",
-1570 => x"38738025",
-1571 => x"88e6388c",
-1572 => x"15085574",
-1573 => x"732e0981",
-1574 => x"06df3881",
-1575 => x"175980d6",
-1576 => x"d4085675",
-1577 => x"80d6cc2e",
-1578 => x"82cc3884",
-1579 => x"1608fc06",
-1580 => x"70793155",
-1581 => x"55738f24",
-1582 => x"bb3880d6",
-1583 => x"cc0b80d6",
-1584 => x"d80c80d6",
-1585 => x"cc0b80d6",
-1586 => x"d40c8074",
-1587 => x"2480db38",
-1588 => x"74168411",
-1589 => x"08810784",
-1590 => x"120c53fe",
-1591 => x"b0398816",
-1592 => x"8c110857",
-1593 => x"5975792e",
-1594 => x"098106fe",
-1595 => x"82388214",
-1596 => x"59ffab39",
-1597 => x"77167881",
-1598 => x"0784180c",
-1599 => x"7080d6d8",
-1600 => x"0c7080d6",
-1601 => x"d40c80d6",
-1602 => x"cc0b8c12",
-1603 => x"0c8c1108",
-1604 => x"88120c74",
-1605 => x"81078412",
-1606 => x"0c740574",
-1607 => x"710c5b7c",
-1608 => x"518acc3f",
-1609 => x"881654fd",
-1610 => x"ec3983ff",
-1611 => x"75278391",
-1612 => x"3874892a",
-1613 => x"75832a54",
-1614 => x"5473802e",
-1615 => x"bf387486",
-1616 => x"2ab80553",
-1617 => x"847427b4",
-1618 => x"3880db14",
-1619 => x"53947427",
-1620 => x"ab38748c",
-1621 => x"2a80ee05",
-1622 => x"5380d474",
-1623 => x"279e3874",
-1624 => x"8f2a80f7",
-1625 => x"055382d4",
-1626 => x"74279138",
-1627 => x"74922a80",
-1628 => x"fc05538a",
-1629 => x"d4742784",
-1630 => x"3880fe53",
-1631 => x"72101010",
-1632 => x"80d6c405",
-1633 => x"88110855",
-1634 => x"5773772e",
-1635 => x"868b3884",
-1636 => x"1408fc06",
-1637 => x"5b747b27",
-1638 => x"8d388814",
-1639 => x"08547377",
-1640 => x"2e098106",
-1641 => x"ea388c14",
-1642 => x"0880d6c4",
-1643 => x"0b840508",
-1644 => x"718c190c",
-1645 => x"7588190c",
-1646 => x"7788130c",
-1647 => x"5c57758c",
-1648 => x"150c7853",
-1649 => x"80792483",
-1650 => x"98387282",
-1651 => x"2c81712b",
-1652 => x"5656747b",
-1653 => x"2680ca38",
-1654 => x"7a750657",
-1655 => x"7682a338",
-1656 => x"78fc0684",
-1657 => x"05597410",
-1658 => x"707c0655",
-1659 => x"55738292",
-1660 => x"38841959",
-1661 => x"f13980d6",
-1662 => x"c40b8405",
-1663 => x"0879545b",
-1664 => x"788025c6",
-1665 => x"3882da39",
-1666 => x"74097b06",
-1667 => x"7080d6c4",
-1668 => x"0b84050c",
-1669 => x"5b741055",
-1670 => x"747b2685",
-1671 => x"387485bc",
-1672 => x"3880d6c4",
-1673 => x"0b880508",
-1674 => x"70841208",
-1675 => x"fc06707b",
-1676 => x"317b7226",
-1677 => x"8f722507",
-1678 => x"5d575c5c",
-1679 => x"5578802e",
-1680 => x"80d93879",
-1681 => x"1580d6bc",
-1682 => x"08199011",
-1683 => x"59545680",
-1684 => x"d6b808ff",
-1685 => x"2e8838a0",
-1686 => x"8f13e080",
-1687 => x"06577652",
-1688 => x"7c51888c",
-1689 => x"3f800854",
-1690 => x"8008ff2e",
-1691 => x"90388008",
-1692 => x"762782a7",
-1693 => x"387480d6",
-1694 => x"c42e829f",
-1695 => x"3880d6c4",
-1696 => x"0b880508",
-1697 => x"55841508",
-1698 => x"fc067079",
-1699 => x"31797226",
-1700 => x"8f722507",
-1701 => x"5d555a7a",
-1702 => x"83f23877",
-1703 => x"81078416",
-1704 => x"0c771570",
-1705 => x"80d6c40b",
-1706 => x"88050c74",
-1707 => x"81078412",
-1708 => x"0c567c51",
-1709 => x"87b93f88",
-1710 => x"15547380",
-1711 => x"0c8e3d0d",
-1712 => x"0474832a",
-1713 => x"70545480",
-1714 => x"7424819b",
-1715 => x"3872822c",
-1716 => x"81712b80",
-1717 => x"d6c80807",
-1718 => x"7080d6c4",
-1719 => x"0b84050c",
-1720 => x"75101010",
-1721 => x"80d6c405",
-1722 => x"88110871",
-1723 => x"8c1b0c70",
-1724 => x"881b0c79",
-1725 => x"88130c57",
-1726 => x"555c5575",
-1727 => x"8c150cfd",
-1728 => x"c1397879",
-1729 => x"10101080",
-1730 => x"d6c40570",
-1731 => x"565b5c8c",
-1732 => x"14085675",
-1733 => x"742ea338",
-1734 => x"841608fc",
-1735 => x"06707931",
-1736 => x"5853768f",
-1737 => x"2483f138",
-1738 => x"76802584",
-1739 => x"af388c16",
-1740 => x"08567574",
-1741 => x"2e098106",
-1742 => x"df388814",
-1743 => x"811a7083",
-1744 => x"06555a54",
-1745 => x"72c9387b",
-1746 => x"83065675",
-1747 => x"802efdb8",
-1748 => x"38ff1cf8",
-1749 => x"1b5b5c88",
-1750 => x"1a087a2e",
-1751 => x"ea38fdb5",
-1752 => x"39831953",
-1753 => x"fce43983",
-1754 => x"1470822c",
-1755 => x"81712b80",
-1756 => x"d6c80807",
-1757 => x"7080d6c4",
-1758 => x"0b84050c",
-1759 => x"76101010",
-1760 => x"80d6c405",
-1761 => x"88110871",
-1762 => x"8c1c0c70",
-1763 => x"881c0c7a",
-1764 => x"88130c58",
-1765 => x"535d5653",
-1766 => x"fee13980",
-1767 => x"d6880817",
-1768 => x"59800876",
-1769 => x"2e818b38",
-1770 => x"80d6b808",
-1771 => x"ff2e848e",
-1772 => x"38737631",
-1773 => x"1980d688",
-1774 => x"0c738706",
-1775 => x"70565372",
-1776 => x"802e8838",
-1777 => x"88733170",
-1778 => x"15555576",
-1779 => x"149fff06",
-1780 => x"a0807131",
-1781 => x"1670547e",
-1782 => x"53515385",
-1783 => x"933f8008",
-1784 => x"568008ff",
-1785 => x"2e819e38",
-1786 => x"80d68808",
-1787 => x"137080d6",
-1788 => x"880c7475",
-1789 => x"80d6c40b",
-1790 => x"88050c77",
-1791 => x"76311581",
-1792 => x"07555659",
-1793 => x"7a80d6c4",
-1794 => x"2e83c038",
-1795 => x"798f2682",
-1796 => x"ef38810b",
-1797 => x"84150c84",
-1798 => x"1508fc06",
-1799 => x"70793179",
-1800 => x"72268f72",
-1801 => x"25075d55",
-1802 => x"5a7a802e",
-1803 => x"fced3880",
-1804 => x"db398008",
-1805 => x"9fff0655",
-1806 => x"74feed38",
-1807 => x"7880d688",
-1808 => x"0c80d6c4",
-1809 => x"0b880508",
-1810 => x"7a188107",
-1811 => x"84120c55",
-1812 => x"80d6b408",
-1813 => x"79278638",
-1814 => x"7880d6b4",
-1815 => x"0c80d6b0",
-1816 => x"087927fc",
-1817 => x"a0387880",
-1818 => x"d6b00c84",
-1819 => x"1508fc06",
-1820 => x"70793179",
-1821 => x"72268f72",
-1822 => x"25075d55",
-1823 => x"5a7a802e",
-1824 => x"fc993888",
-1825 => x"39807457",
-1826 => x"53fedd39",
-1827 => x"7c5183df",
-1828 => x"3f800b80",
-1829 => x"0c8e3d0d",
-1830 => x"04807324",
-1831 => x"a5387282",
-1832 => x"2c81712b",
-1833 => x"80d6c808",
-1834 => x"077080d6",
-1835 => x"c40b8405",
-1836 => x"0c5c5a76",
-1837 => x"8c170c73",
-1838 => x"88170c75",
-1839 => x"88180cf9",
-1840 => x"fd398313",
-1841 => x"70822c81",
-1842 => x"712b80d6",
-1843 => x"c8080770",
-1844 => x"80d6c40b",
-1845 => x"84050c5d",
-1846 => x"5b53d839",
-1847 => x"7a75065c",
-1848 => x"7bfc9f38",
-1849 => x"84197510",
-1850 => x"5659f139",
-1851 => x"ff178105",
-1852 => x"59f7ab39",
-1853 => x"8c150888",
-1854 => x"1608718c",
-1855 => x"120c8812",
-1856 => x"0c597515",
-1857 => x"84110881",
-1858 => x"0784120c",
-1859 => x"587c5182",
-1860 => x"de3f8815",
-1861 => x"54fba339",
-1862 => x"77167881",
-1863 => x"0784180c",
-1864 => x"8c170888",
-1865 => x"1808718c",
-1866 => x"120c8812",
-1867 => x"0c5c7080",
-1868 => x"d6d80c70",
-1869 => x"80d6d40c",
-1870 => x"80d6cc0b",
-1871 => x"8c120c8c",
-1872 => x"11088812",
-1873 => x"0c778107",
-1874 => x"84120c77",
-1875 => x"0577710c",
-1876 => x"557c5182",
-1877 => x"9a3f8816",
-1878 => x"54f5ba39",
-1879 => x"72168411",
-1880 => x"08810784",
-1881 => x"120c588c",
-1882 => x"16088817",
-1883 => x"08718c12",
-1884 => x"0c88120c",
-1885 => x"577c5181",
-1886 => x"f63f8816",
-1887 => x"54f59639",
-1888 => x"7284150c",
-1889 => x"f41af806",
-1890 => x"70841d08",
-1891 => x"81060784",
-1892 => x"1d0c701c",
-1893 => x"5556850b",
-1894 => x"84150c85",
-1895 => x"0b88150c",
-1896 => x"8f7627fd",
-1897 => x"ab38881b",
-1898 => x"527c5184",
-1899 => x"c13f80d6",
-1900 => x"c40b8805",
-1901 => x"0880d688",
-1902 => x"085a55fd",
-1903 => x"93397880",
-1904 => x"d6880c73",
-1905 => x"80d6b80c",
-1906 => x"fbef3972",
-1907 => x"84150cfc",
-1908 => x"ff39fb3d",
-1909 => x"0d77707a",
-1910 => x"7c585553",
-1911 => x"568f7527",
-1912 => x"80e63872",
-1913 => x"76078306",
-1914 => x"517080dc",
-1915 => x"38757352",
-1916 => x"54707084",
-1917 => x"05520874",
-1918 => x"70840556",
-1919 => x"0c737170",
-1920 => x"84055308",
-1921 => x"71708405",
-1922 => x"530c7170",
-1923 => x"84055308",
-1924 => x"71708405",
-1925 => x"530c7170",
-1926 => x"84055308",
-1927 => x"71708405",
-1928 => x"530cf016",
-1929 => x"5654748f",
-1930 => x"26c73883",
-1931 => x"75279538",
-1932 => x"70708405",
-1933 => x"52087470",
-1934 => x"8405560c",
-1935 => x"fc155574",
-1936 => x"8326ed38",
-1937 => x"73715452",
-1938 => x"ff155170",
-1939 => x"ff2e9838",
-1940 => x"72708105",
-1941 => x"54337270",
-1942 => x"81055434",
-1943 => x"ff115170",
-1944 => x"ff2e0981",
-1945 => x"06ea3875",
-1946 => x"800c873d",
-1947 => x"0d040404",
-1948 => x"70707070",
-1949 => x"800b81b6",
-1950 => x"9c0c7651",
-1951 => x"87cc3f80",
-1952 => x"08538008",
-1953 => x"ff2e8938",
-1954 => x"72800c50",
-1955 => x"50505004",
-1956 => x"81b69c08",
-1957 => x"5473802e",
-1958 => x"ef387574",
-1959 => x"710c5272",
-1960 => x"800c5050",
-1961 => x"505004fb",
-1962 => x"3d0d7779",
-1963 => x"70720783",
-1964 => x"06535452",
-1965 => x"70933871",
-1966 => x"73730854",
-1967 => x"56547173",
-1968 => x"082e80c4",
-1969 => x"38737554",
-1970 => x"52713370",
-1971 => x"81ff0652",
-1972 => x"5470802e",
-1973 => x"9d387233",
-1974 => x"5570752e",
-1975 => x"09810695",
-1976 => x"38811281",
-1977 => x"14713370",
-1978 => x"81ff0654",
-1979 => x"56545270",
-1980 => x"e5387233",
-1981 => x"557381ff",
-1982 => x"067581ff",
-1983 => x"06717131",
-1984 => x"800c5552",
-1985 => x"873d0d04",
-1986 => x"7109f7fb",
-1987 => x"fdff1306",
-1988 => x"f8848281",
-1989 => x"80065271",
-1990 => x"97388414",
-1991 => x"84167108",
-1992 => x"54565471",
-1993 => x"75082ee0",
-1994 => x"38737554",
-1995 => x"52ff9a39",
-1996 => x"800b800c",
-1997 => x"873d0d04",
-1998 => x"fb3d0d77",
-1999 => x"705256fe",
-2000 => x"ad3f80d6",
-2001 => x"c40b8805",
-2002 => x"08841108",
-2003 => x"fc06707b",
-2004 => x"319fef05",
-2005 => x"e08006e0",
-2006 => x"80055255",
-2007 => x"55a08075",
-2008 => x"24943880",
-2009 => x"527551fe",
-2010 => x"873f80d6",
-2011 => x"cc081453",
-2012 => x"7280082e",
-2013 => x"8f387551",
-2014 => x"fdf53f80",
-2015 => x"5372800c",
-2016 => x"873d0d04",
-2017 => x"74305275",
-2018 => x"51fde53f",
-2019 => x"8008ff2e",
-2020 => x"a83880d6",
-2021 => x"c40b8805",
-2022 => x"08747631",
-2023 => x"81078412",
-2024 => x"0c5380d6",
-2025 => x"88087531",
-2026 => x"80d6880c",
-2027 => x"7551fdbf",
-2028 => x"3f810b80",
-2029 => x"0c873d0d",
-2030 => x"04805275",
-2031 => x"51fdb13f",
-2032 => x"80d6c40b",
-2033 => x"88050880",
-2034 => x"08713154",
-2035 => x"548f7325",
-2036 => x"ffa43880",
-2037 => x"0880d6b8",
-2038 => x"083180d6",
-2039 => x"880c7281",
-2040 => x"0784150c",
-2041 => x"7551fd87",
-2042 => x"3f8053ff",
-2043 => x"9039f73d",
-2044 => x"0d7b7d54",
-2045 => x"5a72802e",
-2046 => x"82833879",
-2047 => x"51fcef3f",
-2048 => x"f8138411",
-2049 => x"0870fe06",
-2050 => x"70138411",
-2051 => x"08fc065c",
-2052 => x"57585457",
-2053 => x"80d6cc08",
-2054 => x"742e82de",
-2055 => x"38778415",
-2056 => x"0c807381",
-2057 => x"06565974",
-2058 => x"792e81d5",
-2059 => x"38771484",
-2060 => x"11088106",
-2061 => x"565374a0",
-2062 => x"38771656",
-2063 => x"7881e638",
-2064 => x"88140855",
-2065 => x"7480d6cc",
-2066 => x"2e82f938",
-2067 => x"8c140870",
-2068 => x"8c170c75",
-2069 => x"88120c58",
-2070 => x"75810784",
-2071 => x"180c7517",
-2072 => x"76710c54",
-2073 => x"78819138",
-2074 => x"83ff7627",
-2075 => x"81c83875",
-2076 => x"892a7683",
-2077 => x"2a545473",
-2078 => x"802ebf38",
-2079 => x"75862ab8",
-2080 => x"05538474",
-2081 => x"27b43880",
-2082 => x"db145394",
-2083 => x"7427ab38",
-2084 => x"758c2a80",
-2085 => x"ee055380",
-2086 => x"d474279e",
-2087 => x"38758f2a",
-2088 => x"80f70553",
-2089 => x"82d47427",
-2090 => x"91387592",
-2091 => x"2a80fc05",
-2092 => x"538ad474",
-2093 => x"27843880",
-2094 => x"fe537210",
-2095 => x"101080d6",
-2096 => x"c4058811",
-2097 => x"08555573",
-2098 => x"752e82bf",
-2099 => x"38841408",
-2100 => x"fc065975",
-2101 => x"79278d38",
-2102 => x"88140854",
-2103 => x"73752e09",
-2104 => x"8106ea38",
-2105 => x"8c140870",
-2106 => x"8c190c74",
-2107 => x"88190c77",
-2108 => x"88120c55",
-2109 => x"768c150c",
-2110 => x"7951faf3",
-2111 => x"3f8b3d0d",
-2112 => x"04760877",
-2113 => x"71315876",
-2114 => x"05881808",
-2115 => x"56567480",
-2116 => x"d6cc2e80",
-2117 => x"e0388c17",
-2118 => x"08708c17",
-2119 => x"0c758812",
-2120 => x"0c53fe89",
-2121 => x"39881408",
-2122 => x"8c150870",
-2123 => x"8c130c59",
-2124 => x"88190cfe",
-2125 => x"a3397583",
-2126 => x"2a705454",
-2127 => x"80742481",
-2128 => x"98387282",
-2129 => x"2c81712b",
-2130 => x"80d6c808",
-2131 => x"0780d6c4",
-2132 => x"0b84050c",
-2133 => x"74101010",
-2134 => x"80d6c405",
-2135 => x"88110871",
-2136 => x"8c1b0c70",
-2137 => x"881b0c79",
-2138 => x"88130c56",
-2139 => x"5a55768c",
-2140 => x"150cff84",
-2141 => x"398159fd",
-2142 => x"b4397716",
-2143 => x"73810654",
-2144 => x"55729838",
-2145 => x"76087771",
-2146 => x"31587505",
-2147 => x"8c180888",
-2148 => x"1908718c",
-2149 => x"120c8812",
-2150 => x"0c555574",
-2151 => x"81078418",
-2152 => x"0c7680d6",
-2153 => x"c40b8805",
-2154 => x"0c80d6c0",
-2155 => x"087526fe",
-2156 => x"c73880d6",
-2157 => x"bc085279",
-2158 => x"51fafd3f",
-2159 => x"7951f9af",
-2160 => x"3ffeba39",
-2161 => x"81778c17",
-2162 => x"0c778817",
-2163 => x"0c758c19",
-2164 => x"0c758819",
-2165 => x"0c59fd80",
-2166 => x"39831470",
-2167 => x"822c8171",
-2168 => x"2b80d6c8",
-2169 => x"080780d6",
-2170 => x"c40b8405",
-2171 => x"0c751010",
-2172 => x"1080d6c4",
-2173 => x"05881108",
-2174 => x"718c1c0c",
-2175 => x"70881c0c",
-2176 => x"7a88130c",
-2177 => x"575b5653",
-2178 => x"fee43980",
-2179 => x"7324a338",
-2180 => x"72822c81",
-2181 => x"712b80d6",
-2182 => x"c8080780",
-2183 => x"d6c40b84",
-2184 => x"050c5874",
-2185 => x"8c180c73",
-2186 => x"88180c76",
-2187 => x"88160cfd",
-2188 => x"c3398313",
-2189 => x"70822c81",
-2190 => x"712b80d6",
-2191 => x"c8080780",
-2192 => x"d6c40b84",
-2193 => x"050c5953",
-2194 => x"da397070",
-2195 => x"7080e5f4",
-2196 => x"08893881",
-2197 => x"b6a00b80",
-2198 => x"e5f40c80",
-2199 => x"e5f40875",
-2200 => x"115252ff",
-2201 => x"537087fb",
-2202 => x"80802688",
-2203 => x"387080e5",
-2204 => x"f40c7153",
-2205 => x"72800c50",
-2206 => x"505004fd",
-2207 => x"3d0d800b",
-2208 => x"80d5f408",
-2209 => x"54547281",
-2210 => x"2e9b3873",
-2211 => x"80e5f80c",
-2212 => x"c3ee3fc2",
-2213 => x"eb3f80e5",
-2214 => x"cc528151",
-2215 => x"cc933f80",
-2216 => x"085180dd",
-2217 => x"3f7280e5",
-2218 => x"f80cc3d4",
-2219 => x"3fc2d13f",
-2220 => x"80e5cc52",
-2221 => x"8151cbf9",
-2222 => x"3f800851",
-2223 => x"80c33f00",
-2224 => x"ff3900ff",
-2225 => x"39f43d0d",
-2226 => x"7e80e5ec",
-2227 => x"08700870",
-2228 => x"81ff0692",
-2229 => x"3df80555",
-2230 => x"515a5759",
-2231 => x"c48f3f80",
-2232 => x"5477557b",
-2233 => x"7d585276",
-2234 => x"538e3df0",
-2235 => x"0551de8e",
-2236 => x"3f797b58",
-2237 => x"790c7684",
-2238 => x"1a0c7880",
-2239 => x"0c8e3d0d",
-2240 => x"04f73d0d",
-2241 => x"7b80decc",
-2242 => x"0882c811",
-2243 => x"085a545a",
-2244 => x"77802e80",
-2245 => x"da388188",
-2246 => x"18841908",
-2247 => x"ff058171",
-2248 => x"2b595559",
-2249 => x"80742480",
-2250 => x"ea388074",
-2251 => x"24b53873",
-2252 => x"822b7811",
-2253 => x"88055656",
-2254 => x"81801908",
-2255 => x"77065372",
-2256 => x"802eb638",
-2257 => x"78167008",
-2258 => x"53537951",
-2259 => x"74085372",
-2260 => x"2dff14fc",
-2261 => x"17fc1779",
-2262 => x"812c5a57",
-2263 => x"57547380",
-2264 => x"25d63877",
-2265 => x"085877ff",
-2266 => x"ad3880de",
-2267 => x"cc0853bc",
-2268 => x"1308a538",
-2269 => x"7951fec7",
-2270 => x"3f740853",
-2271 => x"722dff14",
-2272 => x"fc17fc17",
-2273 => x"79812c5a",
-2274 => x"57575473",
-2275 => x"8025ffa8",
-2276 => x"38d13980",
-2277 => x"57ff9339",
-2278 => x"7251bc13",
-2279 => x"0854732d",
-2280 => x"7951fe9b",
-2281 => x"3f707080",
-2282 => x"e5d40bfc",
-2283 => x"05700852",
-2284 => x"5270ff2e",
-2285 => x"9138702d",
-2286 => x"fc127008",
-2287 => x"525270ff",
-2288 => x"2e098106",
-2289 => x"f1385050",
-2290 => x"0404c2ff",
-2291 => x"3f040000",
-2292 => x"00000040",
-2293 => x"30313233",
-2294 => x"34353637",
-2295 => x"38390000",
-2296 => x"44485259",
-2297 => x"53544f4e",
-2298 => x"45205052",
-2299 => x"4f475241",
-2300 => x"4d2c2053",
-2301 => x"4f4d4520",
-2302 => x"53545249",
-2303 => x"4e470000",
-2304 => x"44485259",
-2305 => x"53544f4e",
-2306 => x"45205052",
-2307 => x"4f475241",
-2308 => x"4d2c2031",
-2309 => x"27535420",
-2310 => x"53545249",
-2311 => x"4e470000",
-2312 => x"44687279",
-2313 => x"73746f6e",
-2314 => x"65204265",
-2315 => x"6e63686d",
-2316 => x"61726b2c",
-2317 => x"20566572",
-2318 => x"73696f6e",
-2319 => x"20322e31",
-2320 => x"20284c61",
-2321 => x"6e677561",
-2322 => x"67653a20",
-2323 => x"43290a00",
-2324 => x"50726f67",
-2325 => x"72616d20",
-2326 => x"636f6d70",
-2327 => x"696c6564",
-2328 => x"20776974",
-2329 => x"68202772",
-2330 => x"65676973",
-2331 => x"74657227",
-2332 => x"20617474",
-2333 => x"72696275",
-2334 => x"74650a00",
-2335 => x"45786563",
-2336 => x"7574696f",
-2337 => x"6e207374",
-2338 => x"61727473",
-2339 => x"2c202564",
-2340 => x"2072756e",
-2341 => x"73207468",
-2342 => x"726f7567",
-2343 => x"68204468",
-2344 => x"72797374",
-2345 => x"6f6e650a",
-2346 => x"00000000",
-2347 => x"44485259",
-2348 => x"53544f4e",
-2349 => x"45205052",
-2350 => x"4f475241",
-2351 => x"4d2c2032",
-2352 => x"274e4420",
-2353 => x"53545249",
-2354 => x"4e470000",
-2355 => x"45786563",
-2356 => x"7574696f",
-2357 => x"6e20656e",
-2358 => x"64730a00",
-2359 => x"46696e61",
-2360 => x"6c207661",
-2361 => x"6c756573",
-2362 => x"206f6620",
-2363 => x"74686520",
-2364 => x"76617269",
-2365 => x"61626c65",
-2366 => x"73207573",
-2367 => x"65642069",
-2368 => x"6e207468",
-2369 => x"65206265",
-2370 => x"6e63686d",
-2371 => x"61726b3a",
-2372 => x"0a000000",
-2373 => x"496e745f",
-2374 => x"476c6f62",
-2375 => x"3a202020",
-2376 => x"20202020",
-2377 => x"20202020",
-2378 => x"2025640a",
-2379 => x"00000000",
-2380 => x"20202020",
-2381 => x"20202020",
-2382 => x"73686f75",
-2383 => x"6c642062",
-2384 => x"653a2020",
-2385 => x"2025640a",
-2386 => x"00000000",
-2387 => x"426f6f6c",
-2388 => x"5f476c6f",
-2389 => x"623a2020",
-2390 => x"20202020",
-2391 => x"20202020",
-2392 => x"2025640a",
-2393 => x"00000000",
-2394 => x"43685f31",
-2395 => x"5f476c6f",
-2396 => x"623a2020",
-2397 => x"20202020",
-2398 => x"20202020",
-2399 => x"2025630a",
-2400 => x"00000000",
-2401 => x"20202020",
-2402 => x"20202020",
-2403 => x"73686f75",
-2404 => x"6c642062",
-2405 => x"653a2020",
-2406 => x"2025630a",
-2407 => x"00000000",
-2408 => x"43685f32",
-2409 => x"5f476c6f",
-2410 => x"623a2020",
-2411 => x"20202020",
-2412 => x"20202020",
-2413 => x"2025630a",
-2414 => x"00000000",
-2415 => x"4172725f",
-2416 => x"315f476c",
-2417 => x"6f625b38",
-2418 => x"5d3a2020",
-2419 => x"20202020",
-2420 => x"2025640a",
-2421 => x"00000000",
-2422 => x"4172725f",
-2423 => x"325f476c",
-2424 => x"6f625b38",
-2425 => x"5d5b375d",
-2426 => x"3a202020",
-2427 => x"2025640a",
-2428 => x"00000000",
-2429 => x"20202020",
-2430 => x"20202020",
-2431 => x"73686f75",
-2432 => x"6c642062",
-2433 => x"653a2020",
-2434 => x"204e756d",
-2435 => x"6265725f",
-2436 => x"4f665f52",
-2437 => x"756e7320",
-2438 => x"2b203130",
-2439 => x"0a000000",
-2440 => x"5074725f",
-2441 => x"476c6f62",
-2442 => x"2d3e0a00",
-2443 => x"20205074",
-2444 => x"725f436f",
-2445 => x"6d703a20",
-2446 => x"20202020",
-2447 => x"20202020",
-2448 => x"2025640a",
-2449 => x"00000000",
-2450 => x"20202020",
-2451 => x"20202020",
-2452 => x"73686f75",
-2453 => x"6c642062",
-2454 => x"653a2020",
-2455 => x"2028696d",
-2456 => x"706c656d",
-2457 => x"656e7461",
-2458 => x"74696f6e",
-2459 => x"2d646570",
-2460 => x"656e6465",
-2461 => x"6e74290a",
-2462 => x"00000000",
-2463 => x"20204469",
-2464 => x"7363723a",
-2465 => x"20202020",
-2466 => x"20202020",
-2467 => x"20202020",
-2468 => x"2025640a",
-2469 => x"00000000",
-2470 => x"2020456e",
-2471 => x"756d5f43",
-2472 => x"6f6d703a",
-2473 => x"20202020",
-2474 => x"20202020",
-2475 => x"2025640a",
-2476 => x"00000000",
-2477 => x"2020496e",
-2478 => x"745f436f",
-2479 => x"6d703a20",
-2480 => x"20202020",
-2481 => x"20202020",
-2482 => x"2025640a",
-2483 => x"00000000",
-2484 => x"20205374",
-2485 => x"725f436f",
-2486 => x"6d703a20",
-2487 => x"20202020",
-2488 => x"20202020",
-2489 => x"2025730a",
-2490 => x"00000000",
-2491 => x"20202020",
-2492 => x"20202020",
-2493 => x"73686f75",
-2494 => x"6c642062",
-2495 => x"653a2020",
-2496 => x"20444852",
-2497 => x"5953544f",
-2498 => x"4e452050",
-2499 => x"524f4752",
-2500 => x"414d2c20",
-2501 => x"534f4d45",
-2502 => x"20535452",
-2503 => x"494e470a",
-2504 => x"00000000",
-2505 => x"4e657874",
-2506 => x"5f507472",
-2507 => x"5f476c6f",
-2508 => x"622d3e0a",
-2509 => x"00000000",
-2510 => x"20202020",
-2511 => x"20202020",
-2512 => x"73686f75",
-2513 => x"6c642062",
-2514 => x"653a2020",
-2515 => x"2028696d",
-2516 => x"706c656d",
-2517 => x"656e7461",
-2518 => x"74696f6e",
-2519 => x"2d646570",
-2520 => x"656e6465",
-2521 => x"6e74292c",
-2522 => x"2073616d",
-2523 => x"65206173",
-2524 => x"2061626f",
-2525 => x"76650a00",
-2526 => x"496e745f",
-2527 => x"315f4c6f",
-2528 => x"633a2020",
-2529 => x"20202020",
-2530 => x"20202020",
-2531 => x"2025640a",
-2532 => x"00000000",
-2533 => x"496e745f",
-2534 => x"325f4c6f",
-2535 => x"633a2020",
-2536 => x"20202020",
-2537 => x"20202020",
-2538 => x"2025640a",
-2539 => x"00000000",
-2540 => x"496e745f",
-2541 => x"335f4c6f",
-2542 => x"633a2020",
-2543 => x"20202020",
-2544 => x"20202020",
-2545 => x"2025640a",
-2546 => x"00000000",
-2547 => x"456e756d",
-2548 => x"5f4c6f63",
-2549 => x"3a202020",
-2550 => x"20202020",
-2551 => x"20202020",
-2552 => x"2025640a",
-2553 => x"00000000",
-2554 => x"5374725f",
-2555 => x"315f4c6f",
-2556 => x"633a2020",
-2557 => x"20202020",
-2558 => x"20202020",
-2559 => x"2025730a",
-2560 => x"00000000",
-2561 => x"20202020",
-2562 => x"20202020",
-2563 => x"73686f75",
-2564 => x"6c642062",
-2565 => x"653a2020",
-2566 => x"20444852",
-2567 => x"5953544f",
-2568 => x"4e452050",
-2569 => x"524f4752",
-2570 => x"414d2c20",
-2571 => x"31275354",
-2572 => x"20535452",
-2573 => x"494e470a",
-2574 => x"00000000",
-2575 => x"5374725f",
-2576 => x"325f4c6f",
-2577 => x"633a2020",
-2578 => x"20202020",
-2579 => x"20202020",
-2580 => x"2025730a",
-2581 => x"00000000",
-2582 => x"20202020",
-2583 => x"20202020",
-2584 => x"73686f75",
-2585 => x"6c642062",
-2586 => x"653a2020",
-2587 => x"20444852",
-2588 => x"5953544f",
-2589 => x"4e452050",
-2590 => x"524f4752",
-2591 => x"414d2c20",
-2592 => x"32274e44",
-2593 => x"20535452",
-2594 => x"494e470a",
-2595 => x"00000000",
-2596 => x"55736572",
-2597 => x"2074696d",
-2598 => x"653a2025",
-2599 => x"640a0000",
-2600 => x"4d696372",
-2601 => x"6f736563",
-2602 => x"6f6e6473",
-2603 => x"20666f72",
-2604 => x"206f6e65",
-2605 => x"2072756e",
-2606 => x"20746872",
-2607 => x"6f756768",
-2608 => x"20446872",
-2609 => x"7973746f",
-2610 => x"6e653a20",
-2611 => x"00000000",
-2612 => x"2564200a",
-2613 => x"00000000",
-2614 => x"44687279",
-2615 => x"73746f6e",
-2616 => x"65732070",
-2617 => x"65722053",
-2618 => x"65636f6e",
-2619 => x"643a2020",
-2620 => x"20202020",
-2621 => x"20202020",
-2622 => x"20202020",
-2623 => x"20202020",
-2624 => x"20202020",
-2625 => x"00000000",
-2626 => x"56415820",
-2627 => x"4d495053",
-2628 => x"20726174",
-2629 => x"696e6720",
-2630 => x"2a203130",
-2631 => x"3030203d",
-2632 => x"20256420",
-2633 => x"0a000000",
-2634 => x"50726f67",
-2635 => x"72616d20",
-2636 => x"636f6d70",
-2637 => x"696c6564",
-2638 => x"20776974",
-2639 => x"686f7574",
-2640 => x"20277265",
-2641 => x"67697374",
-2642 => x"65722720",
-2643 => x"61747472",
-2644 => x"69627574",
-2645 => x"650a0000",
-2646 => x"4d656173",
-2647 => x"75726564",
-2648 => x"2074696d",
-2649 => x"6520746f",
-2650 => x"6f20736d",
-2651 => x"616c6c20",
-2652 => x"746f206f",
-2653 => x"62746169",
-2654 => x"6e206d65",
-2655 => x"616e696e",
-2656 => x"6766756c",
-2657 => x"20726573",
-2658 => x"756c7473",
-2659 => x"0a000000",
-2660 => x"506c6561",
-2661 => x"73652069",
-2662 => x"6e637265",
-2663 => x"61736520",
-2664 => x"6e756d62",
-2665 => x"6572206f",
-2666 => x"66207275",
-2667 => x"6e730a00",
-2668 => x"44485259",
-2669 => x"53544f4e",
-2670 => x"45205052",
-2671 => x"4f475241",
-2672 => x"4d2c2033",
-2673 => x"27524420",
-2674 => x"53545249",
-2675 => x"4e470000",
-2676 => x"00010202",
-2677 => x"03030303",
-2678 => x"04040404",
-2679 => x"04040404",
-2680 => x"05050505",
-2681 => x"05050505",
-2682 => x"05050505",
-2683 => x"05050505",
-2684 => x"06060606",
-2685 => x"06060606",
-2686 => x"06060606",
-2687 => x"06060606",
-2688 => x"06060606",
-2689 => x"06060606",
-2690 => x"06060606",
-2691 => x"06060606",
-2692 => x"07070707",
-2693 => x"07070707",
-2694 => x"07070707",
-2695 => x"07070707",
-2696 => x"07070707",
-2697 => x"07070707",
-2698 => x"07070707",
-2699 => x"07070707",
-2700 => x"07070707",
-2701 => x"07070707",
-2702 => x"07070707",
-2703 => x"07070707",
-2704 => x"07070707",
-2705 => x"07070707",
-2706 => x"07070707",
-2707 => x"07070707",
-2708 => x"08080808",
-2709 => x"08080808",
-2710 => x"08080808",
-2711 => x"08080808",
-2712 => x"08080808",
-2713 => x"08080808",
-2714 => x"08080808",
-2715 => x"08080808",
-2716 => x"08080808",
-2717 => x"08080808",
-2718 => x"08080808",
-2719 => x"08080808",
-2720 => x"08080808",
-2721 => x"08080808",
-2722 => x"08080808",
-2723 => x"08080808",
-2724 => x"08080808",
-2725 => x"08080808",
-2726 => x"08080808",
-2727 => x"08080808",
-2728 => x"08080808",
-2729 => x"08080808",
-2730 => x"08080808",
-2731 => x"08080808",
-2732 => x"08080808",
-2733 => x"08080808",
-2734 => x"08080808",
-2735 => x"08080808",
-2736 => x"08080808",
-2737 => x"08080808",
-2738 => x"08080808",
-2739 => x"08080808",
-2740 => x"43000000",
-2741 => x"64756d6d",
-2742 => x"792e6578",
-2743 => x"65000000",
-2744 => x"00ffffff",
-2745 => x"ff00ffff",
-2746 => x"ffff00ff",
-2747 => x"ffffff00",
-2748 => x"00000000",
-2749 => x"00000000",
-2750 => x"00000000",
-2751 => x"000032dc",
-2752 => x"0000c350",
-2753 => x"00000000",
-2754 => x"00000000",
-2755 => x"00000000",
-2756 => x"00000000",
-2757 => x"00000000",
-2758 => x"00000000",
-2759 => x"00000000",
-2760 => x"00000000",
-2761 => x"00000000",
-2762 => x"00000000",
-2763 => x"00000000",
-2764 => x"00000000",
-2765 => x"00000000",
-2766 => x"ffffffff",
-2767 => x"00000000",
-2768 => x"00020000",
-2769 => x"00000000",
-2770 => x"00000000",
-2771 => x"00002b44",
-2772 => x"00002b44",
-2773 => x"00002b4c",
-2774 => x"00002b4c",
-2775 => x"00002b54",
-2776 => x"00002b54",
-2777 => x"00002b5c",
-2778 => x"00002b5c",
-2779 => x"00002b64",
-2780 => x"00002b64",
-2781 => x"00002b6c",
-2782 => x"00002b6c",
-2783 => x"00002b74",
-2784 => x"00002b74",
-2785 => x"00002b7c",
-2786 => x"00002b7c",
-2787 => x"00002b84",
-2788 => x"00002b84",
-2789 => x"00002b8c",
-2790 => x"00002b8c",
-2791 => x"00002b94",
-2792 => x"00002b94",
-2793 => x"00002b9c",
-2794 => x"00002b9c",
-2795 => x"00002ba4",
-2796 => x"00002ba4",
-2797 => x"00002bac",
-2798 => x"00002bac",
-2799 => x"00002bb4",
-2800 => x"00002bb4",
-2801 => x"00002bbc",
-2802 => x"00002bbc",
-2803 => x"00002bc4",
-2804 => x"00002bc4",
-2805 => x"00002bcc",
-2806 => x"00002bcc",
-2807 => x"00002bd4",
-2808 => x"00002bd4",
-2809 => x"00002bdc",
-2810 => x"00002bdc",
-2811 => x"00002be4",
-2812 => x"00002be4",
-2813 => x"00002bec",
-2814 => x"00002bec",
-2815 => x"00002bf4",
-2816 => x"00002bf4",
-2817 => x"00002bfc",
-2818 => x"00002bfc",
-2819 => x"00002c04",
-2820 => x"00002c04",
-2821 => x"00002c0c",
-2822 => x"00002c0c",
-2823 => x"00002c14",
-2824 => x"00002c14",
-2825 => x"00002c1c",
-2826 => x"00002c1c",
-2827 => x"00002c24",
-2828 => x"00002c24",
-2829 => x"00002c2c",
-2830 => x"00002c2c",
-2831 => x"00002c34",
-2832 => x"00002c34",
-2833 => x"00002c3c",
-2834 => x"00002c3c",
-2835 => x"00002c44",
-2836 => x"00002c44",
-2837 => x"00002c4c",
-2838 => x"00002c4c",
-2839 => x"00002c54",
-2840 => x"00002c54",
-2841 => x"00002c5c",
-2842 => x"00002c5c",
-2843 => x"00002c64",
-2844 => x"00002c64",
-2845 => x"00002c6c",
-2846 => x"00002c6c",
-2847 => x"00002c74",
-2848 => x"00002c74",
-2849 => x"00002c7c",
-2850 => x"00002c7c",
-2851 => x"00002c84",
-2852 => x"00002c84",
-2853 => x"00002c8c",
-2854 => x"00002c8c",
-2855 => x"00002c94",
-2856 => x"00002c94",
-2857 => x"00002c9c",
-2858 => x"00002c9c",
-2859 => x"00002ca4",
-2860 => x"00002ca4",
-2861 => x"00002cac",
-2862 => x"00002cac",
-2863 => x"00002cb4",
-2864 => x"00002cb4",
-2865 => x"00002cbc",
-2866 => x"00002cbc",
-2867 => x"00002cc4",
-2868 => x"00002cc4",
-2869 => x"00002ccc",
-2870 => x"00002ccc",
-2871 => x"00002cd4",
-2872 => x"00002cd4",
-2873 => x"00002cdc",
-2874 => x"00002cdc",
-2875 => x"00002ce4",
-2876 => x"00002ce4",
-2877 => x"00002cec",
-2878 => x"00002cec",
-2879 => x"00002cf4",
-2880 => x"00002cf4",
-2881 => x"00002cfc",
-2882 => x"00002cfc",
-2883 => x"00002d04",
-2884 => x"00002d04",
-2885 => x"00002d0c",
-2886 => x"00002d0c",
-2887 => x"00002d14",
-2888 => x"00002d14",
-2889 => x"00002d1c",
-2890 => x"00002d1c",
-2891 => x"00002d24",
-2892 => x"00002d24",
-2893 => x"00002d2c",
-2894 => x"00002d2c",
-2895 => x"00002d34",
-2896 => x"00002d34",
-2897 => x"00002d3c",
-2898 => x"00002d3c",
-2899 => x"00002d44",
-2900 => x"00002d44",
-2901 => x"00002d4c",
-2902 => x"00002d4c",
-2903 => x"00002d54",
-2904 => x"00002d54",
-2905 => x"00002d5c",
-2906 => x"00002d5c",
-2907 => x"00002d64",
-2908 => x"00002d64",
-2909 => x"00002d6c",
-2910 => x"00002d6c",
-2911 => x"00002d74",
-2912 => x"00002d74",
-2913 => x"00002d7c",
-2914 => x"00002d7c",
-2915 => x"00002d84",
-2916 => x"00002d84",
-2917 => x"00002d8c",
-2918 => x"00002d8c",
-2919 => x"00002d94",
-2920 => x"00002d94",
-2921 => x"00002d9c",
-2922 => x"00002d9c",
-2923 => x"00002da4",
-2924 => x"00002da4",
-2925 => x"00002dac",
-2926 => x"00002dac",
-2927 => x"00002db4",
-2928 => x"00002db4",
-2929 => x"00002dbc",
-2930 => x"00002dbc",
-2931 => x"00002dc4",
-2932 => x"00002dc4",
-2933 => x"00002dcc",
-2934 => x"00002dcc",
-2935 => x"00002dd4",
-2936 => x"00002dd4",
-2937 => x"00002ddc",
-2938 => x"00002ddc",
-2939 => x"00002de4",
-2940 => x"00002de4",
-2941 => x"00002dec",
-2942 => x"00002dec",
-2943 => x"00002df4",
-2944 => x"00002df4",
-2945 => x"00002dfc",
-2946 => x"00002dfc",
-2947 => x"00002e04",
-2948 => x"00002e04",
-2949 => x"00002e0c",
-2950 => x"00002e0c",
-2951 => x"00002e14",
-2952 => x"00002e14",
-2953 => x"00002e1c",
-2954 => x"00002e1c",
-2955 => x"00002e24",
-2956 => x"00002e24",
-2957 => x"00002e2c",
-2958 => x"00002e2c",
-2959 => x"00002e34",
-2960 => x"00002e34",
-2961 => x"00002e3c",
-2962 => x"00002e3c",
-2963 => x"00002e44",
-2964 => x"00002e44",
-2965 => x"00002e4c",
-2966 => x"00002e4c",
-2967 => x"00002e54",
-2968 => x"00002e54",
-2969 => x"00002e5c",
-2970 => x"00002e5c",
-2971 => x"00002e64",
-2972 => x"00002e64",
-2973 => x"00002e6c",
-2974 => x"00002e6c",
-2975 => x"00002e74",
-2976 => x"00002e74",
-2977 => x"00002e7c",
-2978 => x"00002e7c",
-2979 => x"00002e84",
-2980 => x"00002e84",
-2981 => x"00002e8c",
-2982 => x"00002e8c",
-2983 => x"00002e94",
-2984 => x"00002e94",
-2985 => x"00002e9c",
-2986 => x"00002e9c",
-2987 => x"00002ea4",
-2988 => x"00002ea4",
-2989 => x"00002eac",
-2990 => x"00002eac",
-2991 => x"00002eb4",
-2992 => x"00002eb4",
-2993 => x"00002ebc",
-2994 => x"00002ebc",
-2995 => x"00002ec4",
-2996 => x"00002ec4",
-2997 => x"00002ecc",
-2998 => x"00002ecc",
-2999 => x"00002ed4",
-3000 => x"00002ed4",
-3001 => x"00002edc",
-3002 => x"00002edc",
-3003 => x"00002ee4",
-3004 => x"00002ee4",
-3005 => x"00002eec",
-3006 => x"00002eec",
-3007 => x"00002ef4",
-3008 => x"00002ef4",
-3009 => x"00002efc",
-3010 => x"00002efc",
-3011 => x"00002f04",
-3012 => x"00002f04",
-3013 => x"00002f0c",
-3014 => x"00002f0c",
-3015 => x"00002f14",
-3016 => x"00002f14",
-3017 => x"00002f1c",
-3018 => x"00002f1c",
-3019 => x"00002f24",
-3020 => x"00002f24",
-3021 => x"00002f2c",
-3022 => x"00002f2c",
-3023 => x"00002f34",
-3024 => x"00002f34",
-3025 => x"00002f3c",
-3026 => x"00002f3c",
-3027 => x"00002f50",
-3028 => x"00000000",
-3029 => x"000031b8",
-3030 => x"00003214",
-3031 => x"00003270",
-3032 => x"00000000",
-3033 => x"00000000",
-3034 => x"00000000",
-3035 => x"00000000",
-3036 => x"00000000",
-3037 => x"00000000",
-3038 => x"00000000",
-3039 => x"00000000",
-3040 => x"00000000",
-3041 => x"00002ad0",
-3042 => x"00000000",
-3043 => x"00000000",
-3044 => x"00000000",
-3045 => x"00000000",
-3046 => x"00000000",
-3047 => x"00000000",
-3048 => x"00000000",
-3049 => x"00000000",
-3050 => x"00000000",
-3051 => x"00000000",
-3052 => x"00000000",
-3053 => x"00000000",
-3054 => x"00000000",
-3055 => x"00000000",
-3056 => x"00000000",
-3057 => x"00000000",
-3058 => x"00000000",
-3059 => x"00000000",
-3060 => x"00000000",
-3061 => x"00000000",
-3062 => x"00000000",
-3063 => x"00000000",
-3064 => x"00000000",
-3065 => x"00000000",
-3066 => x"00000000",
-3067 => x"00000000",
-3068 => x"00000000",
-3069 => x"00000000",
-3070 => x"00000001",
-3071 => x"330eabcd",
-3072 => x"1234e66d",
-3073 => x"deec0005",
-3074 => x"000b0000",
-3075 => x"00000000",
-3076 => x"00000000",
-3077 => x"00000000",
-3078 => x"00000000",
-3079 => x"00000000",
-3080 => x"00000000",
-3081 => x"00000000",
-3082 => x"00000000",
-3083 => x"00000000",
-3084 => x"00000000",
-3085 => x"00000000",
-3086 => x"00000000",
-3087 => x"00000000",
-3088 => x"00000000",
-3089 => x"00000000",
-3090 => x"00000000",
-3091 => x"00000000",
-3092 => x"00000000",
-3093 => x"00000000",
-3094 => x"00000000",
-3095 => x"00000000",
-3096 => x"00000000",
-3097 => x"00000000",
-3098 => x"00000000",
-3099 => x"00000000",
-3100 => x"00000000",
-3101 => x"00000000",
-3102 => x"00000000",
-3103 => x"00000000",
-3104 => x"00000000",
-3105 => x"00000000",
-3106 => x"00000000",
-3107 => x"00000000",
-3108 => x"00000000",
-3109 => x"00000000",
-3110 => x"00000000",
-3111 => x"00000000",
-3112 => x"00000000",
-3113 => x"00000000",
-3114 => x"00000000",
-3115 => x"00000000",
-3116 => x"00000000",
-3117 => x"00000000",
-3118 => x"00000000",
-3119 => x"00000000",
-3120 => x"00000000",
-3121 => x"00000000",
-3122 => x"00000000",
-3123 => x"00000000",
-3124 => x"00000000",
-3125 => x"00000000",
-3126 => x"00000000",
-3127 => x"00000000",
-3128 => x"00000000",
-3129 => x"00000000",
-3130 => x"00000000",
-3131 => x"00000000",
-3132 => x"00000000",
-3133 => x"00000000",
-3134 => x"00000000",
-3135 => x"00000000",
-3136 => x"00000000",
-3137 => x"00000000",
-3138 => x"00000000",
-3139 => x"00000000",
-3140 => x"00000000",
-3141 => x"00000000",
-3142 => x"00000000",
-3143 => x"00000000",
-3144 => x"00000000",
-3145 => x"00000000",
-3146 => x"00000000",
-3147 => x"00000000",
-3148 => x"00000000",
-3149 => x"00000000",
-3150 => x"00000000",
-3151 => x"00000000",
-3152 => x"00000000",
-3153 => x"00000000",
-3154 => x"00000000",
-3155 => x"00000000",
-3156 => x"00000000",
-3157 => x"00000000",
-3158 => x"00000000",
-3159 => x"00000000",
-3160 => x"00000000",
-3161 => x"00000000",
-3162 => x"00000000",
-3163 => x"00000000",
-3164 => x"00000000",
-3165 => x"00000000",
-3166 => x"00000000",
-3167 => x"00000000",
-3168 => x"00000000",
-3169 => x"00000000",
-3170 => x"00000000",
-3171 => x"00000000",
-3172 => x"00000000",
-3173 => x"00000000",
-3174 => x"00000000",
-3175 => x"00000000",
-3176 => x"00000000",
-3177 => x"00000000",
-3178 => x"00000000",
-3179 => x"00000000",
-3180 => x"00000000",
-3181 => x"00000000",
-3182 => x"00000000",
-3183 => x"00000000",
-3184 => x"00000000",
-3185 => x"00000000",
-3186 => x"00000000",
-3187 => x"00000000",
-3188 => x"00000000",
-3189 => x"00000000",
-3190 => x"00000000",
-3191 => x"00000000",
-3192 => x"00000000",
-3193 => x"00000000",
-3194 => x"00000000",
-3195 => x"00000000",
-3196 => x"00000000",
-3197 => x"00000000",
-3198 => x"00000000",
-3199 => x"00000000",
-3200 => x"00000000",
-3201 => x"00000000",
-3202 => x"00000000",
-3203 => x"00000000",
-3204 => x"00000000",
-3205 => x"00000000",
-3206 => x"00000000",
-3207 => x"00000000",
-3208 => x"00000000",
-3209 => x"00000000",
-3210 => x"00000000",
-3211 => x"00000000",
-3212 => x"00000000",
-3213 => x"00000000",
-3214 => x"00000000",
-3215 => x"00000000",
-3216 => x"00000000",
-3217 => x"00000000",
-3218 => x"00000000",
-3219 => x"00000000",
-3220 => x"00000000",
-3221 => x"00000000",
-3222 => x"00000000",
-3223 => x"00000000",
-3224 => x"00000000",
-3225 => x"00000000",
-3226 => x"00000000",
-3227 => x"00000000",
-3228 => x"00000000",
-3229 => x"00000000",
-3230 => x"00000000",
-3231 => x"00000000",
-3232 => x"00000000",
-3233 => x"00000000",
-3234 => x"00000000",
-3235 => x"00000000",
-3236 => x"00000000",
-3237 => x"00000000",
-3238 => x"00000000",
-3239 => x"00000000",
-3240 => x"00000000",
-3241 => x"00000000",
-3242 => x"00000000",
-3243 => x"00000000",
-3244 => x"00000000",
-3245 => x"00000000",
-3246 => x"00000000",
-3247 => x"00000000",
-3248 => x"00000000",
-3249 => x"00000000",
-3250 => x"00000000",
-3251 => x"00002ad4",
-3252 => x"ffffffff",
-3253 => x"00000000",
-3254 => x"ffffffff",
-3255 => x"00000000",
- others => x"00000000"
-);
-
-begin
-
-mem_busy<=mem_readEnable; -- we're done on the cycle after we serve the read request
-
-process (clk, areset)
-begin
- if areset = '1' then
- elsif (clk'event and clk = '1') then
- if (mem_writeEnable = '1') then
- ram(to_integer(unsigned(mem_addr(maxAddrBit downto minAddrBit)))) := mem_write;
- end if;
- if (mem_readEnable = '1') then
- mem_read <= ram(to_integer(unsigned(mem_addr(maxAddrBit downto minAddrBit))));
- end if;
- end if;
-end process;
-
-
-
-
-end dram_arch;
+library ieee;
+use ieee.std_logic_1164.all;
+use ieee.numeric_std.all;
+
+
+library work;
+use work.zpu_config.all;
+use work.zpupkg.all;
+
+entity dram is
+port (clk : in std_logic;
+areset : std_logic;
+ mem_writeEnable : in std_logic;
+ mem_readEnable : in std_logic;
+ mem_addr : in std_logic_vector(maxAddrBit downto 0);
+ mem_write : in std_logic_vector(wordSize-1 downto 0);
+ mem_read : out std_logic_vector(wordSize-1 downto 0);
+ mem_busy : out std_logic;
+ mem_writeMask : in std_logic_vector(wordBytes-1 downto 0));
+end dram;
+
+architecture dram_arch of dram is
+
+
+type ram_type is array(natural range 0 to ((2**(maxAddrBitDRAM+1))/4)-1) of std_logic_vector(wordSize-1 downto 0);
+
+shared variable ram : ram_type :=
+(
+0 => x"0b0b0b0b",
+1 => x"82700b0b",
+2 => x"80d5f40c",
+3 => x"3a0b0b80",
+4 => x"c4fb0400",
+5 => x"00000000",
+6 => x"00000000",
+7 => x"00000000",
+8 => x"80088408",
+9 => x"88080b0b",
+10 => x"80c5c22d",
+11 => x"880c840c",
+12 => x"800c0400",
+13 => x"00000000",
+14 => x"00000000",
+15 => x"00000000",
+16 => x"71fd0608",
+17 => x"72830609",
+18 => x"81058205",
+19 => x"832b2a83",
+20 => x"ffff0652",
+21 => x"04000000",
+22 => x"00000000",
+23 => x"00000000",
+24 => x"71fd0608",
+25 => x"83ffff73",
+26 => x"83060981",
+27 => x"05820583",
+28 => x"2b2b0906",
+29 => x"7383ffff",
+30 => x"0b0b0b0b",
+31 => x"83a70400",
+32 => x"72098105",
+33 => x"72057373",
+34 => x"09060906",
+35 => x"73097306",
+36 => x"070a8106",
+37 => x"53510400",
+38 => x"00000000",
+39 => x"00000000",
+40 => x"72722473",
+41 => x"732e0753",
+42 => x"51040000",
+43 => x"00000000",
+44 => x"00000000",
+45 => x"00000000",
+46 => x"00000000",
+47 => x"00000000",
+48 => x"71737109",
+49 => x"71068106",
+50 => x"30720a10",
+51 => x"0a720a10",
+52 => x"0a31050a",
+53 => x"81065151",
+54 => x"53510400",
+55 => x"00000000",
+56 => x"72722673",
+57 => x"732e0753",
+58 => x"51040000",
+59 => x"00000000",
+60 => x"00000000",
+61 => x"00000000",
+62 => x"00000000",
+63 => x"00000000",
+64 => x"00000000",
+65 => x"00000000",
+66 => x"00000000",
+67 => x"00000000",
+68 => x"00000000",
+69 => x"00000000",
+70 => x"00000000",
+71 => x"00000000",
+72 => x"0b0b0b88",
+73 => x"c3040000",
+74 => x"00000000",
+75 => x"00000000",
+76 => x"00000000",
+77 => x"00000000",
+78 => x"00000000",
+79 => x"00000000",
+80 => x"720a722b",
+81 => x"0a535104",
+82 => x"00000000",
+83 => x"00000000",
+84 => x"00000000",
+85 => x"00000000",
+86 => x"00000000",
+87 => x"00000000",
+88 => x"72729f06",
+89 => x"0981050b",
+90 => x"0b0b88a6",
+91 => x"05040000",
+92 => x"00000000",
+93 => x"00000000",
+94 => x"00000000",
+95 => x"00000000",
+96 => x"72722aff",
+97 => x"739f062a",
+98 => x"0974090a",
+99 => x"8106ff05",
+100 => x"06075351",
+101 => x"04000000",
+102 => x"00000000",
+103 => x"00000000",
+104 => x"71715351",
+105 => x"020d0406",
+106 => x"73830609",
+107 => x"81058205",
+108 => x"832b0b2b",
+109 => x"0772fc06",
+110 => x"0c515104",
+111 => x"00000000",
+112 => x"72098105",
+113 => x"72050970",
+114 => x"81050906",
+115 => x"0a810653",
+116 => x"51040000",
+117 => x"00000000",
+118 => x"00000000",
+119 => x"00000000",
+120 => x"72098105",
+121 => x"72050970",
+122 => x"81050906",
+123 => x"0a098106",
+124 => x"53510400",
+125 => x"00000000",
+126 => x"00000000",
+127 => x"00000000",
+128 => x"71098105",
+129 => x"52040000",
+130 => x"00000000",
+131 => x"00000000",
+132 => x"00000000",
+133 => x"00000000",
+134 => x"00000000",
+135 => x"00000000",
+136 => x"72720981",
+137 => x"05055351",
+138 => x"04000000",
+139 => x"00000000",
+140 => x"00000000",
+141 => x"00000000",
+142 => x"00000000",
+143 => x"00000000",
+144 => x"72097206",
+145 => x"73730906",
+146 => x"07535104",
+147 => x"00000000",
+148 => x"00000000",
+149 => x"00000000",
+150 => x"00000000",
+151 => x"00000000",
+152 => x"71fc0608",
+153 => x"72830609",
+154 => x"81058305",
+155 => x"1010102a",
+156 => x"81ff0652",
+157 => x"04000000",
+158 => x"00000000",
+159 => x"00000000",
+160 => x"71fc0608",
+161 => x"0b0b80d5",
+162 => x"e0738306",
+163 => x"10100508",
+164 => x"060b0b0b",
+165 => x"88a90400",
+166 => x"00000000",
+167 => x"00000000",
+168 => x"80088408",
+169 => x"88087575",
+170 => x"0b0b0bad",
+171 => x"aa2d5050",
+172 => x"80085688",
+173 => x"0c840c80",
+174 => x"0c510400",
+175 => x"00000000",
+176 => x"80088408",
+177 => x"88087575",
+178 => x"0b0b0bad",
+179 => x"ee2d5050",
+180 => x"80085688",
+181 => x"0c840c80",
+182 => x"0c510400",
+183 => x"00000000",
+184 => x"72097081",
+185 => x"0509060a",
+186 => x"8106ff05",
+187 => x"70547106",
+188 => x"73097274",
+189 => x"05ff0506",
+190 => x"07515151",
+191 => x"04000000",
+192 => x"72097081",
+193 => x"0509060a",
+194 => x"098106ff",
+195 => x"05705471",
+196 => x"06730972",
+197 => x"7405ff05",
+198 => x"06075151",
+199 => x"51040000",
+200 => x"05ff0504",
+201 => x"00000000",
+202 => x"00000000",
+203 => x"00000000",
+204 => x"00000000",
+205 => x"00000000",
+206 => x"00000000",
+207 => x"00000000",
+208 => x"810b0b0b",
+209 => x"80d5f00c",
+210 => x"51040000",
+211 => x"00000000",
+212 => x"00000000",
+213 => x"00000000",
+214 => x"00000000",
+215 => x"00000000",
+216 => x"71810552",
+217 => x"04000000",
+218 => x"00000000",
+219 => x"00000000",
+220 => x"00000000",
+221 => x"00000000",
+222 => x"00000000",
+223 => x"00000000",
+224 => x"00000000",
+225 => x"00000000",
+226 => x"00000000",
+227 => x"00000000",
+228 => x"00000000",
+229 => x"00000000",
+230 => x"00000000",
+231 => x"00000000",
+232 => x"02840572",
+233 => x"10100552",
+234 => x"04000000",
+235 => x"00000000",
+236 => x"00000000",
+237 => x"00000000",
+238 => x"00000000",
+239 => x"00000000",
+240 => x"00000000",
+241 => x"00000000",
+242 => x"00000000",
+243 => x"00000000",
+244 => x"00000000",
+245 => x"00000000",
+246 => x"00000000",
+247 => x"00000000",
+248 => x"717105ff",
+249 => x"05715351",
+250 => x"020d0400",
+251 => x"00000000",
+252 => x"00000000",
+253 => x"00000000",
+254 => x"00000000",
+255 => x"00000000",
+256 => x"82fd3fbf",
+257 => x"a03f0410",
+258 => x"10101010",
+259 => x"10101010",
+260 => x"10101010",
+261 => x"10101010",
+262 => x"10101010",
+263 => x"10101010",
+264 => x"10101010",
+265 => x"10105351",
+266 => x"047381ff",
+267 => x"06738306",
+268 => x"09810583",
+269 => x"05101010",
+270 => x"2b0772fc",
+271 => x"060c5151",
+272 => x"043c0472",
+273 => x"72807281",
+274 => x"06ff0509",
+275 => x"72060571",
+276 => x"1052720a",
+277 => x"100a5372",
+278 => x"ed385151",
+279 => x"535104ff",
+280 => x"3d0d0b0b",
+281 => x"80e5e408",
+282 => x"52710870",
+283 => x"882a8132",
+284 => x"70810651",
+285 => x"515170f1",
+286 => x"3873720c",
+287 => x"833d0d04",
+288 => x"80d5f008",
+289 => x"802ea438",
+290 => x"80d5f408",
+291 => x"822ebd38",
+292 => x"8380800b",
+293 => x"0b0b80e5",
+294 => x"e40c82a0",
+295 => x"800b80e5",
+296 => x"e80c8290",
+297 => x"800b80e5",
+298 => x"ec0c04f8",
+299 => x"808080a4",
+300 => x"0b0b0b80",
+301 => x"e5e40cf8",
+302 => x"80808280",
+303 => x"0b80e5e8",
+304 => x"0cf88080",
+305 => x"84800b80",
+306 => x"e5ec0c04",
+307 => x"80c0a880",
+308 => x"8c0b0b0b",
+309 => x"80e5e40c",
+310 => x"80c0a880",
+311 => x"940b80e5",
+312 => x"e80c0b0b",
+313 => x"80c7d00b",
+314 => x"80e5ec0c",
+315 => x"04f23d0d",
+316 => x"6080e5e8",
+317 => x"08565d82",
+318 => x"750c8059",
+319 => x"805a800b",
+320 => x"8f3d5d5b",
+321 => x"7a101015",
+322 => x"70087108",
+323 => x"719f2c7e",
+324 => x"852b5855",
+325 => x"557d5359",
+326 => x"5799993f",
+327 => x"7d7f7a72",
+328 => x"077c7207",
+329 => x"71716081",
+330 => x"05415f5d",
+331 => x"5b595755",
+332 => x"817b278f",
+333 => x"38767d0c",
+334 => x"77841e0c",
+335 => x"7c800c90",
+336 => x"3d0d0480",
+337 => x"e5e80855",
+338 => x"ffba3970",
+339 => x"7080e5f0",
+340 => x"335170a7",
+341 => x"3880d5fc",
+342 => x"08700852",
+343 => x"5270802e",
+344 => x"94388412",
+345 => x"80d5fc0c",
+346 => x"702d80d5",
+347 => x"fc087008",
+348 => x"525270ee",
+349 => x"38810b80",
+350 => x"e5f03450",
+351 => x"50040470",
+352 => x"0b0b80e5",
+353 => x"e008802e",
+354 => x"8e380b0b",
+355 => x"0b0b800b",
+356 => x"802e0981",
+357 => x"06833850",
+358 => x"040b0b80",
+359 => x"e5e0510b",
+360 => x"0b0bf4dc",
+361 => x"3f500404",
+362 => x"ff3d0d02",
+363 => x"8f053352",
+364 => x"718a2e8a",
+365 => x"387151fd",
+366 => x"a63f833d",
+367 => x"0d048d51",
+368 => x"fd9d3f71",
+369 => x"51fd983f",
+370 => x"833d0d04",
+371 => x"ce3d0db5",
+372 => x"3d707084",
+373 => x"0552088b",
+374 => x"a85c56a5",
+375 => x"3d5e5c80",
+376 => x"75708105",
+377 => x"5733765b",
+378 => x"55587378",
+379 => x"2e80c138",
+380 => x"8e3d5b73",
+381 => x"a52e0981",
+382 => x"0680c538",
+383 => x"78708105",
+384 => x"5a335473",
+385 => x"80e42e81",
+386 => x"b6387380",
+387 => x"e42480c6",
+388 => x"387380e3",
+389 => x"2ea13880",
+390 => x"52a55179",
+391 => x"2d805273",
+392 => x"51792d82",
+393 => x"18587870",
+394 => x"81055a33",
+395 => x"5473c438",
+396 => x"77800cb4",
+397 => x"3d0d047b",
+398 => x"841d8312",
+399 => x"33565d57",
+400 => x"80527351",
+401 => x"792d8118",
+402 => x"79708105",
+403 => x"5b335558",
+404 => x"73ffa038",
+405 => x"db397380",
+406 => x"f32e0981",
+407 => x"06ffb838",
+408 => x"7b841d71",
+409 => x"08595d56",
+410 => x"80773355",
+411 => x"5673762e",
+412 => x"8d388116",
+413 => x"70187033",
+414 => x"57555674",
+415 => x"f538ff16",
+416 => x"55807625",
+417 => x"ffa03876",
+418 => x"70810558",
+419 => x"33548052",
+420 => x"7351792d",
+421 => x"811875ff",
+422 => x"17575758",
+423 => x"807625ff",
+424 => x"85387670",
+425 => x"81055833",
+426 => x"54805273",
+427 => x"51792d81",
+428 => x"1875ff17",
+429 => x"57575875",
+430 => x"8024cc38",
+431 => x"fee8397b",
+432 => x"841d7108",
+433 => x"70719f2c",
+434 => x"5953595d",
+435 => x"56807524",
+436 => x"81913875",
+437 => x"7d7c5856",
+438 => x"54805773",
+439 => x"772e0981",
+440 => x"06b638b0",
+441 => x"7b3402b5",
+442 => x"05567a76",
+443 => x"2e9738ff",
+444 => x"16567533",
+445 => x"75708105",
+446 => x"57348117",
+447 => x"577a762e",
+448 => x"098106eb",
+449 => x"38807534",
+450 => x"767dff12",
+451 => x"57585675",
+452 => x"8024fef3",
+453 => x"38fe8f39",
+454 => x"8a527351",
+455 => x"9fd03f80",
+456 => x"0880c7d4",
+457 => x"05337670",
+458 => x"81055834",
+459 => x"8a527351",
+460 => x"9ef83f80",
+461 => x"08548008",
+462 => x"802effae",
+463 => x"388a5273",
+464 => x"519fab3f",
+465 => x"800880c7",
+466 => x"d4053376",
+467 => x"70810558",
+468 => x"348a5273",
+469 => x"519ed33f",
+470 => x"80085480",
+471 => x"08ffb938",
+472 => x"ff883974",
+473 => x"527653b4",
+474 => x"3dffb805",
+475 => x"51949a3f",
+476 => x"a33d0856",
+477 => x"fedd3980",
+478 => x"3d0d80c1",
+479 => x"0b81b4bc",
+480 => x"34800b81",
+481 => x"b6980c70",
+482 => x"800c823d",
+483 => x"0d04ff3d",
+484 => x"0d800b81",
+485 => x"b4bc3352",
+486 => x"527080c1",
+487 => x"2e993871",
+488 => x"81b69808",
+489 => x"0781b698",
+490 => x"0c80c20b",
+491 => x"81b4c034",
+492 => x"70800c83",
+493 => x"3d0d0481",
+494 => x"0b81b698",
+495 => x"080781b6",
+496 => x"980c80c2",
+497 => x"0b81b4c0",
+498 => x"3470800c",
+499 => x"833d0d04",
+500 => x"fd3d0d75",
+501 => x"70088a05",
+502 => x"535381b4",
+503 => x"bc335170",
+504 => x"80c12e8b",
+505 => x"3873f338",
+506 => x"70800c85",
+507 => x"3d0d04ff",
+508 => x"127081b4",
+509 => x"b8083174",
+510 => x"0c800c85",
+511 => x"3d0d04fc",
+512 => x"3d0d81b4",
+513 => x"c4085574",
+514 => x"802e8c38",
+515 => x"76750871",
+516 => x"0c81b4c4",
+517 => x"0856548c",
+518 => x"155381b4",
+519 => x"b808528a",
+520 => x"518fd43f",
+521 => x"73800c86",
+522 => x"3d0d04fb",
+523 => x"3d0d7770",
+524 => x"085656b0",
+525 => x"5381b4c4",
+526 => x"08527451",
+527 => x"ab943f85",
+528 => x"0b8c170c",
+529 => x"850b8c16",
+530 => x"0c750875",
+531 => x"0c81b4c4",
+532 => x"08547380",
+533 => x"2e8a3873",
+534 => x"08750c81",
+535 => x"b4c40854",
+536 => x"8c145381",
+537 => x"b4b80852",
+538 => x"8a518f8b",
+539 => x"3f841508",
+540 => x"ad38860b",
+541 => x"8c160c88",
+542 => x"15528816",
+543 => x"08518e97",
+544 => x"3f81b4c4",
+545 => x"08700876",
+546 => x"0c548c15",
+547 => x"7054548a",
+548 => x"52730851",
+549 => x"8ee13f73",
+550 => x"800c873d",
+551 => x"0d047508",
+552 => x"54b05373",
+553 => x"527551aa",
+554 => x"a93f7380",
+555 => x"0c873d0d",
+556 => x"04d93d0d",
+557 => x"b0519dcf",
+558 => x"3f800881",
+559 => x"b4b40cb0",
+560 => x"519dc43f",
+561 => x"800881b4",
+562 => x"c40c81b4",
+563 => x"b4088008",
+564 => x"0c800b80",
+565 => x"0884050c",
+566 => x"820b8008",
+567 => x"88050ca8",
+568 => x"0b80088c",
+569 => x"050c9f53",
+570 => x"80c7e052",
+571 => x"80089005",
+572 => x"51a9df3f",
+573 => x"a13d5e9f",
+574 => x"5380c880",
+575 => x"527d51a9",
+576 => x"d13f8a0b",
+577 => x"80f2f80c",
+578 => x"80d2a451",
+579 => x"f9be3f80",
+580 => x"c8a051f9",
+581 => x"b73f80d2",
+582 => x"a451f9b0",
+583 => x"3f80d684",
+584 => x"08802e89",
+585 => x"d33880c8",
+586 => x"d051f9a0",
+587 => x"3f80d2a4",
+588 => x"51f9993f",
+589 => x"80d68008",
+590 => x"5280c8fc",
+591 => x"51f98d3f",
+592 => x"80e69451",
+593 => x"b2ff3f81",
+594 => x"0b9a3d5e",
+595 => x"5b800b80",
+596 => x"d6800825",
+597 => x"82d43890",
+598 => x"3d5f80c1",
+599 => x"0b81b4bc",
+600 => x"34810b81",
+601 => x"b6980c80",
+602 => x"c20b81b4",
+603 => x"c0348240",
+604 => x"835a9f53",
+605 => x"80c9ac52",
+606 => x"7c51a8d6",
+607 => x"3f814180",
+608 => x"7d537e52",
+609 => x"568e943f",
+610 => x"8008762e",
+611 => x"09810683",
+612 => x"38815675",
+613 => x"81b6980c",
+614 => x"7f705856",
+615 => x"758325a2",
+616 => x"38751010",
+617 => x"16fd0542",
+618 => x"a93dffa4",
+619 => x"05538352",
+620 => x"76518cc3",
+621 => x"3f7f8105",
+622 => x"70417058",
+623 => x"56837624",
+624 => x"e0386154",
+625 => x"755380e6",
+626 => x"9c5281b4",
+627 => x"d0518cb7",
+628 => x"3f81b4c4",
+629 => x"08700858",
+630 => x"58b05377",
+631 => x"527651a7",
+632 => x"f13f850b",
+633 => x"8c190c85",
+634 => x"0b8c180c",
+635 => x"7708770c",
+636 => x"81b4c408",
+637 => x"5675802e",
+638 => x"8a387508",
+639 => x"770c81b4",
+640 => x"c408568c",
+641 => x"165381b4",
+642 => x"b808528a",
+643 => x"518be83f",
+644 => x"84170887",
+645 => x"ea38860b",
+646 => x"8c180c88",
+647 => x"17528818",
+648 => x"08518af3",
+649 => x"3f81b4c4",
+650 => x"08700878",
+651 => x"0c568c17",
+652 => x"7054598a",
+653 => x"52780851",
+654 => x"8bbd3f80",
+655 => x"c10b81b4",
+656 => x"c0335757",
+657 => x"767626a2",
+658 => x"3880c352",
+659 => x"76518ca1",
+660 => x"3f800861",
+661 => x"2e89e438",
+662 => x"81177081",
+663 => x"ff0681b4",
+664 => x"c0335858",
+665 => x"58757727",
+666 => x"e0387960",
+667 => x"29627054",
+668 => x"71535b59",
+669 => x"98b43f80",
+670 => x"0840787a",
+671 => x"31708729",
+672 => x"80083180",
+673 => x"088a0581",
+674 => x"b4bc3381",
+675 => x"b4b8085e",
+676 => x"5b525a56",
+677 => x"7780c12e",
+678 => x"89ce387b",
+679 => x"f738811b",
+680 => x"5b80d680",
+681 => x"087b25fd",
+682 => x"b13881b4",
+683 => x"ac51b095",
+684 => x"3f80c9cc",
+685 => x"51f6953f",
+686 => x"80d2a451",
+687 => x"f68e3f80",
+688 => x"c9dc51f6",
+689 => x"873f80d2",
+690 => x"a451f680",
+691 => x"3f81b4b8",
+692 => x"085280ca",
+693 => x"9451f5f4",
+694 => x"3f855280",
+695 => x"cab051f5",
+696 => x"eb3f81b6",
+697 => x"98085280",
+698 => x"cacc51f5",
+699 => x"df3f8152",
+700 => x"80cab051",
+701 => x"f5d63f81",
+702 => x"b4bc3352",
+703 => x"80cae851",
+704 => x"f5ca3f80",
+705 => x"c15280cb",
+706 => x"8451f5c0",
+707 => x"3f81b4c0",
+708 => x"335280cb",
+709 => x"a051f5b4",
+710 => x"3f80c252",
+711 => x"80cb8451",
+712 => x"f5aa3f81",
+713 => x"b4f00852",
+714 => x"80cbbc51",
+715 => x"f59e3f87",
+716 => x"5280cab0",
+717 => x"51f5953f",
+718 => x"80f2f808",
+719 => x"5280cbd8",
+720 => x"51f5893f",
+721 => x"80cbf451",
+722 => x"f5823f80",
+723 => x"cca051f4",
+724 => x"fb3f81b4",
+725 => x"c4087008",
+726 => x"535a80cc",
+727 => x"ac51f4ec",
+728 => x"3f80ccc8",
+729 => x"51f4e53f",
+730 => x"81b4c408",
+731 => x"84110853",
+732 => x"5680ccfc",
+733 => x"51f4d53f",
+734 => x"805280ca",
+735 => x"b051f4cc",
+736 => x"3f81b4c4",
+737 => x"08881108",
+738 => x"535880cd",
+739 => x"9851f4bc",
+740 => x"3f825280",
+741 => x"cab051f4",
+742 => x"b33f81b4",
+743 => x"c4088c11",
+744 => x"08535780",
+745 => x"cdb451f4",
+746 => x"a33f9152",
+747 => x"80cab051",
+748 => x"f49a3f81",
+749 => x"b4c40890",
+750 => x"055280cd",
+751 => x"d051f48c",
+752 => x"3f80cdec",
+753 => x"51f4853f",
+754 => x"80cea451",
+755 => x"f3fe3f81",
+756 => x"b4b40870",
+757 => x"08535f80",
+758 => x"ccac51f3",
+759 => x"ef3f80ce",
+760 => x"b851f3e8",
+761 => x"3f81b4b4",
+762 => x"08841108",
+763 => x"535b80cc",
+764 => x"fc51f3d8",
+765 => x"3f805280",
+766 => x"cab051f3",
+767 => x"cf3f81b4",
+768 => x"b4088811",
+769 => x"08535c80",
+770 => x"cd9851f3",
+771 => x"bf3f8152",
+772 => x"80cab051",
+773 => x"f3b63f81",
+774 => x"b4b4088c",
+775 => x"1108535a",
+776 => x"80cdb451",
+777 => x"f3a63f92",
+778 => x"5280cab0",
+779 => x"51f39d3f",
+780 => x"81b4b408",
+781 => x"90055280",
+782 => x"cdd051f3",
+783 => x"8f3f80cd",
+784 => x"ec51f388",
+785 => x"3f7f5280",
+786 => x"cef851f2",
+787 => x"ff3f8552",
+788 => x"80cab051",
+789 => x"f2f63f78",
+790 => x"5280cf94",
+791 => x"51f2ed3f",
+792 => x"8d5280ca",
+793 => x"b051f2e4",
+794 => x"3f615280",
+795 => x"cfb051f2",
+796 => x"db3f8752",
+797 => x"80cab051",
+798 => x"f2d23f60",
+799 => x"5280cfcc",
+800 => x"51f2c93f",
+801 => x"815280ca",
+802 => x"b051f2c0",
+803 => x"3f7d5280",
+804 => x"cfe851f2",
+805 => x"b73f80d0",
+806 => x"8451f2b0",
+807 => x"3f7c5280",
+808 => x"d0bc51f2",
+809 => x"a73f80d0",
+810 => x"d851f2a0",
+811 => x"3f80d2a4",
+812 => x"51f2993f",
+813 => x"81b4ac08",
+814 => x"81b4b008",
+815 => x"80e69408",
+816 => x"80e69808",
+817 => x"72713170",
+818 => x"74267574",
+819 => x"31707231",
+820 => x"80e68c0c",
+821 => x"444480e6",
+822 => x"900c80e6",
+823 => x"90085680",
+824 => x"d190555c",
+825 => x"595758f1",
+826 => x"e33f80e6",
+827 => x"8c085680",
+828 => x"762582a3",
+829 => x"3880d680",
+830 => x"0870719f",
+831 => x"2c9a3d53",
+832 => x"565680e6",
+833 => x"8c0880e6",
+834 => x"90084153",
+835 => x"7f547052",
+836 => x"5a89eb3f",
+837 => x"66685f80",
+838 => x"e5fc0c7d",
+839 => x"80e6800c",
+840 => x"80d68008",
+841 => x"709f2c58",
+842 => x"568058bd",
+843 => x"84c07855",
+844 => x"55765275",
+845 => x"53795187",
+846 => x"d13f953d",
+847 => x"80e68c08",
+848 => x"80e69008",
+849 => x"41557f56",
+850 => x"67694053",
+851 => x"7e547052",
+852 => x"5c89ab3f",
+853 => x"64665e80",
+854 => x"e6840c7c",
+855 => x"80e6880c",
+856 => x"80d68008",
+857 => x"709f2c40",
+858 => x"58805783",
+859 => x"dceb9480",
+860 => x"7755557e",
+861 => x"5277537b",
+862 => x"51878f3f",
+863 => x"64665d5b",
+864 => x"805e8ddd",
+865 => x"7e555580",
+866 => x"e68c0880",
+867 => x"e6900859",
+868 => x"52775379",
+869 => x"5186f33f",
+870 => x"66684054",
+871 => x"7e557a52",
+872 => x"7b53a93d",
+873 => x"ffa80551",
+874 => x"88d43f62",
+875 => x"645e81b4",
+876 => x"c80c7c81",
+877 => x"b4cc0c80",
+878 => x"d1a051f0",
+879 => x"8f3f80e6",
+880 => x"80085280",
+881 => x"d1d051f0",
+882 => x"833f80d1",
+883 => x"d851effc",
+884 => x"3f80e688",
+885 => x"085280d1",
+886 => x"d051eff0",
+887 => x"3f81b4cc",
+888 => x"085280d2",
+889 => x"8851efe4",
+890 => x"3f80d2a4",
+891 => x"51efdd3f",
+892 => x"800b800c",
+893 => x"a93d0d04",
+894 => x"80d2a851",
+895 => x"f6ac3977",
+896 => x"0857b053",
+897 => x"76527751",
+898 => x"9fc83f80",
+899 => x"c10b81b4",
+900 => x"c0335757",
+901 => x"f8ae3975",
+902 => x"8a3880e6",
+903 => x"90088126",
+904 => x"fdd33880",
+905 => x"d2d851ef",
+906 => x"a33f80d3",
+907 => x"9051ef9c",
+908 => x"3f80d2a4",
+909 => x"51ef953f",
+910 => x"80d68008",
+911 => x"70719f2c",
+912 => x"9a3d5356",
+913 => x"5680e68c",
+914 => x"0880e690",
+915 => x"0841537f",
+916 => x"5470525a",
+917 => x"87a83f66",
+918 => x"685f80e5",
+919 => x"fc0c7d80",
+920 => x"e6800c80",
+921 => x"d6800870",
+922 => x"9f2c5856",
+923 => x"8058bd84",
+924 => x"c0785555",
+925 => x"76527553",
+926 => x"7951858e",
+927 => x"3f953d80",
+928 => x"e68c0880",
+929 => x"e6900841",
+930 => x"557f5667",
+931 => x"6940537e",
+932 => x"5470525c",
+933 => x"86e83f64",
+934 => x"665e80e6",
+935 => x"840c7c80",
+936 => x"e6880c80",
+937 => x"d6800870",
+938 => x"9f2c4058",
+939 => x"805783dc",
+940 => x"eb948077",
+941 => x"55557e52",
+942 => x"77537b51",
+943 => x"84cc3f64",
+944 => x"665d5b80",
+945 => x"5e8ddd7e",
+946 => x"555580e6",
+947 => x"8c0880e6",
+948 => x"90085952",
+949 => x"77537951",
+950 => x"84b03f66",
+951 => x"6840547e",
+952 => x"557a527b",
+953 => x"53a93dff",
+954 => x"a8055186",
+955 => x"913f6264",
+956 => x"5e81b4c8",
+957 => x"0c7c81b4",
+958 => x"cc0c80d1",
+959 => x"a051edcc",
+960 => x"3f80e680",
+961 => x"085280d1",
+962 => x"d051edc0",
+963 => x"3f80d1d8",
+964 => x"51edb93f",
+965 => x"80e68808",
+966 => x"5280d1d0",
+967 => x"51edad3f",
+968 => x"81b4cc08",
+969 => x"5280d288",
+970 => x"51eda13f",
+971 => x"80d2a451",
+972 => x"ed9a3f80",
+973 => x"0b800ca9",
+974 => x"3d0d04a9",
+975 => x"3dffa005",
+976 => x"52805180",
+977 => x"d23f9f53",
+978 => x"80d3b052",
+979 => x"7c519d82",
+980 => x"3f7a7b81",
+981 => x"b4b80c81",
+982 => x"187081ff",
+983 => x"0681b4c0",
+984 => x"33595959",
+985 => x"5af5fe39",
+986 => x"ff16707b",
+987 => x"31600c5c",
+988 => x"800b811c",
+989 => x"5c5c80d6",
+990 => x"80087b25",
+991 => x"f3dc38f6",
+992 => x"a939ff3d",
+993 => x"0d738232",
+994 => x"70307072",
+995 => x"07802580",
+996 => x"0c525283",
+997 => x"3d0d04fe",
+998 => x"3d0d7476",
+999 => x"71535452",
+1000 => x"71822e83",
+1001 => x"38835171",
+1002 => x"812e9a38",
+1003 => x"8172269f",
+1004 => x"3871822e",
+1005 => x"b8387184",
+1006 => x"2ea93870",
+1007 => x"730c7080",
+1008 => x"0c843d0d",
+1009 => x"0480e40b",
+1010 => x"81b4b808",
+1011 => x"258b3880",
+1012 => x"730c7080",
+1013 => x"0c843d0d",
+1014 => x"0483730c",
+1015 => x"70800c84",
+1016 => x"3d0d0482",
+1017 => x"730c7080",
+1018 => x"0c843d0d",
+1019 => x"0481730c",
+1020 => x"70800c84",
+1021 => x"3d0d0480",
+1022 => x"3d0d7474",
+1023 => x"14820571",
+1024 => x"0c800c82",
+1025 => x"3d0d04f7",
+1026 => x"3d0d7b7d",
+1027 => x"7f618512",
+1028 => x"70822b75",
+1029 => x"11707471",
+1030 => x"70840553",
+1031 => x"0c5a5a5d",
+1032 => x"5b760c79",
+1033 => x"80f8180c",
+1034 => x"79861252",
+1035 => x"57585a5a",
+1036 => x"76762499",
+1037 => x"3876b329",
+1038 => x"822b7911",
+1039 => x"51537673",
+1040 => x"70840555",
+1041 => x"0c811454",
+1042 => x"757425f2",
+1043 => x"387681cc",
+1044 => x"2919fc11",
+1045 => x"088105fc",
+1046 => x"120c7a19",
+1047 => x"70089fa0",
+1048 => x"130c5856",
+1049 => x"850b81b4",
+1050 => x"b80c7580",
+1051 => x"0c8b3d0d",
+1052 => x"04fe3d0d",
+1053 => x"02930533",
+1054 => x"51800284",
+1055 => x"05970533",
+1056 => x"54527073",
+1057 => x"2e883871",
+1058 => x"800c843d",
+1059 => x"0d047081",
+1060 => x"b4bc3481",
+1061 => x"0b800c84",
+1062 => x"3d0d04f8",
+1063 => x"3d0d7a7c",
+1064 => x"5956820b",
+1065 => x"83195555",
+1066 => x"74167033",
+1067 => x"75335b51",
+1068 => x"5372792e",
+1069 => x"80c63880",
+1070 => x"c10b8116",
+1071 => x"81165656",
+1072 => x"57827525",
+1073 => x"e338ffa9",
+1074 => x"177081ff",
+1075 => x"06555973",
+1076 => x"82268338",
+1077 => x"87558153",
+1078 => x"7680d22e",
+1079 => x"98387752",
+1080 => x"75519bc3",
+1081 => x"3f805372",
+1082 => x"80082589",
+1083 => x"38871581",
+1084 => x"b4b80c81",
+1085 => x"5372800c",
+1086 => x"8a3d0d04",
+1087 => x"7281b4bc",
+1088 => x"34827525",
+1089 => x"ffa238ff",
+1090 => x"bd39ef3d",
+1091 => x"0d636567",
+1092 => x"5b427943",
+1093 => x"67695940",
+1094 => x"77415a80",
+1095 => x"5d805e61",
+1096 => x"7083ffff",
+1097 => x"0671902a",
+1098 => x"627083ff",
+1099 => x"ff067190",
+1100 => x"2a747229",
+1101 => x"74732975",
+1102 => x"73297774",
+1103 => x"2973902a",
+1104 => x"05721151",
+1105 => x"5856535f",
+1106 => x"5a575a58",
+1107 => x"55587373",
+1108 => x"27863884",
+1109 => x"80801656",
+1110 => x"73902a16",
+1111 => x"5b7883ff",
+1112 => x"ff067484",
+1113 => x"80802905",
+1114 => x"5c7a7c5a",
+1115 => x"5d785e77",
+1116 => x"7f296178",
+1117 => x"29057d05",
+1118 => x"5d7c7e56",
+1119 => x"7a0c7484",
+1120 => x"1b0c7980",
+1121 => x"0c933d0d",
+1122 => x"04f93d0d",
+1123 => x"797b7d54",
+1124 => x"58725977",
+1125 => x"30797030",
+1126 => x"7072079f",
+1127 => x"2a737131",
+1128 => x"5a525977",
+1129 => x"7956730c",
+1130 => x"53738413",
+1131 => x"0c54800c",
+1132 => x"893d0d04",
+1133 => x"f93d0d79",
+1134 => x"7b7d7f56",
+1135 => x"54525472",
+1136 => x"802ea038",
+1137 => x"70577158",
+1138 => x"a0733152",
+1139 => x"807225a1",
+1140 => x"38777074",
+1141 => x"2b577073",
+1142 => x"2a78752b",
+1143 => x"07565174",
+1144 => x"76535170",
+1145 => x"740c7184",
+1146 => x"150c7380",
+1147 => x"0c893d0d",
+1148 => x"04805677",
+1149 => x"72302b55",
+1150 => x"74765351",
+1151 => x"e639e43d",
+1152 => x"0d6ea13d",
+1153 => x"08a33d08",
+1154 => x"59575f80",
+1155 => x"764d774e",
+1156 => x"a33d08a5",
+1157 => x"3d08574b",
+1158 => x"754c5e7d",
+1159 => x"6c2486fb",
+1160 => x"38806a24",
+1161 => x"878f3869",
+1162 => x"6b58566b",
+1163 => x"6d5d467b",
+1164 => x"47754476",
+1165 => x"45646468",
+1166 => x"685c5c56",
+1167 => x"567481e7",
+1168 => x"38787627",
+1169 => x"82c73875",
+1170 => x"81ff2683",
+1171 => x"2b5583ff",
+1172 => x"ff76278c",
+1173 => x"389055fe",
+1174 => x"800a7627",
+1175 => x"83389855",
+1176 => x"75752a80",
+1177 => x"d3d00570",
+1178 => x"33a07731",
+1179 => x"71315755",
+1180 => x"5774802e",
+1181 => x"95387575",
+1182 => x"2ba07631",
+1183 => x"7a772b7c",
+1184 => x"722a077c",
+1185 => x"782b5d5b",
+1186 => x"59567590",
+1187 => x"2a7683ff",
+1188 => x"ff067154",
+1189 => x"7a535957",
+1190 => x"88803f80",
+1191 => x"085b87ea",
+1192 => x"3f800880",
+1193 => x"0879297c",
+1194 => x"902b7c90",
+1195 => x"2a075656",
+1196 => x"59737527",
+1197 => x"94388008",
+1198 => x"ff057615",
+1199 => x"55597574",
+1200 => x"26873874",
+1201 => x"742687b9",
+1202 => x"38765273",
+1203 => x"75315187",
+1204 => x"c93f8008",
+1205 => x"5587b33f",
+1206 => x"80088008",
+1207 => x"79297b83",
+1208 => x"ffff0677",
+1209 => x"902b0756",
+1210 => x"59577378",
+1211 => x"27963880",
+1212 => x"08ff0576",
+1213 => x"15555775",
+1214 => x"74268938",
+1215 => x"77742677",
+1216 => x"71315856",
+1217 => x"78902b77",
+1218 => x"0758805b",
+1219 => x"7a407741",
+1220 => x"7f615654",
+1221 => x"7d80d938",
+1222 => x"737f0c74",
+1223 => x"7f84050c",
+1224 => x"7e800c9e",
+1225 => x"3d0d0480",
+1226 => x"705c5874",
+1227 => x"7926dd38",
+1228 => x"7481ff26",
+1229 => x"832b5774",
+1230 => x"83ffff26",
+1231 => x"82a53874",
+1232 => x"772a80d3",
+1233 => x"d0057033",
+1234 => x"a0793171",
+1235 => x"31595c5d",
+1236 => x"7682b338",
+1237 => x"76547479",
+1238 => x"27833881",
+1239 => x"54797627",
+1240 => x"74075981",
+1241 => x"5878ffa2",
+1242 => x"38765880",
+1243 => x"5bff9d39",
+1244 => x"73527453",
+1245 => x"9e3de805",
+1246 => x"51fc8e3f",
+1247 => x"6769567f",
+1248 => x"0c747f84",
+1249 => x"050c7e80",
+1250 => x"0c9e3d0d",
+1251 => x"0475802e",
+1252 => x"81c43875",
+1253 => x"81ff2683",
+1254 => x"2b5583ff",
+1255 => x"ff76278c",
+1256 => x"389055fe",
+1257 => x"800a7627",
+1258 => x"83389855",
+1259 => x"75752a80",
+1260 => x"d3d00570",
+1261 => x"33a07731",
+1262 => x"7131575e",
+1263 => x"54748491",
+1264 => x"38787631",
+1265 => x"54817690",
+1266 => x"2a7783ff",
+1267 => x"ff065f5d",
+1268 => x"5b7b5273",
+1269 => x"5185c33f",
+1270 => x"80085785",
+1271 => x"ad3f8008",
+1272 => x"80087e29",
+1273 => x"78902b7c",
+1274 => x"902a0756",
+1275 => x"56597375",
+1276 => x"27943880",
+1277 => x"08ff0576",
+1278 => x"15555975",
+1279 => x"74268738",
+1280 => x"74742684",
+1281 => x"f3387b52",
+1282 => x"73753151",
+1283 => x"858c3f80",
+1284 => x"085584f6",
+1285 => x"3f800880",
+1286 => x"087e297b",
+1287 => x"83ffff06",
+1288 => x"77902b07",
+1289 => x"56595773",
+1290 => x"78279638",
+1291 => x"8008ff05",
+1292 => x"76155557",
+1293 => x"75742689",
+1294 => x"38777426",
+1295 => x"77713158",
+1296 => x"5a78902b",
+1297 => x"77077b41",
+1298 => x"417f6156",
+1299 => x"547d802e",
+1300 => x"fdc638fe",
+1301 => x"9b397552",
+1302 => x"815184ae",
+1303 => x"3f800856",
+1304 => x"feb13990",
+1305 => x"57fe800a",
+1306 => x"7527fdd3",
+1307 => x"38987571",
+1308 => x"2a80d3d0",
+1309 => x"057033a0",
+1310 => x"73317131",
+1311 => x"535d5e57",
+1312 => x"76802efd",
+1313 => x"cf38a077",
+1314 => x"3175782b",
+1315 => x"77722a07",
+1316 => x"77792b7b",
+1317 => x"7a2b7d74",
+1318 => x"2a077d7b",
+1319 => x"2b73902a",
+1320 => x"7483ffff",
+1321 => x"0671597f",
+1322 => x"772a585e",
+1323 => x"5c415f58",
+1324 => x"5c5483e6",
+1325 => x"3f800854",
+1326 => x"83d03f80",
+1327 => x"08800879",
+1328 => x"2975902b",
+1329 => x"7e902a07",
+1330 => x"56565973",
+1331 => x"75279938",
+1332 => x"8008ff05",
+1333 => x"7b155559",
+1334 => x"7a74268c",
+1335 => x"38737527",
+1336 => x"8738ff19",
+1337 => x"7b155559",
+1338 => x"76527375",
+1339 => x"315183aa",
+1340 => x"3f800855",
+1341 => x"83943f80",
+1342 => x"08800879",
+1343 => x"297d83ff",
+1344 => x"ff067790",
+1345 => x"2b075659",
+1346 => x"57737827",
+1347 => x"99388008",
+1348 => x"ff057b15",
+1349 => x"55577a74",
+1350 => x"268c3873",
+1351 => x"78278738",
+1352 => x"ff177b15",
+1353 => x"55577378",
+1354 => x"3179902b",
+1355 => x"78077083",
+1356 => x"ffff0671",
+1357 => x"902a7983",
+1358 => x"ffff067a",
+1359 => x"902a7372",
+1360 => x"29737329",
+1361 => x"74732976",
+1362 => x"74297390",
+1363 => x"2a057205",
+1364 => x"5755435f",
+1365 => x"5b585a57",
+1366 => x"595a747c",
+1367 => x"27863884",
+1368 => x"80801757",
+1369 => x"74902a17",
+1370 => x"7983ffff",
+1371 => x"06768480",
+1372 => x"80290557",
+1373 => x"57767a26",
+1374 => x"9a38767a",
+1375 => x"32703070",
+1376 => x"72078025",
+1377 => x"565a5b7c",
+1378 => x"7627fafe",
+1379 => x"3873802e",
+1380 => x"faf838ff",
+1381 => x"1858805b",
+1382 => x"faf239ff",
+1383 => x"76537754",
+1384 => x"9f3de805",
+1385 => x"525ef7e1",
+1386 => x"3f676957",
+1387 => x"4c754d69",
+1388 => x"8025f8f3",
+1389 => x"387d096a",
+1390 => x"6c5c537a",
+1391 => x"549f3de8",
+1392 => x"05525ef7",
+1393 => x"c43f6769",
+1394 => x"714c704d",
+1395 => x"5856f8db",
+1396 => x"39a07531",
+1397 => x"76762b7a",
+1398 => x"772b7c73",
+1399 => x"2a077c78",
+1400 => x"2b72902a",
+1401 => x"7383ffff",
+1402 => x"0671587e",
+1403 => x"762a5742",
+1404 => x"405d5d57",
+1405 => x"5881a33f",
+1406 => x"80085781",
+1407 => x"8d3f8008",
+1408 => x"80087e29",
+1409 => x"78902b7d",
+1410 => x"902a0756",
+1411 => x"56597375",
+1412 => x"27993880",
+1413 => x"08ff0576",
+1414 => x"15555975",
+1415 => x"74268c38",
+1416 => x"73752787",
+1417 => x"38ff1976",
+1418 => x"1555597b",
+1419 => x"52737531",
+1420 => x"5180e73f",
+1421 => x"80085580",
+1422 => x"d13f8008",
+1423 => x"80087e29",
+1424 => x"7c83ffff",
+1425 => x"06707890",
+1426 => x"2b075156",
+1427 => x"58587377",
+1428 => x"27993880",
+1429 => x"08ff0576",
+1430 => x"15555875",
+1431 => x"74268c38",
+1432 => x"73772787",
+1433 => x"38ff1876",
+1434 => x"15555878",
+1435 => x"902b7807",
+1436 => x"74783155",
+1437 => x"5bfada39",
+1438 => x"ff197615",
+1439 => x"5559fb86",
+1440 => x"39ff1976",
+1441 => x"155559f8",
+1442 => x"c0397070",
+1443 => x"70805375",
+1444 => x"52745181",
+1445 => x"913f5050",
+1446 => x"50047070",
+1447 => x"70815375",
+1448 => x"52745181",
+1449 => x"813f5050",
+1450 => x"5004fb3d",
+1451 => x"0d777955",
+1452 => x"55805675",
+1453 => x"7524ab38",
+1454 => x"8074249d",
+1455 => x"38805373",
+1456 => x"52745180",
+1457 => x"e13f8008",
+1458 => x"5475802e",
+1459 => x"85388008",
+1460 => x"30547380",
+1461 => x"0c873d0d",
+1462 => x"04733076",
+1463 => x"81325754",
+1464 => x"dc397430",
+1465 => x"55815673",
+1466 => x"8025d238",
+1467 => x"ec39fa3d",
+1468 => x"0d787a57",
+1469 => x"55805776",
+1470 => x"7524a438",
+1471 => x"759f2c54",
+1472 => x"81537574",
+1473 => x"32743152",
+1474 => x"74519b3f",
+1475 => x"80085476",
+1476 => x"802e8538",
+1477 => x"80083054",
+1478 => x"73800c88",
+1479 => x"3d0d0474",
+1480 => x"30558157",
+1481 => x"d739fc3d",
+1482 => x"0d767853",
+1483 => x"54815380",
+1484 => x"74732652",
+1485 => x"5572802e",
+1486 => x"98387080",
+1487 => x"2eab3880",
+1488 => x"7224a638",
+1489 => x"71107310",
+1490 => x"75722653",
+1491 => x"545272ea",
+1492 => x"38735178",
+1493 => x"83387451",
+1494 => x"70800c86",
+1495 => x"3d0d0472",
+1496 => x"0a100a72",
+1497 => x"0a100a53",
+1498 => x"5372802e",
+1499 => x"e4387174",
+1500 => x"26ed3873",
+1501 => x"72317574",
+1502 => x"07740a10",
+1503 => x"0a740a10",
+1504 => x"0a555556",
+1505 => x"54e33970",
+1506 => x"70735280",
+1507 => x"decc0851",
+1508 => x"933f5050",
+1509 => x"04707073",
+1510 => x"5280decc",
+1511 => x"085190ce",
+1512 => x"3f505004",
+1513 => x"f43d0d7e",
+1514 => x"608b1170",
+1515 => x"f8065b55",
+1516 => x"555d7296",
+1517 => x"26833890",
+1518 => x"58807824",
+1519 => x"74792607",
+1520 => x"55805474",
+1521 => x"742e0981",
+1522 => x"0680ca38",
+1523 => x"7c518d9e",
+1524 => x"3f7783f7",
+1525 => x"2680c538",
+1526 => x"77832a70",
+1527 => x"10101080",
+1528 => x"d6c4058c",
+1529 => x"11085858",
+1530 => x"5475772e",
+1531 => x"81f03884",
+1532 => x"1608fc06",
+1533 => x"8c170888",
+1534 => x"1808718c",
+1535 => x"120c8812",
+1536 => x"0c5b7605",
+1537 => x"84110881",
+1538 => x"0784120c",
+1539 => x"537c518c",
+1540 => x"de3f8816",
+1541 => x"5473800c",
+1542 => x"8e3d0d04",
+1543 => x"77892a78",
+1544 => x"832a5854",
+1545 => x"73802ebf",
+1546 => x"3877862a",
+1547 => x"b8055784",
+1548 => x"7427b438",
+1549 => x"80db1457",
+1550 => x"947427ab",
+1551 => x"38778c2a",
+1552 => x"80ee0557",
+1553 => x"80d47427",
+1554 => x"9e38778f",
+1555 => x"2a80f705",
+1556 => x"5782d474",
+1557 => x"27913877",
+1558 => x"922a80fc",
+1559 => x"05578ad4",
+1560 => x"74278438",
+1561 => x"80fe5776",
+1562 => x"10101080",
+1563 => x"d6c4058c",
+1564 => x"11085653",
+1565 => x"74732ea3",
+1566 => x"38841508",
+1567 => x"fc067079",
+1568 => x"31555673",
+1569 => x"8f2488e4",
+1570 => x"38738025",
+1571 => x"88e6388c",
+1572 => x"15085574",
+1573 => x"732e0981",
+1574 => x"06df3881",
+1575 => x"175980d6",
+1576 => x"d4085675",
+1577 => x"80d6cc2e",
+1578 => x"82cc3884",
+1579 => x"1608fc06",
+1580 => x"70793155",
+1581 => x"55738f24",
+1582 => x"bb3880d6",
+1583 => x"cc0b80d6",
+1584 => x"d80c80d6",
+1585 => x"cc0b80d6",
+1586 => x"d40c8074",
+1587 => x"2480db38",
+1588 => x"74168411",
+1589 => x"08810784",
+1590 => x"120c53fe",
+1591 => x"b0398816",
+1592 => x"8c110857",
+1593 => x"5975792e",
+1594 => x"098106fe",
+1595 => x"82388214",
+1596 => x"59ffab39",
+1597 => x"77167881",
+1598 => x"0784180c",
+1599 => x"7080d6d8",
+1600 => x"0c7080d6",
+1601 => x"d40c80d6",
+1602 => x"cc0b8c12",
+1603 => x"0c8c1108",
+1604 => x"88120c74",
+1605 => x"81078412",
+1606 => x"0c740574",
+1607 => x"710c5b7c",
+1608 => x"518acc3f",
+1609 => x"881654fd",
+1610 => x"ec3983ff",
+1611 => x"75278391",
+1612 => x"3874892a",
+1613 => x"75832a54",
+1614 => x"5473802e",
+1615 => x"bf387486",
+1616 => x"2ab80553",
+1617 => x"847427b4",
+1618 => x"3880db14",
+1619 => x"53947427",
+1620 => x"ab38748c",
+1621 => x"2a80ee05",
+1622 => x"5380d474",
+1623 => x"279e3874",
+1624 => x"8f2a80f7",
+1625 => x"055382d4",
+1626 => x"74279138",
+1627 => x"74922a80",
+1628 => x"fc05538a",
+1629 => x"d4742784",
+1630 => x"3880fe53",
+1631 => x"72101010",
+1632 => x"80d6c405",
+1633 => x"88110855",
+1634 => x"5773772e",
+1635 => x"868b3884",
+1636 => x"1408fc06",
+1637 => x"5b747b27",
+1638 => x"8d388814",
+1639 => x"08547377",
+1640 => x"2e098106",
+1641 => x"ea388c14",
+1642 => x"0880d6c4",
+1643 => x"0b840508",
+1644 => x"718c190c",
+1645 => x"7588190c",
+1646 => x"7788130c",
+1647 => x"5c57758c",
+1648 => x"150c7853",
+1649 => x"80792483",
+1650 => x"98387282",
+1651 => x"2c81712b",
+1652 => x"5656747b",
+1653 => x"2680ca38",
+1654 => x"7a750657",
+1655 => x"7682a338",
+1656 => x"78fc0684",
+1657 => x"05597410",
+1658 => x"707c0655",
+1659 => x"55738292",
+1660 => x"38841959",
+1661 => x"f13980d6",
+1662 => x"c40b8405",
+1663 => x"0879545b",
+1664 => x"788025c6",
+1665 => x"3882da39",
+1666 => x"74097b06",
+1667 => x"7080d6c4",
+1668 => x"0b84050c",
+1669 => x"5b741055",
+1670 => x"747b2685",
+1671 => x"387485bc",
+1672 => x"3880d6c4",
+1673 => x"0b880508",
+1674 => x"70841208",
+1675 => x"fc06707b",
+1676 => x"317b7226",
+1677 => x"8f722507",
+1678 => x"5d575c5c",
+1679 => x"5578802e",
+1680 => x"80d93879",
+1681 => x"1580d6bc",
+1682 => x"08199011",
+1683 => x"59545680",
+1684 => x"d6b808ff",
+1685 => x"2e8838a0",
+1686 => x"8f13e080",
+1687 => x"06577652",
+1688 => x"7c51888c",
+1689 => x"3f800854",
+1690 => x"8008ff2e",
+1691 => x"90388008",
+1692 => x"762782a7",
+1693 => x"387480d6",
+1694 => x"c42e829f",
+1695 => x"3880d6c4",
+1696 => x"0b880508",
+1697 => x"55841508",
+1698 => x"fc067079",
+1699 => x"31797226",
+1700 => x"8f722507",
+1701 => x"5d555a7a",
+1702 => x"83f23877",
+1703 => x"81078416",
+1704 => x"0c771570",
+1705 => x"80d6c40b",
+1706 => x"88050c74",
+1707 => x"81078412",
+1708 => x"0c567c51",
+1709 => x"87b93f88",
+1710 => x"15547380",
+1711 => x"0c8e3d0d",
+1712 => x"0474832a",
+1713 => x"70545480",
+1714 => x"7424819b",
+1715 => x"3872822c",
+1716 => x"81712b80",
+1717 => x"d6c80807",
+1718 => x"7080d6c4",
+1719 => x"0b84050c",
+1720 => x"75101010",
+1721 => x"80d6c405",
+1722 => x"88110871",
+1723 => x"8c1b0c70",
+1724 => x"881b0c79",
+1725 => x"88130c57",
+1726 => x"555c5575",
+1727 => x"8c150cfd",
+1728 => x"c1397879",
+1729 => x"10101080",
+1730 => x"d6c40570",
+1731 => x"565b5c8c",
+1732 => x"14085675",
+1733 => x"742ea338",
+1734 => x"841608fc",
+1735 => x"06707931",
+1736 => x"5853768f",
+1737 => x"2483f138",
+1738 => x"76802584",
+1739 => x"af388c16",
+1740 => x"08567574",
+1741 => x"2e098106",
+1742 => x"df388814",
+1743 => x"811a7083",
+1744 => x"06555a54",
+1745 => x"72c9387b",
+1746 => x"83065675",
+1747 => x"802efdb8",
+1748 => x"38ff1cf8",
+1749 => x"1b5b5c88",
+1750 => x"1a087a2e",
+1751 => x"ea38fdb5",
+1752 => x"39831953",
+1753 => x"fce43983",
+1754 => x"1470822c",
+1755 => x"81712b80",
+1756 => x"d6c80807",
+1757 => x"7080d6c4",
+1758 => x"0b84050c",
+1759 => x"76101010",
+1760 => x"80d6c405",
+1761 => x"88110871",
+1762 => x"8c1c0c70",
+1763 => x"881c0c7a",
+1764 => x"88130c58",
+1765 => x"535d5653",
+1766 => x"fee13980",
+1767 => x"d6880817",
+1768 => x"59800876",
+1769 => x"2e818b38",
+1770 => x"80d6b808",
+1771 => x"ff2e848e",
+1772 => x"38737631",
+1773 => x"1980d688",
+1774 => x"0c738706",
+1775 => x"70565372",
+1776 => x"802e8838",
+1777 => x"88733170",
+1778 => x"15555576",
+1779 => x"149fff06",
+1780 => x"a0807131",
+1781 => x"1670547e",
+1782 => x"53515385",
+1783 => x"933f8008",
+1784 => x"568008ff",
+1785 => x"2e819e38",
+1786 => x"80d68808",
+1787 => x"137080d6",
+1788 => x"880c7475",
+1789 => x"80d6c40b",
+1790 => x"88050c77",
+1791 => x"76311581",
+1792 => x"07555659",
+1793 => x"7a80d6c4",
+1794 => x"2e83c038",
+1795 => x"798f2682",
+1796 => x"ef38810b",
+1797 => x"84150c84",
+1798 => x"1508fc06",
+1799 => x"70793179",
+1800 => x"72268f72",
+1801 => x"25075d55",
+1802 => x"5a7a802e",
+1803 => x"fced3880",
+1804 => x"db398008",
+1805 => x"9fff0655",
+1806 => x"74feed38",
+1807 => x"7880d688",
+1808 => x"0c80d6c4",
+1809 => x"0b880508",
+1810 => x"7a188107",
+1811 => x"84120c55",
+1812 => x"80d6b408",
+1813 => x"79278638",
+1814 => x"7880d6b4",
+1815 => x"0c80d6b0",
+1816 => x"087927fc",
+1817 => x"a0387880",
+1818 => x"d6b00c84",
+1819 => x"1508fc06",
+1820 => x"70793179",
+1821 => x"72268f72",
+1822 => x"25075d55",
+1823 => x"5a7a802e",
+1824 => x"fc993888",
+1825 => x"39807457",
+1826 => x"53fedd39",
+1827 => x"7c5183df",
+1828 => x"3f800b80",
+1829 => x"0c8e3d0d",
+1830 => x"04807324",
+1831 => x"a5387282",
+1832 => x"2c81712b",
+1833 => x"80d6c808",
+1834 => x"077080d6",
+1835 => x"c40b8405",
+1836 => x"0c5c5a76",
+1837 => x"8c170c73",
+1838 => x"88170c75",
+1839 => x"88180cf9",
+1840 => x"fd398313",
+1841 => x"70822c81",
+1842 => x"712b80d6",
+1843 => x"c8080770",
+1844 => x"80d6c40b",
+1845 => x"84050c5d",
+1846 => x"5b53d839",
+1847 => x"7a75065c",
+1848 => x"7bfc9f38",
+1849 => x"84197510",
+1850 => x"5659f139",
+1851 => x"ff178105",
+1852 => x"59f7ab39",
+1853 => x"8c150888",
+1854 => x"1608718c",
+1855 => x"120c8812",
+1856 => x"0c597515",
+1857 => x"84110881",
+1858 => x"0784120c",
+1859 => x"587c5182",
+1860 => x"de3f8815",
+1861 => x"54fba339",
+1862 => x"77167881",
+1863 => x"0784180c",
+1864 => x"8c170888",
+1865 => x"1808718c",
+1866 => x"120c8812",
+1867 => x"0c5c7080",
+1868 => x"d6d80c70",
+1869 => x"80d6d40c",
+1870 => x"80d6cc0b",
+1871 => x"8c120c8c",
+1872 => x"11088812",
+1873 => x"0c778107",
+1874 => x"84120c77",
+1875 => x"0577710c",
+1876 => x"557c5182",
+1877 => x"9a3f8816",
+1878 => x"54f5ba39",
+1879 => x"72168411",
+1880 => x"08810784",
+1881 => x"120c588c",
+1882 => x"16088817",
+1883 => x"08718c12",
+1884 => x"0c88120c",
+1885 => x"577c5181",
+1886 => x"f63f8816",
+1887 => x"54f59639",
+1888 => x"7284150c",
+1889 => x"f41af806",
+1890 => x"70841d08",
+1891 => x"81060784",
+1892 => x"1d0c701c",
+1893 => x"5556850b",
+1894 => x"84150c85",
+1895 => x"0b88150c",
+1896 => x"8f7627fd",
+1897 => x"ab38881b",
+1898 => x"527c5184",
+1899 => x"c13f80d6",
+1900 => x"c40b8805",
+1901 => x"0880d688",
+1902 => x"085a55fd",
+1903 => x"93397880",
+1904 => x"d6880c73",
+1905 => x"80d6b80c",
+1906 => x"fbef3972",
+1907 => x"84150cfc",
+1908 => x"ff39fb3d",
+1909 => x"0d77707a",
+1910 => x"7c585553",
+1911 => x"568f7527",
+1912 => x"80e63872",
+1913 => x"76078306",
+1914 => x"517080dc",
+1915 => x"38757352",
+1916 => x"54707084",
+1917 => x"05520874",
+1918 => x"70840556",
+1919 => x"0c737170",
+1920 => x"84055308",
+1921 => x"71708405",
+1922 => x"530c7170",
+1923 => x"84055308",
+1924 => x"71708405",
+1925 => x"530c7170",
+1926 => x"84055308",
+1927 => x"71708405",
+1928 => x"530cf016",
+1929 => x"5654748f",
+1930 => x"26c73883",
+1931 => x"75279538",
+1932 => x"70708405",
+1933 => x"52087470",
+1934 => x"8405560c",
+1935 => x"fc155574",
+1936 => x"8326ed38",
+1937 => x"73715452",
+1938 => x"ff155170",
+1939 => x"ff2e9838",
+1940 => x"72708105",
+1941 => x"54337270",
+1942 => x"81055434",
+1943 => x"ff115170",
+1944 => x"ff2e0981",
+1945 => x"06ea3875",
+1946 => x"800c873d",
+1947 => x"0d040404",
+1948 => x"70707070",
+1949 => x"800b81b6",
+1950 => x"9c0c7651",
+1951 => x"87cc3f80",
+1952 => x"08538008",
+1953 => x"ff2e8938",
+1954 => x"72800c50",
+1955 => x"50505004",
+1956 => x"81b69c08",
+1957 => x"5473802e",
+1958 => x"ef387574",
+1959 => x"710c5272",
+1960 => x"800c5050",
+1961 => x"505004fb",
+1962 => x"3d0d7779",
+1963 => x"70720783",
+1964 => x"06535452",
+1965 => x"70933871",
+1966 => x"73730854",
+1967 => x"56547173",
+1968 => x"082e80c4",
+1969 => x"38737554",
+1970 => x"52713370",
+1971 => x"81ff0652",
+1972 => x"5470802e",
+1973 => x"9d387233",
+1974 => x"5570752e",
+1975 => x"09810695",
+1976 => x"38811281",
+1977 => x"14713370",
+1978 => x"81ff0654",
+1979 => x"56545270",
+1980 => x"e5387233",
+1981 => x"557381ff",
+1982 => x"067581ff",
+1983 => x"06717131",
+1984 => x"800c5552",
+1985 => x"873d0d04",
+1986 => x"7109f7fb",
+1987 => x"fdff1306",
+1988 => x"f8848281",
+1989 => x"80065271",
+1990 => x"97388414",
+1991 => x"84167108",
+1992 => x"54565471",
+1993 => x"75082ee0",
+1994 => x"38737554",
+1995 => x"52ff9a39",
+1996 => x"800b800c",
+1997 => x"873d0d04",
+1998 => x"fb3d0d77",
+1999 => x"705256fe",
+2000 => x"ad3f80d6",
+2001 => x"c40b8805",
+2002 => x"08841108",
+2003 => x"fc06707b",
+2004 => x"319fef05",
+2005 => x"e08006e0",
+2006 => x"80055255",
+2007 => x"55a08075",
+2008 => x"24943880",
+2009 => x"527551fe",
+2010 => x"873f80d6",
+2011 => x"cc081453",
+2012 => x"7280082e",
+2013 => x"8f387551",
+2014 => x"fdf53f80",
+2015 => x"5372800c",
+2016 => x"873d0d04",
+2017 => x"74305275",
+2018 => x"51fde53f",
+2019 => x"8008ff2e",
+2020 => x"a83880d6",
+2021 => x"c40b8805",
+2022 => x"08747631",
+2023 => x"81078412",
+2024 => x"0c5380d6",
+2025 => x"88087531",
+2026 => x"80d6880c",
+2027 => x"7551fdbf",
+2028 => x"3f810b80",
+2029 => x"0c873d0d",
+2030 => x"04805275",
+2031 => x"51fdb13f",
+2032 => x"80d6c40b",
+2033 => x"88050880",
+2034 => x"08713154",
+2035 => x"548f7325",
+2036 => x"ffa43880",
+2037 => x"0880d6b8",
+2038 => x"083180d6",
+2039 => x"880c7281",
+2040 => x"0784150c",
+2041 => x"7551fd87",
+2042 => x"3f8053ff",
+2043 => x"9039f73d",
+2044 => x"0d7b7d54",
+2045 => x"5a72802e",
+2046 => x"82833879",
+2047 => x"51fcef3f",
+2048 => x"f8138411",
+2049 => x"0870fe06",
+2050 => x"70138411",
+2051 => x"08fc065c",
+2052 => x"57585457",
+2053 => x"80d6cc08",
+2054 => x"742e82de",
+2055 => x"38778415",
+2056 => x"0c807381",
+2057 => x"06565974",
+2058 => x"792e81d5",
+2059 => x"38771484",
+2060 => x"11088106",
+2061 => x"565374a0",
+2062 => x"38771656",
+2063 => x"7881e638",
+2064 => x"88140855",
+2065 => x"7480d6cc",
+2066 => x"2e82f938",
+2067 => x"8c140870",
+2068 => x"8c170c75",
+2069 => x"88120c58",
+2070 => x"75810784",
+2071 => x"180c7517",
+2072 => x"76710c54",
+2073 => x"78819138",
+2074 => x"83ff7627",
+2075 => x"81c83875",
+2076 => x"892a7683",
+2077 => x"2a545473",
+2078 => x"802ebf38",
+2079 => x"75862ab8",
+2080 => x"05538474",
+2081 => x"27b43880",
+2082 => x"db145394",
+2083 => x"7427ab38",
+2084 => x"758c2a80",
+2085 => x"ee055380",
+2086 => x"d474279e",
+2087 => x"38758f2a",
+2088 => x"80f70553",
+2089 => x"82d47427",
+2090 => x"91387592",
+2091 => x"2a80fc05",
+2092 => x"538ad474",
+2093 => x"27843880",
+2094 => x"fe537210",
+2095 => x"101080d6",
+2096 => x"c4058811",
+2097 => x"08555573",
+2098 => x"752e82bf",
+2099 => x"38841408",
+2100 => x"fc065975",
+2101 => x"79278d38",
+2102 => x"88140854",
+2103 => x"73752e09",
+2104 => x"8106ea38",
+2105 => x"8c140870",
+2106 => x"8c190c74",
+2107 => x"88190c77",
+2108 => x"88120c55",
+2109 => x"768c150c",
+2110 => x"7951faf3",
+2111 => x"3f8b3d0d",
+2112 => x"04760877",
+2113 => x"71315876",
+2114 => x"05881808",
+2115 => x"56567480",
+2116 => x"d6cc2e80",
+2117 => x"e0388c17",
+2118 => x"08708c17",
+2119 => x"0c758812",
+2120 => x"0c53fe89",
+2121 => x"39881408",
+2122 => x"8c150870",
+2123 => x"8c130c59",
+2124 => x"88190cfe",
+2125 => x"a3397583",
+2126 => x"2a705454",
+2127 => x"80742481",
+2128 => x"98387282",
+2129 => x"2c81712b",
+2130 => x"80d6c808",
+2131 => x"0780d6c4",
+2132 => x"0b84050c",
+2133 => x"74101010",
+2134 => x"80d6c405",
+2135 => x"88110871",
+2136 => x"8c1b0c70",
+2137 => x"881b0c79",
+2138 => x"88130c56",
+2139 => x"5a55768c",
+2140 => x"150cff84",
+2141 => x"398159fd",
+2142 => x"b4397716",
+2143 => x"73810654",
+2144 => x"55729838",
+2145 => x"76087771",
+2146 => x"31587505",
+2147 => x"8c180888",
+2148 => x"1908718c",
+2149 => x"120c8812",
+2150 => x"0c555574",
+2151 => x"81078418",
+2152 => x"0c7680d6",
+2153 => x"c40b8805",
+2154 => x"0c80d6c0",
+2155 => x"087526fe",
+2156 => x"c73880d6",
+2157 => x"bc085279",
+2158 => x"51fafd3f",
+2159 => x"7951f9af",
+2160 => x"3ffeba39",
+2161 => x"81778c17",
+2162 => x"0c778817",
+2163 => x"0c758c19",
+2164 => x"0c758819",
+2165 => x"0c59fd80",
+2166 => x"39831470",
+2167 => x"822c8171",
+2168 => x"2b80d6c8",
+2169 => x"080780d6",
+2170 => x"c40b8405",
+2171 => x"0c751010",
+2172 => x"1080d6c4",
+2173 => x"05881108",
+2174 => x"718c1c0c",
+2175 => x"70881c0c",
+2176 => x"7a88130c",
+2177 => x"575b5653",
+2178 => x"fee43980",
+2179 => x"7324a338",
+2180 => x"72822c81",
+2181 => x"712b80d6",
+2182 => x"c8080780",
+2183 => x"d6c40b84",
+2184 => x"050c5874",
+2185 => x"8c180c73",
+2186 => x"88180c76",
+2187 => x"88160cfd",
+2188 => x"c3398313",
+2189 => x"70822c81",
+2190 => x"712b80d6",
+2191 => x"c8080780",
+2192 => x"d6c40b84",
+2193 => x"050c5953",
+2194 => x"da397070",
+2195 => x"7080e5f4",
+2196 => x"08893881",
+2197 => x"b6a00b80",
+2198 => x"e5f40c80",
+2199 => x"e5f40875",
+2200 => x"115252ff",
+2201 => x"537087fb",
+2202 => x"80802688",
+2203 => x"387080e5",
+2204 => x"f40c7153",
+2205 => x"72800c50",
+2206 => x"505004fd",
+2207 => x"3d0d800b",
+2208 => x"80d5f408",
+2209 => x"54547281",
+2210 => x"2e9b3873",
+2211 => x"80e5f80c",
+2212 => x"c3ee3fc2",
+2213 => x"eb3f80e5",
+2214 => x"cc528151",
+2215 => x"cc933f80",
+2216 => x"085180dd",
+2217 => x"3f7280e5",
+2218 => x"f80cc3d4",
+2219 => x"3fc2d13f",
+2220 => x"80e5cc52",
+2221 => x"8151cbf9",
+2222 => x"3f800851",
+2223 => x"80c33f00",
+2224 => x"ff3900ff",
+2225 => x"39f43d0d",
+2226 => x"7e80e5ec",
+2227 => x"08700870",
+2228 => x"81ff0692",
+2229 => x"3df80555",
+2230 => x"515a5759",
+2231 => x"c48f3f80",
+2232 => x"5477557b",
+2233 => x"7d585276",
+2234 => x"538e3df0",
+2235 => x"0551de8e",
+2236 => x"3f797b58",
+2237 => x"790c7684",
+2238 => x"1a0c7880",
+2239 => x"0c8e3d0d",
+2240 => x"04f73d0d",
+2241 => x"7b80decc",
+2242 => x"0882c811",
+2243 => x"085a545a",
+2244 => x"77802e80",
+2245 => x"da388188",
+2246 => x"18841908",
+2247 => x"ff058171",
+2248 => x"2b595559",
+2249 => x"80742480",
+2250 => x"ea388074",
+2251 => x"24b53873",
+2252 => x"822b7811",
+2253 => x"88055656",
+2254 => x"81801908",
+2255 => x"77065372",
+2256 => x"802eb638",
+2257 => x"78167008",
+2258 => x"53537951",
+2259 => x"74085372",
+2260 => x"2dff14fc",
+2261 => x"17fc1779",
+2262 => x"812c5a57",
+2263 => x"57547380",
+2264 => x"25d63877",
+2265 => x"085877ff",
+2266 => x"ad3880de",
+2267 => x"cc0853bc",
+2268 => x"1308a538",
+2269 => x"7951fec7",
+2270 => x"3f740853",
+2271 => x"722dff14",
+2272 => x"fc17fc17",
+2273 => x"79812c5a",
+2274 => x"57575473",
+2275 => x"8025ffa8",
+2276 => x"38d13980",
+2277 => x"57ff9339",
+2278 => x"7251bc13",
+2279 => x"0854732d",
+2280 => x"7951fe9b",
+2281 => x"3f707080",
+2282 => x"e5d40bfc",
+2283 => x"05700852",
+2284 => x"5270ff2e",
+2285 => x"9138702d",
+2286 => x"fc127008",
+2287 => x"525270ff",
+2288 => x"2e098106",
+2289 => x"f1385050",
+2290 => x"0404c2ff",
+2291 => x"3f040000",
+2292 => x"00000040",
+2293 => x"30313233",
+2294 => x"34353637",
+2295 => x"38390000",
+2296 => x"44485259",
+2297 => x"53544f4e",
+2298 => x"45205052",
+2299 => x"4f475241",
+2300 => x"4d2c2053",
+2301 => x"4f4d4520",
+2302 => x"53545249",
+2303 => x"4e470000",
+2304 => x"44485259",
+2305 => x"53544f4e",
+2306 => x"45205052",
+2307 => x"4f475241",
+2308 => x"4d2c2031",
+2309 => x"27535420",
+2310 => x"53545249",
+2311 => x"4e470000",
+2312 => x"44687279",
+2313 => x"73746f6e",
+2314 => x"65204265",
+2315 => x"6e63686d",
+2316 => x"61726b2c",
+2317 => x"20566572",
+2318 => x"73696f6e",
+2319 => x"20322e31",
+2320 => x"20284c61",
+2321 => x"6e677561",
+2322 => x"67653a20",
+2323 => x"43290a00",
+2324 => x"50726f67",
+2325 => x"72616d20",
+2326 => x"636f6d70",
+2327 => x"696c6564",
+2328 => x"20776974",
+2329 => x"68202772",
+2330 => x"65676973",
+2331 => x"74657227",
+2332 => x"20617474",
+2333 => x"72696275",
+2334 => x"74650a00",
+2335 => x"45786563",
+2336 => x"7574696f",
+2337 => x"6e207374",
+2338 => x"61727473",
+2339 => x"2c202564",
+2340 => x"2072756e",
+2341 => x"73207468",
+2342 => x"726f7567",
+2343 => x"68204468",
+2344 => x"72797374",
+2345 => x"6f6e650a",
+2346 => x"00000000",
+2347 => x"44485259",
+2348 => x"53544f4e",
+2349 => x"45205052",
+2350 => x"4f475241",
+2351 => x"4d2c2032",
+2352 => x"274e4420",
+2353 => x"53545249",
+2354 => x"4e470000",
+2355 => x"45786563",
+2356 => x"7574696f",
+2357 => x"6e20656e",
+2358 => x"64730a00",
+2359 => x"46696e61",
+2360 => x"6c207661",
+2361 => x"6c756573",
+2362 => x"206f6620",
+2363 => x"74686520",
+2364 => x"76617269",
+2365 => x"61626c65",
+2366 => x"73207573",
+2367 => x"65642069",
+2368 => x"6e207468",
+2369 => x"65206265",
+2370 => x"6e63686d",
+2371 => x"61726b3a",
+2372 => x"0a000000",
+2373 => x"496e745f",
+2374 => x"476c6f62",
+2375 => x"3a202020",
+2376 => x"20202020",
+2377 => x"20202020",
+2378 => x"2025640a",
+2379 => x"00000000",
+2380 => x"20202020",
+2381 => x"20202020",
+2382 => x"73686f75",
+2383 => x"6c642062",
+2384 => x"653a2020",
+2385 => x"2025640a",
+2386 => x"00000000",
+2387 => x"426f6f6c",
+2388 => x"5f476c6f",
+2389 => x"623a2020",
+2390 => x"20202020",
+2391 => x"20202020",
+2392 => x"2025640a",
+2393 => x"00000000",
+2394 => x"43685f31",
+2395 => x"5f476c6f",
+2396 => x"623a2020",
+2397 => x"20202020",
+2398 => x"20202020",
+2399 => x"2025630a",
+2400 => x"00000000",
+2401 => x"20202020",
+2402 => x"20202020",
+2403 => x"73686f75",
+2404 => x"6c642062",
+2405 => x"653a2020",
+2406 => x"2025630a",
+2407 => x"00000000",
+2408 => x"43685f32",
+2409 => x"5f476c6f",
+2410 => x"623a2020",
+2411 => x"20202020",
+2412 => x"20202020",
+2413 => x"2025630a",
+2414 => x"00000000",
+2415 => x"4172725f",
+2416 => x"315f476c",
+2417 => x"6f625b38",
+2418 => x"5d3a2020",
+2419 => x"20202020",
+2420 => x"2025640a",
+2421 => x"00000000",
+2422 => x"4172725f",
+2423 => x"325f476c",
+2424 => x"6f625b38",
+2425 => x"5d5b375d",
+2426 => x"3a202020",
+2427 => x"2025640a",
+2428 => x"00000000",
+2429 => x"20202020",
+2430 => x"20202020",
+2431 => x"73686f75",
+2432 => x"6c642062",
+2433 => x"653a2020",
+2434 => x"204e756d",
+2435 => x"6265725f",
+2436 => x"4f665f52",
+2437 => x"756e7320",
+2438 => x"2b203130",
+2439 => x"0a000000",
+2440 => x"5074725f",
+2441 => x"476c6f62",
+2442 => x"2d3e0a00",
+2443 => x"20205074",
+2444 => x"725f436f",
+2445 => x"6d703a20",
+2446 => x"20202020",
+2447 => x"20202020",
+2448 => x"2025640a",
+2449 => x"00000000",
+2450 => x"20202020",
+2451 => x"20202020",
+2452 => x"73686f75",
+2453 => x"6c642062",
+2454 => x"653a2020",
+2455 => x"2028696d",
+2456 => x"706c656d",
+2457 => x"656e7461",
+2458 => x"74696f6e",
+2459 => x"2d646570",
+2460 => x"656e6465",
+2461 => x"6e74290a",
+2462 => x"00000000",
+2463 => x"20204469",
+2464 => x"7363723a",
+2465 => x"20202020",
+2466 => x"20202020",
+2467 => x"20202020",
+2468 => x"2025640a",
+2469 => x"00000000",
+2470 => x"2020456e",
+2471 => x"756d5f43",
+2472 => x"6f6d703a",
+2473 => x"20202020",
+2474 => x"20202020",
+2475 => x"2025640a",
+2476 => x"00000000",
+2477 => x"2020496e",
+2478 => x"745f436f",
+2479 => x"6d703a20",
+2480 => x"20202020",
+2481 => x"20202020",
+2482 => x"2025640a",
+2483 => x"00000000",
+2484 => x"20205374",
+2485 => x"725f436f",
+2486 => x"6d703a20",
+2487 => x"20202020",
+2488 => x"20202020",
+2489 => x"2025730a",
+2490 => x"00000000",
+2491 => x"20202020",
+2492 => x"20202020",
+2493 => x"73686f75",
+2494 => x"6c642062",
+2495 => x"653a2020",
+2496 => x"20444852",
+2497 => x"5953544f",
+2498 => x"4e452050",
+2499 => x"524f4752",
+2500 => x"414d2c20",
+2501 => x"534f4d45",
+2502 => x"20535452",
+2503 => x"494e470a",
+2504 => x"00000000",
+2505 => x"4e657874",
+2506 => x"5f507472",
+2507 => x"5f476c6f",
+2508 => x"622d3e0a",
+2509 => x"00000000",
+2510 => x"20202020",
+2511 => x"20202020",
+2512 => x"73686f75",
+2513 => x"6c642062",
+2514 => x"653a2020",
+2515 => x"2028696d",
+2516 => x"706c656d",
+2517 => x"656e7461",
+2518 => x"74696f6e",
+2519 => x"2d646570",
+2520 => x"656e6465",
+2521 => x"6e74292c",
+2522 => x"2073616d",
+2523 => x"65206173",
+2524 => x"2061626f",
+2525 => x"76650a00",
+2526 => x"496e745f",
+2527 => x"315f4c6f",
+2528 => x"633a2020",
+2529 => x"20202020",
+2530 => x"20202020",
+2531 => x"2025640a",
+2532 => x"00000000",
+2533 => x"496e745f",
+2534 => x"325f4c6f",
+2535 => x"633a2020",
+2536 => x"20202020",
+2537 => x"20202020",
+2538 => x"2025640a",
+2539 => x"00000000",
+2540 => x"496e745f",
+2541 => x"335f4c6f",
+2542 => x"633a2020",
+2543 => x"20202020",
+2544 => x"20202020",
+2545 => x"2025640a",
+2546 => x"00000000",
+2547 => x"456e756d",
+2548 => x"5f4c6f63",
+2549 => x"3a202020",
+2550 => x"20202020",
+2551 => x"20202020",
+2552 => x"2025640a",
+2553 => x"00000000",
+2554 => x"5374725f",
+2555 => x"315f4c6f",
+2556 => x"633a2020",
+2557 => x"20202020",
+2558 => x"20202020",
+2559 => x"2025730a",
+2560 => x"00000000",
+2561 => x"20202020",
+2562 => x"20202020",
+2563 => x"73686f75",
+2564 => x"6c642062",
+2565 => x"653a2020",
+2566 => x"20444852",
+2567 => x"5953544f",
+2568 => x"4e452050",
+2569 => x"524f4752",
+2570 => x"414d2c20",
+2571 => x"31275354",
+2572 => x"20535452",
+2573 => x"494e470a",
+2574 => x"00000000",
+2575 => x"5374725f",
+2576 => x"325f4c6f",
+2577 => x"633a2020",
+2578 => x"20202020",
+2579 => x"20202020",
+2580 => x"2025730a",
+2581 => x"00000000",
+2582 => x"20202020",
+2583 => x"20202020",
+2584 => x"73686f75",
+2585 => x"6c642062",
+2586 => x"653a2020",
+2587 => x"20444852",
+2588 => x"5953544f",
+2589 => x"4e452050",
+2590 => x"524f4752",
+2591 => x"414d2c20",
+2592 => x"32274e44",
+2593 => x"20535452",
+2594 => x"494e470a",
+2595 => x"00000000",
+2596 => x"55736572",
+2597 => x"2074696d",
+2598 => x"653a2025",
+2599 => x"640a0000",
+2600 => x"4d696372",
+2601 => x"6f736563",
+2602 => x"6f6e6473",
+2603 => x"20666f72",
+2604 => x"206f6e65",
+2605 => x"2072756e",
+2606 => x"20746872",
+2607 => x"6f756768",
+2608 => x"20446872",
+2609 => x"7973746f",
+2610 => x"6e653a20",
+2611 => x"00000000",
+2612 => x"2564200a",
+2613 => x"00000000",
+2614 => x"44687279",
+2615 => x"73746f6e",
+2616 => x"65732070",
+2617 => x"65722053",
+2618 => x"65636f6e",
+2619 => x"643a2020",
+2620 => x"20202020",
+2621 => x"20202020",
+2622 => x"20202020",
+2623 => x"20202020",
+2624 => x"20202020",
+2625 => x"00000000",
+2626 => x"56415820",
+2627 => x"4d495053",
+2628 => x"20726174",
+2629 => x"696e6720",
+2630 => x"2a203130",
+2631 => x"3030203d",
+2632 => x"20256420",
+2633 => x"0a000000",
+2634 => x"50726f67",
+2635 => x"72616d20",
+2636 => x"636f6d70",
+2637 => x"696c6564",
+2638 => x"20776974",
+2639 => x"686f7574",
+2640 => x"20277265",
+2641 => x"67697374",
+2642 => x"65722720",
+2643 => x"61747472",
+2644 => x"69627574",
+2645 => x"650a0000",
+2646 => x"4d656173",
+2647 => x"75726564",
+2648 => x"2074696d",
+2649 => x"6520746f",
+2650 => x"6f20736d",
+2651 => x"616c6c20",
+2652 => x"746f206f",
+2653 => x"62746169",
+2654 => x"6e206d65",
+2655 => x"616e696e",
+2656 => x"6766756c",
+2657 => x"20726573",
+2658 => x"756c7473",
+2659 => x"0a000000",
+2660 => x"506c6561",
+2661 => x"73652069",
+2662 => x"6e637265",
+2663 => x"61736520",
+2664 => x"6e756d62",
+2665 => x"6572206f",
+2666 => x"66207275",
+2667 => x"6e730a00",
+2668 => x"44485259",
+2669 => x"53544f4e",
+2670 => x"45205052",
+2671 => x"4f475241",
+2672 => x"4d2c2033",
+2673 => x"27524420",
+2674 => x"53545249",
+2675 => x"4e470000",
+2676 => x"00010202",
+2677 => x"03030303",
+2678 => x"04040404",
+2679 => x"04040404",
+2680 => x"05050505",
+2681 => x"05050505",
+2682 => x"05050505",
+2683 => x"05050505",
+2684 => x"06060606",
+2685 => x"06060606",
+2686 => x"06060606",
+2687 => x"06060606",
+2688 => x"06060606",
+2689 => x"06060606",
+2690 => x"06060606",
+2691 => x"06060606",
+2692 => x"07070707",
+2693 => x"07070707",
+2694 => x"07070707",
+2695 => x"07070707",
+2696 => x"07070707",
+2697 => x"07070707",
+2698 => x"07070707",
+2699 => x"07070707",
+2700 => x"07070707",
+2701 => x"07070707",
+2702 => x"07070707",
+2703 => x"07070707",
+2704 => x"07070707",
+2705 => x"07070707",
+2706 => x"07070707",
+2707 => x"07070707",
+2708 => x"08080808",
+2709 => x"08080808",
+2710 => x"08080808",
+2711 => x"08080808",
+2712 => x"08080808",
+2713 => x"08080808",
+2714 => x"08080808",
+2715 => x"08080808",
+2716 => x"08080808",
+2717 => x"08080808",
+2718 => x"08080808",
+2719 => x"08080808",
+2720 => x"08080808",
+2721 => x"08080808",
+2722 => x"08080808",
+2723 => x"08080808",
+2724 => x"08080808",
+2725 => x"08080808",
+2726 => x"08080808",
+2727 => x"08080808",
+2728 => x"08080808",
+2729 => x"08080808",
+2730 => x"08080808",
+2731 => x"08080808",
+2732 => x"08080808",
+2733 => x"08080808",
+2734 => x"08080808",
+2735 => x"08080808",
+2736 => x"08080808",
+2737 => x"08080808",
+2738 => x"08080808",
+2739 => x"08080808",
+2740 => x"43000000",
+2741 => x"64756d6d",
+2742 => x"792e6578",
+2743 => x"65000000",
+2744 => x"00ffffff",
+2745 => x"ff00ffff",
+2746 => x"ffff00ff",
+2747 => x"ffffff00",
+2748 => x"00000000",
+2749 => x"00000000",
+2750 => x"00000000",
+2751 => x"000032dc",
+2752 => x"0000c350",
+2753 => x"00000000",
+2754 => x"00000000",
+2755 => x"00000000",
+2756 => x"00000000",
+2757 => x"00000000",
+2758 => x"00000000",
+2759 => x"00000000",
+2760 => x"00000000",
+2761 => x"00000000",
+2762 => x"00000000",
+2763 => x"00000000",
+2764 => x"00000000",
+2765 => x"00000000",
+2766 => x"ffffffff",
+2767 => x"00000000",
+2768 => x"00020000",
+2769 => x"00000000",
+2770 => x"00000000",
+2771 => x"00002b44",
+2772 => x"00002b44",
+2773 => x"00002b4c",
+2774 => x"00002b4c",
+2775 => x"00002b54",
+2776 => x"00002b54",
+2777 => x"00002b5c",
+2778 => x"00002b5c",
+2779 => x"00002b64",
+2780 => x"00002b64",
+2781 => x"00002b6c",
+2782 => x"00002b6c",
+2783 => x"00002b74",
+2784 => x"00002b74",
+2785 => x"00002b7c",
+2786 => x"00002b7c",
+2787 => x"00002b84",
+2788 => x"00002b84",
+2789 => x"00002b8c",
+2790 => x"00002b8c",
+2791 => x"00002b94",
+2792 => x"00002b94",
+2793 => x"00002b9c",
+2794 => x"00002b9c",
+2795 => x"00002ba4",
+2796 => x"00002ba4",
+2797 => x"00002bac",
+2798 => x"00002bac",
+2799 => x"00002bb4",
+2800 => x"00002bb4",
+2801 => x"00002bbc",
+2802 => x"00002bbc",
+2803 => x"00002bc4",
+2804 => x"00002bc4",
+2805 => x"00002bcc",
+2806 => x"00002bcc",
+2807 => x"00002bd4",
+2808 => x"00002bd4",
+2809 => x"00002bdc",
+2810 => x"00002bdc",
+2811 => x"00002be4",
+2812 => x"00002be4",
+2813 => x"00002bec",
+2814 => x"00002bec",
+2815 => x"00002bf4",
+2816 => x"00002bf4",
+2817 => x"00002bfc",
+2818 => x"00002bfc",
+2819 => x"00002c04",
+2820 => x"00002c04",
+2821 => x"00002c0c",
+2822 => x"00002c0c",
+2823 => x"00002c14",
+2824 => x"00002c14",
+2825 => x"00002c1c",
+2826 => x"00002c1c",
+2827 => x"00002c24",
+2828 => x"00002c24",
+2829 => x"00002c2c",
+2830 => x"00002c2c",
+2831 => x"00002c34",
+2832 => x"00002c34",
+2833 => x"00002c3c",
+2834 => x"00002c3c",
+2835 => x"00002c44",
+2836 => x"00002c44",
+2837 => x"00002c4c",
+2838 => x"00002c4c",
+2839 => x"00002c54",
+2840 => x"00002c54",
+2841 => x"00002c5c",
+2842 => x"00002c5c",
+2843 => x"00002c64",
+2844 => x"00002c64",
+2845 => x"00002c6c",
+2846 => x"00002c6c",
+2847 => x"00002c74",
+2848 => x"00002c74",
+2849 => x"00002c7c",
+2850 => x"00002c7c",
+2851 => x"00002c84",
+2852 => x"00002c84",
+2853 => x"00002c8c",
+2854 => x"00002c8c",
+2855 => x"00002c94",
+2856 => x"00002c94",
+2857 => x"00002c9c",
+2858 => x"00002c9c",
+2859 => x"00002ca4",
+2860 => x"00002ca4",
+2861 => x"00002cac",
+2862 => x"00002cac",
+2863 => x"00002cb4",
+2864 => x"00002cb4",
+2865 => x"00002cbc",
+2866 => x"00002cbc",
+2867 => x"00002cc4",
+2868 => x"00002cc4",
+2869 => x"00002ccc",
+2870 => x"00002ccc",
+2871 => x"00002cd4",
+2872 => x"00002cd4",
+2873 => x"00002cdc",
+2874 => x"00002cdc",
+2875 => x"00002ce4",
+2876 => x"00002ce4",
+2877 => x"00002cec",
+2878 => x"00002cec",
+2879 => x"00002cf4",
+2880 => x"00002cf4",
+2881 => x"00002cfc",
+2882 => x"00002cfc",
+2883 => x"00002d04",
+2884 => x"00002d04",
+2885 => x"00002d0c",
+2886 => x"00002d0c",
+2887 => x"00002d14",
+2888 => x"00002d14",
+2889 => x"00002d1c",
+2890 => x"00002d1c",
+2891 => x"00002d24",
+2892 => x"00002d24",
+2893 => x"00002d2c",
+2894 => x"00002d2c",
+2895 => x"00002d34",
+2896 => x"00002d34",
+2897 => x"00002d3c",
+2898 => x"00002d3c",
+2899 => x"00002d44",
+2900 => x"00002d44",
+2901 => x"00002d4c",
+2902 => x"00002d4c",
+2903 => x"00002d54",
+2904 => x"00002d54",
+2905 => x"00002d5c",
+2906 => x"00002d5c",
+2907 => x"00002d64",
+2908 => x"00002d64",
+2909 => x"00002d6c",
+2910 => x"00002d6c",
+2911 => x"00002d74",
+2912 => x"00002d74",
+2913 => x"00002d7c",
+2914 => x"00002d7c",
+2915 => x"00002d84",
+2916 => x"00002d84",
+2917 => x"00002d8c",
+2918 => x"00002d8c",
+2919 => x"00002d94",
+2920 => x"00002d94",
+2921 => x"00002d9c",
+2922 => x"00002d9c",
+2923 => x"00002da4",
+2924 => x"00002da4",
+2925 => x"00002dac",
+2926 => x"00002dac",
+2927 => x"00002db4",
+2928 => x"00002db4",
+2929 => x"00002dbc",
+2930 => x"00002dbc",
+2931 => x"00002dc4",
+2932 => x"00002dc4",
+2933 => x"00002dcc",
+2934 => x"00002dcc",
+2935 => x"00002dd4",
+2936 => x"00002dd4",
+2937 => x"00002ddc",
+2938 => x"00002ddc",
+2939 => x"00002de4",
+2940 => x"00002de4",
+2941 => x"00002dec",
+2942 => x"00002dec",
+2943 => x"00002df4",
+2944 => x"00002df4",
+2945 => x"00002dfc",
+2946 => x"00002dfc",
+2947 => x"00002e04",
+2948 => x"00002e04",
+2949 => x"00002e0c",
+2950 => x"00002e0c",
+2951 => x"00002e14",
+2952 => x"00002e14",
+2953 => x"00002e1c",
+2954 => x"00002e1c",
+2955 => x"00002e24",
+2956 => x"00002e24",
+2957 => x"00002e2c",
+2958 => x"00002e2c",
+2959 => x"00002e34",
+2960 => x"00002e34",
+2961 => x"00002e3c",
+2962 => x"00002e3c",
+2963 => x"00002e44",
+2964 => x"00002e44",
+2965 => x"00002e4c",
+2966 => x"00002e4c",
+2967 => x"00002e54",
+2968 => x"00002e54",
+2969 => x"00002e5c",
+2970 => x"00002e5c",
+2971 => x"00002e64",
+2972 => x"00002e64",
+2973 => x"00002e6c",
+2974 => x"00002e6c",
+2975 => x"00002e74",
+2976 => x"00002e74",
+2977 => x"00002e7c",
+2978 => x"00002e7c",
+2979 => x"00002e84",
+2980 => x"00002e84",
+2981 => x"00002e8c",
+2982 => x"00002e8c",
+2983 => x"00002e94",
+2984 => x"00002e94",
+2985 => x"00002e9c",
+2986 => x"00002e9c",
+2987 => x"00002ea4",
+2988 => x"00002ea4",
+2989 => x"00002eac",
+2990 => x"00002eac",
+2991 => x"00002eb4",
+2992 => x"00002eb4",
+2993 => x"00002ebc",
+2994 => x"00002ebc",
+2995 => x"00002ec4",
+2996 => x"00002ec4",
+2997 => x"00002ecc",
+2998 => x"00002ecc",
+2999 => x"00002ed4",
+3000 => x"00002ed4",
+3001 => x"00002edc",
+3002 => x"00002edc",
+3003 => x"00002ee4",
+3004 => x"00002ee4",
+3005 => x"00002eec",
+3006 => x"00002eec",
+3007 => x"00002ef4",
+3008 => x"00002ef4",
+3009 => x"00002efc",
+3010 => x"00002efc",
+3011 => x"00002f04",
+3012 => x"00002f04",
+3013 => x"00002f0c",
+3014 => x"00002f0c",
+3015 => x"00002f14",
+3016 => x"00002f14",
+3017 => x"00002f1c",
+3018 => x"00002f1c",
+3019 => x"00002f24",
+3020 => x"00002f24",
+3021 => x"00002f2c",
+3022 => x"00002f2c",
+3023 => x"00002f34",
+3024 => x"00002f34",
+3025 => x"00002f3c",
+3026 => x"00002f3c",
+3027 => x"00002f50",
+3028 => x"00000000",
+3029 => x"000031b8",
+3030 => x"00003214",
+3031 => x"00003270",
+3032 => x"00000000",
+3033 => x"00000000",
+3034 => x"00000000",
+3035 => x"00000000",
+3036 => x"00000000",
+3037 => x"00000000",
+3038 => x"00000000",
+3039 => x"00000000",
+3040 => x"00000000",
+3041 => x"00002ad0",
+3042 => x"00000000",
+3043 => x"00000000",
+3044 => x"00000000",
+3045 => x"00000000",
+3046 => x"00000000",
+3047 => x"00000000",
+3048 => x"00000000",
+3049 => x"00000000",
+3050 => x"00000000",
+3051 => x"00000000",
+3052 => x"00000000",
+3053 => x"00000000",
+3054 => x"00000000",
+3055 => x"00000000",
+3056 => x"00000000",
+3057 => x"00000000",
+3058 => x"00000000",
+3059 => x"00000000",
+3060 => x"00000000",
+3061 => x"00000000",
+3062 => x"00000000",
+3063 => x"00000000",
+3064 => x"00000000",
+3065 => x"00000000",
+3066 => x"00000000",
+3067 => x"00000000",
+3068 => x"00000000",
+3069 => x"00000000",
+3070 => x"00000001",
+3071 => x"330eabcd",
+3072 => x"1234e66d",
+3073 => x"deec0005",
+3074 => x"000b0000",
+3075 => x"00000000",
+3076 => x"00000000",
+3077 => x"00000000",
+3078 => x"00000000",
+3079 => x"00000000",
+3080 => x"00000000",
+3081 => x"00000000",
+3082 => x"00000000",
+3083 => x"00000000",
+3084 => x"00000000",
+3085 => x"00000000",
+3086 => x"00000000",
+3087 => x"00000000",
+3088 => x"00000000",
+3089 => x"00000000",
+3090 => x"00000000",
+3091 => x"00000000",
+3092 => x"00000000",
+3093 => x"00000000",
+3094 => x"00000000",
+3095 => x"00000000",
+3096 => x"00000000",
+3097 => x"00000000",
+3098 => x"00000000",
+3099 => x"00000000",
+3100 => x"00000000",
+3101 => x"00000000",
+3102 => x"00000000",
+3103 => x"00000000",
+3104 => x"00000000",
+3105 => x"00000000",
+3106 => x"00000000",
+3107 => x"00000000",
+3108 => x"00000000",
+3109 => x"00000000",
+3110 => x"00000000",
+3111 => x"00000000",
+3112 => x"00000000",
+3113 => x"00000000",
+3114 => x"00000000",
+3115 => x"00000000",
+3116 => x"00000000",
+3117 => x"00000000",
+3118 => x"00000000",
+3119 => x"00000000",
+3120 => x"00000000",
+3121 => x"00000000",
+3122 => x"00000000",
+3123 => x"00000000",
+3124 => x"00000000",
+3125 => x"00000000",
+3126 => x"00000000",
+3127 => x"00000000",
+3128 => x"00000000",
+3129 => x"00000000",
+3130 => x"00000000",
+3131 => x"00000000",
+3132 => x"00000000",
+3133 => x"00000000",
+3134 => x"00000000",
+3135 => x"00000000",
+3136 => x"00000000",
+3137 => x"00000000",
+3138 => x"00000000",
+3139 => x"00000000",
+3140 => x"00000000",
+3141 => x"00000000",
+3142 => x"00000000",
+3143 => x"00000000",
+3144 => x"00000000",
+3145 => x"00000000",
+3146 => x"00000000",
+3147 => x"00000000",
+3148 => x"00000000",
+3149 => x"00000000",
+3150 => x"00000000",
+3151 => x"00000000",
+3152 => x"00000000",
+3153 => x"00000000",
+3154 => x"00000000",
+3155 => x"00000000",
+3156 => x"00000000",
+3157 => x"00000000",
+3158 => x"00000000",
+3159 => x"00000000",
+3160 => x"00000000",
+3161 => x"00000000",
+3162 => x"00000000",
+3163 => x"00000000",
+3164 => x"00000000",
+3165 => x"00000000",
+3166 => x"00000000",
+3167 => x"00000000",
+3168 => x"00000000",
+3169 => x"00000000",
+3170 => x"00000000",
+3171 => x"00000000",
+3172 => x"00000000",
+3173 => x"00000000",
+3174 => x"00000000",
+3175 => x"00000000",
+3176 => x"00000000",
+3177 => x"00000000",
+3178 => x"00000000",
+3179 => x"00000000",
+3180 => x"00000000",
+3181 => x"00000000",
+3182 => x"00000000",
+3183 => x"00000000",
+3184 => x"00000000",
+3185 => x"00000000",
+3186 => x"00000000",
+3187 => x"00000000",
+3188 => x"00000000",
+3189 => x"00000000",
+3190 => x"00000000",
+3191 => x"00000000",
+3192 => x"00000000",
+3193 => x"00000000",
+3194 => x"00000000",
+3195 => x"00000000",
+3196 => x"00000000",
+3197 => x"00000000",
+3198 => x"00000000",
+3199 => x"00000000",
+3200 => x"00000000",
+3201 => x"00000000",
+3202 => x"00000000",
+3203 => x"00000000",
+3204 => x"00000000",
+3205 => x"00000000",
+3206 => x"00000000",
+3207 => x"00000000",
+3208 => x"00000000",
+3209 => x"00000000",
+3210 => x"00000000",
+3211 => x"00000000",
+3212 => x"00000000",
+3213 => x"00000000",
+3214 => x"00000000",
+3215 => x"00000000",
+3216 => x"00000000",
+3217 => x"00000000",
+3218 => x"00000000",
+3219 => x"00000000",
+3220 => x"00000000",
+3221 => x"00000000",
+3222 => x"00000000",
+3223 => x"00000000",
+3224 => x"00000000",
+3225 => x"00000000",
+3226 => x"00000000",
+3227 => x"00000000",
+3228 => x"00000000",
+3229 => x"00000000",
+3230 => x"00000000",
+3231 => x"00000000",
+3232 => x"00000000",
+3233 => x"00000000",
+3234 => x"00000000",
+3235 => x"00000000",
+3236 => x"00000000",
+3237 => x"00000000",
+3238 => x"00000000",
+3239 => x"00000000",
+3240 => x"00000000",
+3241 => x"00000000",
+3242 => x"00000000",
+3243 => x"00000000",
+3244 => x"00000000",
+3245 => x"00000000",
+3246 => x"00000000",
+3247 => x"00000000",
+3248 => x"00000000",
+3249 => x"00000000",
+3250 => x"00000000",
+3251 => x"00002ad4",
+3252 => x"ffffffff",
+3253 => x"00000000",
+3254 => x"ffffffff",
+3255 => x"00000000",
+ others => x"00000000"
+);
+
+begin
+
+mem_busy<=mem_readEnable; -- we're done on the cycle after we serve the read request
+
+process (clk, areset)
+begin
+ if areset = '1' then
+ elsif (clk'event and clk = '1') then
+ if (mem_writeEnable = '1') then
+ ram(to_integer(unsigned(mem_addr(maxAddrBit downto minAddrBit)))) := mem_write;
+ end if;
+ if (mem_readEnable = '1') then
+ mem_read <= ram(to_integer(unsigned(mem_addr(maxAddrBit downto minAddrBit))));
+ end if;
+ end if;
+end process;
+
+
+
+
+end dram_arch;
diff --git a/zpu/hdl/example_medium/dram_hello.vhd b/zpu/hdl/example_medium/dram_hello.vhd
index 4f02cca..aae18fd 100644
--- a/zpu/hdl/example_medium/dram_hello.vhd
+++ b/zpu/hdl/example_medium/dram_hello.vhd
@@ -1,3107 +1,3107 @@
-library ieee;
-use ieee.std_logic_1164.all;
-use ieee.numeric_std.all;
-
-
-library work;
-use work.zpu_config.all;
-use work.zpupkg.all;
-
-entity dram is
-port (clk : in std_logic;
-areset : std_logic;
- mem_writeEnable : in std_logic;
- mem_readEnable : in std_logic;
- mem_addr : in std_logic_vector(maxAddrBit downto 0);
- mem_write : in std_logic_vector(wordSize-1 downto 0);
- mem_read : out std_logic_vector(wordSize-1 downto 0);
- mem_busy : out std_logic;
- mem_writeMask : in std_logic_vector(wordBytes-1 downto 0));
-end dram;
-
-architecture dram_arch of dram is
-
-
-type ram_type is array(natural range 0 to ((2**(maxAddrBitDRAM+1))/4)-1) of std_logic_vector(wordSize-1 downto 0);
-
-shared variable ram : ram_type :=
-(
-0 => x"0b0b0b0b",
-1 => x"82700b0b",
-2 => x"80cfd80c",
-3 => x"3a0b0b80",
-4 => x"c6d00400",
-5 => x"00000000",
-6 => x"00000000",
-7 => x"00000000",
-8 => x"80088408",
-9 => x"88080b0b",
-10 => x"80c7972d",
-11 => x"880c840c",
-12 => x"800c0400",
-13 => x"00000000",
-14 => x"00000000",
-15 => x"00000000",
-16 => x"71fd0608",
-17 => x"72830609",
-18 => x"81058205",
-19 => x"832b2a83",
-20 => x"ffff0652",
-21 => x"04000000",
-22 => x"00000000",
-23 => x"00000000",
-24 => x"71fd0608",
-25 => x"83ffff73",
-26 => x"83060981",
-27 => x"05820583",
-28 => x"2b2b0906",
-29 => x"7383ffff",
-30 => x"0b0b0b0b",
-31 => x"83a70400",
-32 => x"72098105",
-33 => x"72057373",
-34 => x"09060906",
-35 => x"73097306",
-36 => x"070a8106",
-37 => x"53510400",
-38 => x"00000000",
-39 => x"00000000",
-40 => x"72722473",
-41 => x"732e0753",
-42 => x"51040000",
-43 => x"00000000",
-44 => x"00000000",
-45 => x"00000000",
-46 => x"00000000",
-47 => x"00000000",
-48 => x"71737109",
-49 => x"71068106",
-50 => x"30720a10",
-51 => x"0a720a10",
-52 => x"0a31050a",
-53 => x"81065151",
-54 => x"53510400",
-55 => x"00000000",
-56 => x"72722673",
-57 => x"732e0753",
-58 => x"51040000",
-59 => x"00000000",
-60 => x"00000000",
-61 => x"00000000",
-62 => x"00000000",
-63 => x"00000000",
-64 => x"00000000",
-65 => x"00000000",
-66 => x"00000000",
-67 => x"00000000",
-68 => x"00000000",
-69 => x"00000000",
-70 => x"00000000",
-71 => x"00000000",
-72 => x"0b0b0b88",
-73 => x"c4040000",
-74 => x"00000000",
-75 => x"00000000",
-76 => x"00000000",
-77 => x"00000000",
-78 => x"00000000",
-79 => x"00000000",
-80 => x"720a722b",
-81 => x"0a535104",
-82 => x"00000000",
-83 => x"00000000",
-84 => x"00000000",
-85 => x"00000000",
-86 => x"00000000",
-87 => x"00000000",
-88 => x"72729f06",
-89 => x"0981050b",
-90 => x"0b0b88a7",
-91 => x"05040000",
-92 => x"00000000",
-93 => x"00000000",
-94 => x"00000000",
-95 => x"00000000",
-96 => x"72722aff",
-97 => x"739f062a",
-98 => x"0974090a",
-99 => x"8106ff05",
-100 => x"06075351",
-101 => x"04000000",
-102 => x"00000000",
-103 => x"00000000",
-104 => x"71715351",
-105 => x"020d0406",
-106 => x"73830609",
-107 => x"81058205",
-108 => x"832b0b2b",
-109 => x"0772fc06",
-110 => x"0c515104",
-111 => x"00000000",
-112 => x"72098105",
-113 => x"72050970",
-114 => x"81050906",
-115 => x"0a810653",
-116 => x"51040000",
-117 => x"00000000",
-118 => x"00000000",
-119 => x"00000000",
-120 => x"72098105",
-121 => x"72050970",
-122 => x"81050906",
-123 => x"0a098106",
-124 => x"53510400",
-125 => x"00000000",
-126 => x"00000000",
-127 => x"00000000",
-128 => x"71098105",
-129 => x"52040000",
-130 => x"00000000",
-131 => x"00000000",
-132 => x"00000000",
-133 => x"00000000",
-134 => x"00000000",
-135 => x"00000000",
-136 => x"72720981",
-137 => x"05055351",
-138 => x"04000000",
-139 => x"00000000",
-140 => x"00000000",
-141 => x"00000000",
-142 => x"00000000",
-143 => x"00000000",
-144 => x"72097206",
-145 => x"73730906",
-146 => x"07535104",
-147 => x"00000000",
-148 => x"00000000",
-149 => x"00000000",
-150 => x"00000000",
-151 => x"00000000",
-152 => x"71fc0608",
-153 => x"72830609",
-154 => x"81058305",
-155 => x"1010102a",
-156 => x"81ff0652",
-157 => x"04000000",
-158 => x"00000000",
-159 => x"00000000",
-160 => x"71fc0608",
-161 => x"0b0b80cf",
-162 => x"c4738306",
-163 => x"10100508",
-164 => x"060b0b0b",
-165 => x"88aa0400",
-166 => x"00000000",
-167 => x"00000000",
-168 => x"80088408",
-169 => x"88087575",
-170 => x"0b0b0b8b",
-171 => x"9f2d5050",
-172 => x"80085688",
-173 => x"0c840c80",
-174 => x"0c510400",
-175 => x"00000000",
-176 => x"80088408",
-177 => x"88087575",
-178 => x"0b0b0b8b",
-179 => x"e32d5050",
-180 => x"80085688",
-181 => x"0c840c80",
-182 => x"0c510400",
-183 => x"00000000",
-184 => x"72097081",
-185 => x"0509060a",
-186 => x"8106ff05",
-187 => x"70547106",
-188 => x"73097274",
-189 => x"05ff0506",
-190 => x"07515151",
-191 => x"04000000",
-192 => x"72097081",
-193 => x"0509060a",
-194 => x"098106ff",
-195 => x"05705471",
-196 => x"06730972",
-197 => x"7405ff05",
-198 => x"06075151",
-199 => x"51040000",
-200 => x"05ff0504",
-201 => x"00000000",
-202 => x"00000000",
-203 => x"00000000",
-204 => x"00000000",
-205 => x"00000000",
-206 => x"00000000",
-207 => x"00000000",
-208 => x"810b0b0b",
-209 => x"80cfd40c",
-210 => x"51040000",
-211 => x"00000000",
-212 => x"00000000",
-213 => x"00000000",
-214 => x"00000000",
-215 => x"00000000",
-216 => x"71810552",
-217 => x"04000000",
-218 => x"00000000",
-219 => x"00000000",
-220 => x"00000000",
-221 => x"00000000",
-222 => x"00000000",
-223 => x"00000000",
-224 => x"00000000",
-225 => x"00000000",
-226 => x"00000000",
-227 => x"00000000",
-228 => x"00000000",
-229 => x"00000000",
-230 => x"00000000",
-231 => x"00000000",
-232 => x"02840572",
-233 => x"10100552",
-234 => x"04000000",
-235 => x"00000000",
-236 => x"00000000",
-237 => x"00000000",
-238 => x"00000000",
-239 => x"00000000",
-240 => x"00000000",
-241 => x"00000000",
-242 => x"00000000",
-243 => x"00000000",
-244 => x"00000000",
-245 => x"00000000",
-246 => x"00000000",
-247 => x"00000000",
-248 => x"717105ff",
-249 => x"05715351",
-250 => x"020d0400",
-251 => x"00000000",
-252 => x"00000000",
-253 => x"00000000",
-254 => x"00000000",
-255 => x"00000000",
-256 => x"82c53f80",
-257 => x"c6d93f04",
-258 => x"10101010",
-259 => x"10101010",
-260 => x"10101010",
-261 => x"10101010",
-262 => x"10101010",
-263 => x"10101010",
-264 => x"10101010",
-265 => x"10101053",
-266 => x"51047381",
-267 => x"ff067383",
-268 => x"06098105",
-269 => x"83051010",
-270 => x"102b0772",
-271 => x"fc060c51",
-272 => x"51043c04",
-273 => x"72728072",
-274 => x"8106ff05",
-275 => x"09720605",
-276 => x"71105272",
-277 => x"0a100a53",
-278 => x"72ed3851",
-279 => x"51535104",
-280 => x"fe3d0d0b",
-281 => x"0b80dfc0",
-282 => x"08538413",
-283 => x"0870882a",
-284 => x"70810651",
-285 => x"52527080",
-286 => x"2ef03871",
-287 => x"81ff0680",
-288 => x"0c843d0d",
-289 => x"04ff3d0d",
-290 => x"0b0b80df",
-291 => x"c0085271",
-292 => x"0870882a",
-293 => x"81327081",
-294 => x"06515151",
-295 => x"70f13873",
-296 => x"720c833d",
-297 => x"0d0480cf",
-298 => x"d408802e",
-299 => x"a43880cf",
-300 => x"d808822e",
-301 => x"bd388380",
-302 => x"800b0b0b",
-303 => x"80dfc00c",
-304 => x"82a0800b",
-305 => x"80dfc40c",
-306 => x"8290800b",
-307 => x"80dfc80c",
-308 => x"04f88080",
-309 => x"80a40b0b",
-310 => x"0b80dfc0",
-311 => x"0cf88080",
-312 => x"82800b80",
-313 => x"dfc40cf8",
-314 => x"80808480",
-315 => x"0b80dfc8",
-316 => x"0c0480c0",
-317 => x"a8808c0b",
-318 => x"0b0b80df",
-319 => x"c00c80c0",
-320 => x"a880940b",
-321 => x"80dfc40c",
-322 => x"0b0b80cf",
-323 => x"8c0b80df",
-324 => x"c80c0470",
-325 => x"7080dfcc",
-326 => x"335170a7",
-327 => x"3880cfe0",
-328 => x"08700852",
-329 => x"5270802e",
-330 => x"94388412",
-331 => x"80cfe00c",
-332 => x"702d80cf",
-333 => x"e0087008",
-334 => x"525270ee",
-335 => x"38810b80",
-336 => x"dfcc3450",
-337 => x"50040470",
-338 => x"0b0b80df",
-339 => x"bc08802e",
-340 => x"8e380b0b",
-341 => x"0b0b800b",
-342 => x"802e0981",
-343 => x"06833850",
-344 => x"040b0b80",
-345 => x"dfbc510b",
-346 => x"0b0bf594",
-347 => x"3f500404",
-348 => x"fe3d0d89",
-349 => x"5380cf90",
-350 => x"5182c13f",
-351 => x"80cfa051",
-352 => x"82ba3f81",
-353 => x"0a0b80df",
-354 => x"d80cff0b",
-355 => x"80dfdc0c",
-356 => x"ff135372",
-357 => x"8025de38",
-358 => x"72800c84",
-359 => x"3d0d04fb",
-360 => x"3d0d7779",
-361 => x"55558056",
-362 => x"757524ab",
-363 => x"38807424",
-364 => x"9d388053",
-365 => x"73527451",
-366 => x"80e13f80",
-367 => x"08547580",
-368 => x"2e853880",
-369 => x"08305473",
-370 => x"800c873d",
-371 => x"0d047330",
-372 => x"76813257",
-373 => x"54dc3974",
-374 => x"30558156",
-375 => x"738025d2",
-376 => x"38ec39fa",
-377 => x"3d0d787a",
-378 => x"57558057",
-379 => x"767524a4",
-380 => x"38759f2c",
-381 => x"54815375",
-382 => x"74327431",
-383 => x"5274519b",
-384 => x"3f800854",
-385 => x"76802e85",
-386 => x"38800830",
-387 => x"5473800c",
-388 => x"883d0d04",
-389 => x"74305581",
-390 => x"57d739fc",
-391 => x"3d0d7678",
-392 => x"53548153",
-393 => x"80747326",
-394 => x"52557280",
-395 => x"2e983870",
-396 => x"802eab38",
-397 => x"807224a6",
-398 => x"38711073",
-399 => x"10757226",
-400 => x"53545272",
-401 => x"ea387351",
-402 => x"78833874",
-403 => x"5170800c",
-404 => x"863d0d04",
-405 => x"720a100a",
-406 => x"720a100a",
-407 => x"53537280",
-408 => x"2ee43871",
-409 => x"7426ed38",
-410 => x"73723175",
-411 => x"7407740a",
-412 => x"100a740a",
-413 => x"100a5555",
-414 => x"5654e339",
-415 => x"f73d0d7c",
-416 => x"70525380",
-417 => x"f93f7254",
-418 => x"80085580",
-419 => x"cfb05681",
-420 => x"57800881",
-421 => x"055a8b3d",
-422 => x"e4115953",
-423 => x"8259f413",
-424 => x"527b8811",
-425 => x"08525381",
-426 => x"b23f8008",
-427 => x"30708008",
-428 => x"079f2c8a",
-429 => x"07800c53",
-430 => x"8b3d0d04",
-431 => x"f63d0d7c",
-432 => x"80cfe408",
-433 => x"71535553",
-434 => x"b53f7255",
-435 => x"80085680",
-436 => x"cfb05781",
-437 => x"58800881",
-438 => x"055b8c3d",
-439 => x"e4115a53",
-440 => x"825af413",
-441 => x"52881408",
-442 => x"5180f03f",
-443 => x"80083070",
-444 => x"8008079f",
-445 => x"2c8a0780",
-446 => x"0c548c3d",
-447 => x"0d047070",
-448 => x"70707570",
-449 => x"71830653",
-450 => x"555270b4",
-451 => x"38717008",
-452 => x"7009f7fb",
-453 => x"fdff1206",
-454 => x"f8848281",
-455 => x"80065452",
-456 => x"53719b38",
-457 => x"84137008",
-458 => x"7009f7fb",
-459 => x"fdff1206",
-460 => x"f8848281",
-461 => x"80065452",
-462 => x"5371802e",
-463 => x"e7387252",
-464 => x"71335372",
-465 => x"802e8a38",
-466 => x"81127033",
-467 => x"545272f8",
-468 => x"38717431",
-469 => x"800c5050",
-470 => x"505004f2",
-471 => x"3d0d6062",
-472 => x"88110870",
-473 => x"58565f5a",
-474 => x"73802e81",
-475 => x"8c388c1a",
-476 => x"2270832a",
-477 => x"81328106",
-478 => x"56587486",
-479 => x"38901a08",
-480 => x"91387951",
-481 => x"90b73fff",
-482 => x"55800880",
-483 => x"ec388c1a",
-484 => x"22587d08",
-485 => x"55807883",
-486 => x"ffff0670",
-487 => x"0a100a81",
-488 => x"06415c57",
-489 => x"7e772e80",
-490 => x"d7387690",
-491 => x"38740884",
-492 => x"16088817",
-493 => x"57585676",
-494 => x"802ef238",
-495 => x"76548880",
-496 => x"77278438",
-497 => x"88805473",
-498 => x"5375529c",
-499 => x"1a0851a4",
-500 => x"1a085877",
-501 => x"2d800b80",
-502 => x"082582e0",
-503 => x"38800816",
-504 => x"77800831",
-505 => x"7f880508",
-506 => x"80083170",
-507 => x"6188050c",
-508 => x"5b585678",
-509 => x"ffb43880",
-510 => x"5574800c",
-511 => x"903d0d04",
-512 => x"7a813281",
-513 => x"06774056",
-514 => x"75802e81",
-515 => x"bd387690",
-516 => x"38740884",
-517 => x"16088817",
-518 => x"57585976",
-519 => x"802ef238",
-520 => x"881a0878",
-521 => x"83ffff06",
-522 => x"70892a81",
-523 => x"06565956",
-524 => x"73802e82",
-525 => x"f8387577",
-526 => x"278b3877",
-527 => x"872a8106",
-528 => x"5c7b82b5",
-529 => x"38767627",
-530 => x"83387656",
-531 => x"75537852",
-532 => x"79085185",
-533 => x"833f881a",
-534 => x"08763188",
-535 => x"1b0c7908",
-536 => x"167a0c76",
-537 => x"56751977",
-538 => x"77317f88",
-539 => x"05087831",
-540 => x"70618805",
-541 => x"0c415859",
-542 => x"7e802efe",
-543 => x"fa388c1a",
-544 => x"2258ff8a",
-545 => x"39787954",
-546 => x"7c537b52",
-547 => x"5684c93f",
-548 => x"881a0879",
-549 => x"31881b0c",
-550 => x"7908197a",
-551 => x"0c7c7631",
-552 => x"5d7c8e38",
-553 => x"79518ff2",
-554 => x"3f800881",
-555 => x"8f388008",
-556 => x"5f751c77",
-557 => x"77317f88",
-558 => x"05087831",
-559 => x"70618805",
-560 => x"0c5d585c",
-561 => x"7a802efe",
-562 => x"ae387681",
-563 => x"83387408",
-564 => x"84160888",
-565 => x"1757585c",
-566 => x"76802ef2",
-567 => x"3876538a",
-568 => x"527b5182",
-569 => x"d33f8008",
-570 => x"7c318105",
-571 => x"5d800884",
-572 => x"3881175d",
-573 => x"815f7c59",
-574 => x"767d2783",
-575 => x"38765994",
-576 => x"1a08881b",
-577 => x"08115758",
-578 => x"807a085c",
-579 => x"54901a08",
-580 => x"7b278338",
-581 => x"81547579",
-582 => x"25843873",
-583 => x"ba387779",
-584 => x"24fee238",
-585 => x"77537b52",
-586 => x"9c1a0851",
-587 => x"a41a0859",
-588 => x"782d8008",
-589 => x"56800880",
-590 => x"24fee238",
-591 => x"8c1a2280",
-592 => x"c0075e7d",
-593 => x"8c1b23ff",
-594 => x"5574800c",
-595 => x"903d0d04",
-596 => x"7effa338",
-597 => x"ff873975",
-598 => x"537b527a",
-599 => x"5182f93f",
-600 => x"7908167a",
-601 => x"0c79518e",
-602 => x"b13f8008",
-603 => x"cf387c76",
-604 => x"315d7cfe",
-605 => x"bc38feac",
-606 => x"39901a08",
-607 => x"7a087131",
-608 => x"78117056",
-609 => x"5a575280",
-610 => x"cfe40851",
-611 => x"84943f80",
-612 => x"08802eff",
-613 => x"a7388008",
-614 => x"901b0c80",
-615 => x"08167a0c",
-616 => x"77941b0c",
-617 => x"76881b0c",
-618 => x"7656fd99",
-619 => x"39790858",
-620 => x"901a0878",
-621 => x"27833881",
-622 => x"54757727",
-623 => x"843873b3",
-624 => x"38941a08",
-625 => x"54737726",
-626 => x"80d33873",
-627 => x"5378529c",
-628 => x"1a0851a4",
-629 => x"1a085877",
-630 => x"2d800856",
-631 => x"80088024",
-632 => x"fd83388c",
-633 => x"1a2280c0",
-634 => x"075e7d8c",
-635 => x"1b23ff55",
-636 => x"fed73975",
-637 => x"53785277",
-638 => x"5181dd3f",
-639 => x"7908167a",
-640 => x"0c79518d",
-641 => x"953f8008",
-642 => x"802efcd9",
-643 => x"388c1a22",
-644 => x"80c0075e",
-645 => x"7d8c1b23",
-646 => x"ff55fead",
-647 => x"39767754",
-648 => x"79537852",
-649 => x"5681b13f",
-650 => x"881a0877",
-651 => x"31881b0c",
-652 => x"7908177a",
-653 => x"0cfcae39",
-654 => x"fa3d0d7a",
-655 => x"79028805",
-656 => x"a7053355",
-657 => x"53548374",
-658 => x"2780df38",
-659 => x"71830651",
-660 => x"7080d738",
-661 => x"71715755",
-662 => x"83517582",
-663 => x"802913ff",
-664 => x"12525670",
-665 => x"8025f338",
-666 => x"837427bc",
-667 => x"38740876",
-668 => x"327009f7",
-669 => x"fbfdff12",
-670 => x"06f88482",
-671 => x"81800651",
-672 => x"5170802e",
-673 => x"98387451",
-674 => x"80527033",
-675 => x"5772772e",
-676 => x"b9388111",
-677 => x"81135351",
-678 => x"837227ee",
-679 => x"38fc1484",
-680 => x"16565473",
-681 => x"8326c638",
-682 => x"7452ff14",
-683 => x"5170ff2e",
-684 => x"97387133",
-685 => x"5472742e",
-686 => x"98388112",
-687 => x"ff125252",
-688 => x"70ff2e09",
-689 => x"8106eb38",
-690 => x"80517080",
-691 => x"0c883d0d",
-692 => x"0471800c",
-693 => x"883d0d04",
-694 => x"fa3d0d78",
-695 => x"7a7c7272",
-696 => x"72595755",
-697 => x"58565774",
-698 => x"7727b238",
-699 => x"75155176",
-700 => x"7127aa38",
-701 => x"707618ff",
-702 => x"18535353",
-703 => x"70ff2e96",
-704 => x"38ff12ff",
-705 => x"14545272",
-706 => x"337234ff",
-707 => x"115170ff",
-708 => x"2e098106",
-709 => x"ec387680",
-710 => x"0c883d0d",
-711 => x"048f7627",
-712 => x"80e63874",
-713 => x"77078306",
-714 => x"517080dc",
-715 => x"38767552",
-716 => x"53707084",
-717 => x"05520873",
-718 => x"70840555",
-719 => x"0c727170",
-720 => x"84055308",
-721 => x"71708405",
-722 => x"530c7170",
-723 => x"84055308",
-724 => x"71708405",
-725 => x"530c7170",
-726 => x"84055308",
-727 => x"71708405",
-728 => x"530cf015",
-729 => x"5553738f",
-730 => x"26c73883",
-731 => x"74279538",
-732 => x"70708405",
-733 => x"52087370",
-734 => x"8405550c",
-735 => x"fc145473",
-736 => x"8326ed38",
-737 => x"72715452",
-738 => x"ff145170",
-739 => x"ff2eff86",
-740 => x"38727081",
-741 => x"05543372",
-742 => x"70810554",
-743 => x"34ff1151",
-744 => x"ea39ef3d",
-745 => x"0d636567",
-746 => x"405d427b",
-747 => x"802e8582",
-748 => x"386151a9",
-749 => x"e73ff81c",
-750 => x"70841208",
-751 => x"70fc0670",
-752 => x"628b0570",
-753 => x"f8064159",
-754 => x"455c5f41",
-755 => x"57967427",
-756 => x"82c53880",
-757 => x"7b247e7c",
-758 => x"26075880",
-759 => x"5477742e",
-760 => x"09810682",
-761 => x"ab38787b",
-762 => x"2581fe38",
-763 => x"781780d7",
-764 => x"a00b8805",
-765 => x"085b5679",
-766 => x"762e84c5",
-767 => x"38841608",
-768 => x"70fe0617",
-769 => x"84110881",
-770 => x"06415555",
-771 => x"7e828d38",
-772 => x"74fc0658",
-773 => x"79762e84",
-774 => x"e3387818",
-775 => x"5f7e7b25",
-776 => x"81ff387c",
-777 => x"81065473",
-778 => x"82c13876",
-779 => x"77083184",
-780 => x"1108fc06",
-781 => x"56577580",
-782 => x"2e913879",
-783 => x"762e84f0",
-784 => x"38741819",
-785 => x"58777b25",
-786 => x"84913876",
-787 => x"802e829b",
-788 => x"38781556",
-789 => x"7a762482",
-790 => x"92388c17",
-791 => x"08881808",
-792 => x"718c120c",
-793 => x"88120c5e",
-794 => x"75598817",
-795 => x"61fc055b",
-796 => x"5679a426",
-797 => x"85ff387b",
-798 => x"76595593",
-799 => x"7a2780c9",
-800 => x"387b7084",
-801 => x"055d087c",
-802 => x"56760c74",
-803 => x"70840556",
-804 => x"088c180c",
-805 => x"9017589b",
-806 => x"7a27ae38",
-807 => x"74708405",
-808 => x"5608780c",
-809 => x"74708405",
-810 => x"56089418",
-811 => x"0c981758",
-812 => x"a37a2795",
-813 => x"38747084",
-814 => x"05560878",
-815 => x"0c747084",
-816 => x"0556089c",
-817 => x"180ca017",
-818 => x"58747084",
-819 => x"05560875",
-820 => x"5f787084",
-821 => x"055a0c77",
-822 => x"7e708405",
-823 => x"40087170",
-824 => x"8405530c",
-825 => x"7e08710c",
-826 => x"5d787b31",
-827 => x"56758f26",
-828 => x"80c93884",
-829 => x"17088106",
-830 => x"79078418",
-831 => x"0c781784",
-832 => x"11088107",
-833 => x"84120c5b",
-834 => x"6151a791",
-835 => x"3f881754",
-836 => x"73800c93",
-837 => x"3d0d0490",
-838 => x"5bfdb839",
-839 => x"7756fe83",
-840 => x"398c1608",
-841 => x"88170871",
-842 => x"8c120c88",
-843 => x"120c587e",
-844 => x"707c3157",
-845 => x"598f7627",
-846 => x"ffb9387a",
-847 => x"17841808",
-848 => x"81067c07",
-849 => x"84190c76",
-850 => x"81078412",
-851 => x"0c761184",
-852 => x"11088107",
-853 => x"84120c5b",
-854 => x"88055261",
-855 => x"518fda3f",
-856 => x"6151a6b9",
-857 => x"3f881754",
-858 => x"ffa6397d",
-859 => x"52615197",
-860 => x"d73f8008",
-861 => x"5a800880",
-862 => x"2e81ab38",
-863 => x"8008f805",
-864 => x"60840508",
-865 => x"fe066105",
-866 => x"58557477",
-867 => x"2e83f238",
-868 => x"fc195877",
-869 => x"a42681b0",
-870 => x"387b8008",
-871 => x"56579378",
-872 => x"2780dc38",
-873 => x"7b707084",
-874 => x"05520880",
-875 => x"08708405",
-876 => x"800c0c80",
-877 => x"08717084",
-878 => x"0553085d",
-879 => x"567b7670",
-880 => x"8405580c",
-881 => x"579b7827",
-882 => x"b6387670",
-883 => x"84055808",
-884 => x"75708405",
-885 => x"570c7670",
-886 => x"84055808",
-887 => x"75708405",
-888 => x"570ca378",
-889 => x"27993876",
-890 => x"70840558",
-891 => x"08757084",
-892 => x"05570c76",
-893 => x"70840558",
-894 => x"08757084",
-895 => x"05570c76",
-896 => x"70840558",
-897 => x"08775e75",
-898 => x"70840557",
-899 => x"0c747d70",
-900 => x"84055f08",
-901 => x"71708405",
-902 => x"530c7d08",
-903 => x"710c5f7b",
-904 => x"5261518e",
-905 => x"943f6151",
-906 => x"a4f33f79",
-907 => x"800c933d",
-908 => x"0d047d52",
-909 => x"61519690",
-910 => x"3f800880",
-911 => x"0c933d0d",
-912 => x"04841608",
-913 => x"55fbc939",
-914 => x"77537b52",
-915 => x"800851a2",
-916 => x"a53f7b52",
-917 => x"61518de1",
-918 => x"3fcc398c",
-919 => x"16088817",
-920 => x"08718c12",
-921 => x"0c88120c",
-922 => x"5d8c1708",
-923 => x"88180871",
-924 => x"8c120c88",
-925 => x"120c5977",
-926 => x"59fbef39",
-927 => x"7818901c",
-928 => x"40557e75",
-929 => x"24fb9c38",
-930 => x"7a177080",
-931 => x"d7a00b88",
-932 => x"050c757c",
-933 => x"31810784",
-934 => x"120c5684",
-935 => x"17088106",
-936 => x"7b078418",
-937 => x"0c6151a3",
-938 => x"f43f8817",
-939 => x"54fce139",
-940 => x"74181990",
-941 => x"1c5e5a7c",
-942 => x"7a24fb8f",
-943 => x"388c1708",
-944 => x"88180871",
-945 => x"8c120c88",
-946 => x"120c5e88",
-947 => x"1761fc05",
-948 => x"575975a4",
-949 => x"2681b638",
-950 => x"7b795955",
-951 => x"93762780",
-952 => x"c9387b70",
-953 => x"84055d08",
-954 => x"7c56790c",
-955 => x"74708405",
-956 => x"56088c18",
-957 => x"0c901758",
-958 => x"9b7627ae",
-959 => x"38747084",
-960 => x"05560878",
-961 => x"0c747084",
-962 => x"05560894",
-963 => x"180c9817",
-964 => x"58a37627",
-965 => x"95387470",
-966 => x"84055608",
-967 => x"780c7470",
-968 => x"84055608",
-969 => x"9c180ca0",
-970 => x"17587470",
-971 => x"84055608",
-972 => x"75417870",
-973 => x"84055a0c",
-974 => x"77607084",
-975 => x"05420871",
-976 => x"70840553",
-977 => x"0c600871",
-978 => x"0c5e7a17",
-979 => x"7080d7a0",
-980 => x"0b88050c",
-981 => x"7a7c3181",
-982 => x"0784120c",
-983 => x"58841708",
-984 => x"81067b07",
-985 => x"84180c61",
-986 => x"51a2b23f",
-987 => x"78547380",
-988 => x"0c933d0d",
-989 => x"0479537b",
-990 => x"5275519f",
-991 => x"f93ffae9",
-992 => x"39841508",
-993 => x"fc061960",
-994 => x"5859fadd",
-995 => x"3975537b",
-996 => x"5278519f",
-997 => x"e13f7a17",
-998 => x"7080d7a0",
-999 => x"0b88050c",
-1000 => x"7a7c3181",
-1001 => x"0784120c",
-1002 => x"58841708",
-1003 => x"81067b07",
-1004 => x"84180c61",
-1005 => x"51a1e63f",
-1006 => x"7854ffb2",
-1007 => x"39fa3d0d",
-1008 => x"7880cfe4",
-1009 => x"085455b8",
-1010 => x"1308802e",
-1011 => x"81af388c",
-1012 => x"15227083",
-1013 => x"ffff0670",
-1014 => x"832a8132",
-1015 => x"81065555",
-1016 => x"5672802e",
-1017 => x"80da3873",
-1018 => x"842a8132",
-1019 => x"810657ff",
-1020 => x"537680f2",
-1021 => x"3873822a",
-1022 => x"81065473",
-1023 => x"802eb938",
-1024 => x"b0150854",
-1025 => x"73802e9c",
-1026 => x"3880c015",
-1027 => x"5373732e",
-1028 => x"8f387352",
-1029 => x"80cfe408",
-1030 => x"518a9e3f",
-1031 => x"8c152256",
-1032 => x"76b0160c",
-1033 => x"75db0657",
-1034 => x"768c1623",
-1035 => x"800b8416",
-1036 => x"0c901508",
-1037 => x"750c7656",
-1038 => x"75880754",
-1039 => x"738c1623",
-1040 => x"90150880",
-1041 => x"2ebf388c",
-1042 => x"15227081",
-1043 => x"06555373",
-1044 => x"9c38720a",
-1045 => x"100a8106",
-1046 => x"56758538",
-1047 => x"94150854",
-1048 => x"7388160c",
-1049 => x"80537280",
-1050 => x"0c883d0d",
-1051 => x"04800b88",
-1052 => x"160c9415",
-1053 => x"08309816",
-1054 => x"0c8053ea",
-1055 => x"39725182",
-1056 => x"a63ffecb",
-1057 => x"3974518f",
-1058 => x"bc3f8c15",
-1059 => x"22708106",
-1060 => x"55537380",
-1061 => x"2effbb38",
-1062 => x"d439f83d",
-1063 => x"0d7a5776",
-1064 => x"802e8197",
-1065 => x"3880cfe4",
-1066 => x"0854b814",
-1067 => x"08802e80",
-1068 => x"eb388c17",
-1069 => x"2270902b",
-1070 => x"70902c70",
-1071 => x"832a8132",
-1072 => x"81065b5b",
-1073 => x"57557780",
-1074 => x"cb389017",
-1075 => x"08567580",
-1076 => x"2e80c138",
-1077 => x"76087631",
-1078 => x"76780c79",
-1079 => x"83065555",
-1080 => x"73853894",
-1081 => x"17085877",
-1082 => x"88180c80",
-1083 => x"7525a538",
-1084 => x"74537552",
-1085 => x"9c170851",
-1086 => x"a4170854",
-1087 => x"732d800b",
-1088 => x"80082580",
-1089 => x"c9388008",
-1090 => x"16758008",
-1091 => x"31565674",
-1092 => x"8024dd38",
-1093 => x"800b800c",
-1094 => x"8a3d0d04",
-1095 => x"73518187",
-1096 => x"3f8c1722",
-1097 => x"70902b70",
-1098 => x"902c7083",
-1099 => x"2a813281",
-1100 => x"065b5b57",
-1101 => x"5577dd38",
-1102 => x"ff9039a1",
-1103 => x"9a5280cf",
-1104 => x"e408518c",
-1105 => x"d03f8008",
-1106 => x"800c8a3d",
-1107 => x"0d048c17",
-1108 => x"2280c007",
-1109 => x"58778c18",
-1110 => x"23ff0b80",
-1111 => x"0c8a3d0d",
-1112 => x"04fa3d0d",
-1113 => x"797080dc",
-1114 => x"298c1154",
-1115 => x"7a535657",
-1116 => x"8fd63f80",
-1117 => x"08800855",
-1118 => x"56800880",
-1119 => x"2ea23880",
-1120 => x"088c0554",
-1121 => x"800b8008",
-1122 => x"0c768008",
-1123 => x"84050c73",
-1124 => x"80088805",
-1125 => x"0c745380",
-1126 => x"5273519c",
-1127 => x"f53f7554",
-1128 => x"73800c88",
-1129 => x"3d0d0470",
-1130 => x"707074a8",
-1131 => x"e60bbc12",
-1132 => x"0c53810b",
-1133 => x"b8140c80",
-1134 => x"0b84dc14",
-1135 => x"0c830b84",
-1136 => x"e0140c84",
-1137 => x"e81384e4",
-1138 => x"140c8413",
-1139 => x"08518070",
-1140 => x"720c7084",
-1141 => x"130c7088",
-1142 => x"130c5284",
-1143 => x"0b8c1223",
-1144 => x"718e1223",
-1145 => x"7190120c",
-1146 => x"7194120c",
-1147 => x"7198120c",
-1148 => x"709c120c",
-1149 => x"80c1d50b",
-1150 => x"a0120c80",
-1151 => x"c2a10ba4",
-1152 => x"120c80c3",
-1153 => x"9d0ba812",
-1154 => x"0c80c3ee",
-1155 => x"0bac120c",
-1156 => x"88130872",
-1157 => x"710c7284",
-1158 => x"120c7288",
-1159 => x"120c5189",
-1160 => x"0b8c1223",
-1161 => x"810b8e12",
-1162 => x"23719012",
-1163 => x"0c719412",
-1164 => x"0c719812",
-1165 => x"0c709c12",
-1166 => x"0c80c1d5",
-1167 => x"0ba0120c",
-1168 => x"80c2a10b",
-1169 => x"a4120c80",
-1170 => x"c39d0ba8",
-1171 => x"120c80c3",
-1172 => x"ee0bac12",
-1173 => x"0c8c1308",
-1174 => x"72710c72",
-1175 => x"84120c72",
-1176 => x"88120c51",
-1177 => x"8a0b8c12",
-1178 => x"23820b8e",
-1179 => x"12237190",
-1180 => x"120c7194",
-1181 => x"120c7198",
-1182 => x"120c709c",
-1183 => x"120c80c1",
-1184 => x"d50ba012",
-1185 => x"0c80c2a1",
-1186 => x"0ba4120c",
-1187 => x"80c39d0b",
-1188 => x"a8120c80",
-1189 => x"c3ee0bac",
-1190 => x"120c5050",
-1191 => x"5004f83d",
-1192 => x"0d7a80cf",
-1193 => x"e408b811",
-1194 => x"08575758",
-1195 => x"7481ec38",
-1196 => x"a8e60bbc",
-1197 => x"170c810b",
-1198 => x"b8170c74",
-1199 => x"84dc170c",
-1200 => x"830b84e0",
-1201 => x"170c84e8",
-1202 => x"1684e417",
-1203 => x"0c841608",
-1204 => x"75710c75",
-1205 => x"84120c75",
-1206 => x"88120c59",
-1207 => x"840b8c1a",
-1208 => x"23748e1a",
-1209 => x"2374901a",
-1210 => x"0c74941a",
-1211 => x"0c74981a",
-1212 => x"0c789c1a",
-1213 => x"0c80c1d5",
-1214 => x"0ba01a0c",
-1215 => x"80c2a10b",
-1216 => x"a41a0c80",
-1217 => x"c39d0ba8",
-1218 => x"1a0c80c3",
-1219 => x"ee0bac1a",
-1220 => x"0c881608",
-1221 => x"75710c75",
-1222 => x"84120c75",
-1223 => x"88120c57",
-1224 => x"890b8c18",
-1225 => x"23810b8e",
-1226 => x"18237490",
-1227 => x"180c7494",
-1228 => x"180c7498",
-1229 => x"180c769c",
-1230 => x"180c80c1",
-1231 => x"d50ba018",
-1232 => x"0c80c2a1",
-1233 => x"0ba4180c",
-1234 => x"80c39d0b",
-1235 => x"a8180c80",
-1236 => x"c3ee0bac",
-1237 => x"180c8c16",
-1238 => x"0875710c",
-1239 => x"7584120c",
-1240 => x"7588120c",
-1241 => x"548a0b8c",
-1242 => x"1523820b",
-1243 => x"8e152374",
-1244 => x"90150c74",
-1245 => x"94150c74",
-1246 => x"98150c73",
-1247 => x"9c150c80",
-1248 => x"c1d50ba0",
-1249 => x"150c80c2",
-1250 => x"a10ba415",
-1251 => x"0c80c39d",
-1252 => x"0ba8150c",
-1253 => x"80c3ee0b",
-1254 => x"ac150c84",
-1255 => x"dc168811",
-1256 => x"08841208",
-1257 => x"ff055757",
-1258 => x"57807524",
-1259 => x"9f388c16",
-1260 => x"2270902b",
-1261 => x"70902c51",
-1262 => x"55597380",
-1263 => x"2e80ed38",
-1264 => x"80dc16ff",
-1265 => x"16565674",
-1266 => x"8025e338",
-1267 => x"76085574",
-1268 => x"802e8f38",
-1269 => x"74881108",
-1270 => x"841208ff",
-1271 => x"05575757",
-1272 => x"c83982fc",
-1273 => x"5277518a",
-1274 => x"df3f8008",
-1275 => x"80085556",
-1276 => x"8008802e",
-1277 => x"a3388008",
-1278 => x"8c057580",
-1279 => x"080c5484",
-1280 => x"0b800884",
-1281 => x"050c7380",
-1282 => x"0888050c",
-1283 => x"82f05374",
-1284 => x"52735197",
-1285 => x"fd3f7554",
-1286 => x"7374780c",
-1287 => x"5573ffb4",
-1288 => x"388c780c",
-1289 => x"800b800c",
-1290 => x"8a3d0d04",
-1291 => x"810b8c17",
-1292 => x"2373760c",
-1293 => x"7388170c",
-1294 => x"7384170c",
-1295 => x"7390170c",
-1296 => x"7394170c",
-1297 => x"7398170c",
-1298 => x"ff0b8e17",
-1299 => x"2373b017",
-1300 => x"0c73b417",
-1301 => x"0c7380c4",
-1302 => x"170c7380",
-1303 => x"c8170c75",
-1304 => x"800c8a3d",
-1305 => x"0d047070",
-1306 => x"a19a5273",
-1307 => x"5186a63f",
-1308 => x"50500470",
-1309 => x"70a19a52",
-1310 => x"80cfe408",
-1311 => x"5186963f",
-1312 => x"505004fb",
-1313 => x"3d0d7770",
-1314 => x"52569890",
-1315 => x"3f80d7a0",
-1316 => x"0b880508",
-1317 => x"841108fc",
-1318 => x"06707b31",
-1319 => x"9fef05e0",
-1320 => x"8006e080",
-1321 => x"05525555",
-1322 => x"a0807524",
-1323 => x"94388052",
-1324 => x"755197ea",
-1325 => x"3f80d7a8",
-1326 => x"08145372",
-1327 => x"80082e8f",
-1328 => x"38755197",
-1329 => x"d83f8053",
-1330 => x"72800c87",
-1331 => x"3d0d0474",
-1332 => x"30527551",
-1333 => x"97c83f80",
-1334 => x"08ff2ea8",
-1335 => x"3880d7a0",
-1336 => x"0b880508",
-1337 => x"74763181",
-1338 => x"0784120c",
-1339 => x"5380d6e4",
-1340 => x"08753180",
-1341 => x"d6e40c75",
-1342 => x"5197a23f",
-1343 => x"810b800c",
-1344 => x"873d0d04",
-1345 => x"80527551",
-1346 => x"97943f80",
-1347 => x"d7a00b88",
-1348 => x"05088008",
-1349 => x"71315454",
-1350 => x"8f7325ff",
-1351 => x"a4388008",
-1352 => x"80d79408",
-1353 => x"3180d6e4",
-1354 => x"0c728107",
-1355 => x"84150c75",
-1356 => x"5196ea3f",
-1357 => x"8053ff90",
-1358 => x"39f73d0d",
-1359 => x"7b7d545a",
-1360 => x"72802e82",
-1361 => x"83387951",
-1362 => x"96d23ff8",
-1363 => x"13841108",
-1364 => x"70fe0670",
-1365 => x"13841108",
-1366 => x"fc065c57",
-1367 => x"58545780",
-1368 => x"d7a80874",
-1369 => x"2e82de38",
-1370 => x"7784150c",
-1371 => x"80738106",
-1372 => x"56597479",
-1373 => x"2e81d538",
-1374 => x"77148411",
-1375 => x"08810656",
-1376 => x"5374a038",
-1377 => x"77165678",
-1378 => x"81e63888",
-1379 => x"14085574",
-1380 => x"80d7a82e",
-1381 => x"82f9388c",
-1382 => x"1408708c",
-1383 => x"170c7588",
-1384 => x"120c5875",
-1385 => x"81078418",
-1386 => x"0c751776",
-1387 => x"710c5478",
-1388 => x"81913883",
-1389 => x"ff762781",
-1390 => x"c8387589",
-1391 => x"2a76832a",
-1392 => x"54547380",
-1393 => x"2ebf3875",
-1394 => x"862ab805",
-1395 => x"53847427",
-1396 => x"b43880db",
-1397 => x"14539474",
-1398 => x"27ab3875",
-1399 => x"8c2a80ee",
-1400 => x"055380d4",
-1401 => x"74279e38",
-1402 => x"758f2a80",
-1403 => x"f7055382",
-1404 => x"d4742791",
-1405 => x"3875922a",
-1406 => x"80fc0553",
-1407 => x"8ad47427",
-1408 => x"843880fe",
-1409 => x"53721010",
-1410 => x"1080d7a0",
-1411 => x"05881108",
-1412 => x"55557375",
-1413 => x"2e82bf38",
-1414 => x"841408fc",
-1415 => x"06597579",
-1416 => x"278d3888",
-1417 => x"14085473",
-1418 => x"752e0981",
-1419 => x"06ea388c",
-1420 => x"1408708c",
-1421 => x"190c7488",
-1422 => x"190c7788",
-1423 => x"120c5576",
-1424 => x"8c150c79",
-1425 => x"5194d63f",
-1426 => x"8b3d0d04",
-1427 => x"76087771",
-1428 => x"31587605",
-1429 => x"88180856",
-1430 => x"567480d7",
-1431 => x"a82e80e0",
-1432 => x"388c1708",
-1433 => x"708c170c",
-1434 => x"7588120c",
-1435 => x"53fe8939",
-1436 => x"8814088c",
-1437 => x"1508708c",
-1438 => x"130c5988",
-1439 => x"190cfea3",
-1440 => x"3975832a",
-1441 => x"70545480",
-1442 => x"74248198",
-1443 => x"3872822c",
-1444 => x"81712b80",
-1445 => x"d7a40807",
-1446 => x"80d7a00b",
-1447 => x"84050c74",
-1448 => x"10101080",
-1449 => x"d7a00588",
-1450 => x"1108718c",
-1451 => x"1b0c7088",
-1452 => x"1b0c7988",
-1453 => x"130c565a",
-1454 => x"55768c15",
-1455 => x"0cff8439",
-1456 => x"8159fdb4",
-1457 => x"39771673",
-1458 => x"81065455",
-1459 => x"72983876",
-1460 => x"08777131",
-1461 => x"5875058c",
-1462 => x"18088819",
-1463 => x"08718c12",
-1464 => x"0c88120c",
-1465 => x"55557481",
-1466 => x"0784180c",
-1467 => x"7680d7a0",
-1468 => x"0b88050c",
-1469 => x"80d79c08",
-1470 => x"7526fec7",
-1471 => x"3880d798",
-1472 => x"08527951",
-1473 => x"fafd3f79",
-1474 => x"5193923f",
-1475 => x"feba3981",
-1476 => x"778c170c",
-1477 => x"7788170c",
-1478 => x"758c190c",
-1479 => x"7588190c",
-1480 => x"59fd8039",
-1481 => x"83147082",
-1482 => x"2c81712b",
-1483 => x"80d7a408",
-1484 => x"0780d7a0",
-1485 => x"0b84050c",
-1486 => x"75101010",
-1487 => x"80d7a005",
-1488 => x"88110871",
-1489 => x"8c1c0c70",
-1490 => x"881c0c7a",
-1491 => x"88130c57",
-1492 => x"5b5653fe",
-1493 => x"e4398073",
-1494 => x"24a33872",
-1495 => x"822c8171",
-1496 => x"2b80d7a4",
-1497 => x"080780d7",
-1498 => x"a00b8405",
-1499 => x"0c58748c",
-1500 => x"180c7388",
-1501 => x"180c7688",
-1502 => x"160cfdc3",
-1503 => x"39831370",
-1504 => x"822c8171",
-1505 => x"2b80d7a4",
-1506 => x"080780d7",
-1507 => x"a00b8405",
-1508 => x"0c5953da",
-1509 => x"39f93d0d",
-1510 => x"797b5853",
-1511 => x"800b80cf",
-1512 => x"e4085356",
-1513 => x"72722ebc",
-1514 => x"3884dc13",
-1515 => x"5574762e",
-1516 => x"b3388815",
-1517 => x"08841608",
-1518 => x"ff055454",
-1519 => x"80732499",
-1520 => x"388c1422",
-1521 => x"70902b53",
-1522 => x"587180d4",
-1523 => x"3880dc14",
-1524 => x"ff145454",
-1525 => x"728025e9",
-1526 => x"38740855",
-1527 => x"74d43880",
-1528 => x"cfe40852",
-1529 => x"84dc1255",
-1530 => x"74802ead",
-1531 => x"38881508",
-1532 => x"841608ff",
-1533 => x"05545480",
-1534 => x"73249838",
-1535 => x"8c142270",
-1536 => x"902b5358",
-1537 => x"71ad3880",
-1538 => x"dc14ff14",
-1539 => x"54547280",
-1540 => x"25ea3874",
-1541 => x"085574d5",
-1542 => x"3875800c",
-1543 => x"893d0d04",
-1544 => x"7351762d",
-1545 => x"75800807",
-1546 => x"80dc15ff",
-1547 => x"15555556",
-1548 => x"ffa23973",
-1549 => x"51762d75",
-1550 => x"80080780",
-1551 => x"dc15ff15",
-1552 => x"555556ca",
-1553 => x"39ea3d0d",
-1554 => x"688c1122",
-1555 => x"700a100a",
-1556 => x"81065758",
-1557 => x"567480e4",
-1558 => x"388e1622",
-1559 => x"70902b70",
-1560 => x"902c5155",
-1561 => x"58807424",
-1562 => x"b138983d",
-1563 => x"c4055373",
-1564 => x"5280cfe4",
-1565 => x"08519481",
-1566 => x"3f800b80",
-1567 => x"08249738",
-1568 => x"7983e080",
-1569 => x"06547380",
-1570 => x"c0802e81",
-1571 => x"8f387382",
-1572 => x"80802e81",
-1573 => x"91388c16",
-1574 => x"22577690",
-1575 => x"80075473",
-1576 => x"8c172388",
-1577 => x"805280cf",
-1578 => x"e4085181",
-1579 => x"9b3f8008",
-1580 => x"9d388c16",
-1581 => x"22820755",
-1582 => x"748c1723",
-1583 => x"80c31670",
-1584 => x"770c9017",
-1585 => x"0c810b94",
-1586 => x"170c983d",
-1587 => x"0d0480cf",
-1588 => x"e408a8e6",
-1589 => x"0bbc120c",
-1590 => x"588c1622",
-1591 => x"81800754",
-1592 => x"738c1723",
-1593 => x"8008760c",
-1594 => x"80089017",
-1595 => x"0c88800b",
-1596 => x"94170c74",
-1597 => x"802ed338",
-1598 => x"8e162270",
-1599 => x"902b7090",
-1600 => x"2c535654",
-1601 => x"9afe3f80",
-1602 => x"08802eff",
-1603 => x"bd388c16",
-1604 => x"22810757",
-1605 => x"768c1723",
-1606 => x"983d0d04",
-1607 => x"810b8c17",
-1608 => x"225855fe",
-1609 => x"f539a816",
-1610 => x"0880c39d",
-1611 => x"2e098106",
-1612 => x"fee4388c",
-1613 => x"16228880",
-1614 => x"0754738c",
-1615 => x"17238880",
-1616 => x"0b80cc17",
-1617 => x"0cfedc39",
-1618 => x"f43d0d7e",
-1619 => x"608b1170",
-1620 => x"f8065b55",
-1621 => x"555d7296",
-1622 => x"26833890",
-1623 => x"58807824",
-1624 => x"74792607",
-1625 => x"55805474",
-1626 => x"742e0981",
-1627 => x"0680ca38",
-1628 => x"7c518ea8",
-1629 => x"3f7783f7",
-1630 => x"2680c538",
-1631 => x"77832a70",
-1632 => x"10101080",
-1633 => x"d7a0058c",
-1634 => x"11085858",
-1635 => x"5475772e",
-1636 => x"81f03884",
-1637 => x"1608fc06",
-1638 => x"8c170888",
-1639 => x"1808718c",
-1640 => x"120c8812",
-1641 => x"0c5b7605",
-1642 => x"84110881",
-1643 => x"0784120c",
-1644 => x"537c518d",
-1645 => x"e83f8816",
-1646 => x"5473800c",
-1647 => x"8e3d0d04",
-1648 => x"77892a78",
-1649 => x"832a5854",
-1650 => x"73802ebf",
-1651 => x"3877862a",
-1652 => x"b8055784",
-1653 => x"7427b438",
-1654 => x"80db1457",
-1655 => x"947427ab",
-1656 => x"38778c2a",
-1657 => x"80ee0557",
-1658 => x"80d47427",
-1659 => x"9e38778f",
-1660 => x"2a80f705",
-1661 => x"5782d474",
-1662 => x"27913877",
-1663 => x"922a80fc",
-1664 => x"05578ad4",
-1665 => x"74278438",
-1666 => x"80fe5776",
-1667 => x"10101080",
-1668 => x"d7a0058c",
-1669 => x"11085653",
-1670 => x"74732ea3",
-1671 => x"38841508",
-1672 => x"fc067079",
-1673 => x"31555673",
-1674 => x"8f2488e4",
-1675 => x"38738025",
-1676 => x"88e6388c",
-1677 => x"15085574",
-1678 => x"732e0981",
-1679 => x"06df3881",
-1680 => x"175980d7",
-1681 => x"b0085675",
-1682 => x"80d7a82e",
-1683 => x"82cc3884",
-1684 => x"1608fc06",
-1685 => x"70793155",
-1686 => x"55738f24",
-1687 => x"bb3880d7",
-1688 => x"a80b80d7",
-1689 => x"b40c80d7",
-1690 => x"a80b80d7",
-1691 => x"b00c8074",
-1692 => x"2480db38",
-1693 => x"74168411",
-1694 => x"08810784",
-1695 => x"120c53fe",
-1696 => x"b0398816",
-1697 => x"8c110857",
-1698 => x"5975792e",
-1699 => x"098106fe",
-1700 => x"82388214",
-1701 => x"59ffab39",
-1702 => x"77167881",
-1703 => x"0784180c",
-1704 => x"7080d7b4",
-1705 => x"0c7080d7",
-1706 => x"b00c80d7",
-1707 => x"a80b8c12",
-1708 => x"0c8c1108",
-1709 => x"88120c74",
-1710 => x"81078412",
-1711 => x"0c740574",
-1712 => x"710c5b7c",
-1713 => x"518bd63f",
-1714 => x"881654fd",
-1715 => x"ec3983ff",
-1716 => x"75278391",
-1717 => x"3874892a",
-1718 => x"75832a54",
-1719 => x"5473802e",
-1720 => x"bf387486",
-1721 => x"2ab80553",
-1722 => x"847427b4",
-1723 => x"3880db14",
-1724 => x"53947427",
-1725 => x"ab38748c",
-1726 => x"2a80ee05",
-1727 => x"5380d474",
-1728 => x"279e3874",
-1729 => x"8f2a80f7",
-1730 => x"055382d4",
-1731 => x"74279138",
-1732 => x"74922a80",
-1733 => x"fc05538a",
-1734 => x"d4742784",
-1735 => x"3880fe53",
-1736 => x"72101010",
-1737 => x"80d7a005",
-1738 => x"88110855",
-1739 => x"5773772e",
-1740 => x"868b3884",
-1741 => x"1408fc06",
-1742 => x"5b747b27",
-1743 => x"8d388814",
-1744 => x"08547377",
-1745 => x"2e098106",
-1746 => x"ea388c14",
-1747 => x"0880d7a0",
-1748 => x"0b840508",
-1749 => x"718c190c",
-1750 => x"7588190c",
-1751 => x"7788130c",
-1752 => x"5c57758c",
-1753 => x"150c7853",
-1754 => x"80792483",
-1755 => x"98387282",
-1756 => x"2c81712b",
-1757 => x"5656747b",
-1758 => x"2680ca38",
-1759 => x"7a750657",
-1760 => x"7682a338",
-1761 => x"78fc0684",
-1762 => x"05597410",
-1763 => x"707c0655",
-1764 => x"55738292",
-1765 => x"38841959",
-1766 => x"f13980d7",
-1767 => x"a00b8405",
-1768 => x"0879545b",
-1769 => x"788025c6",
-1770 => x"3882da39",
-1771 => x"74097b06",
-1772 => x"7080d7a0",
-1773 => x"0b84050c",
-1774 => x"5b741055",
-1775 => x"747b2685",
-1776 => x"387485bc",
-1777 => x"3880d7a0",
-1778 => x"0b880508",
-1779 => x"70841208",
-1780 => x"fc06707b",
-1781 => x"317b7226",
-1782 => x"8f722507",
-1783 => x"5d575c5c",
-1784 => x"5578802e",
-1785 => x"80d93879",
-1786 => x"1580d798",
-1787 => x"08199011",
-1788 => x"59545680",
-1789 => x"d79408ff",
-1790 => x"2e8838a0",
-1791 => x"8f13e080",
-1792 => x"06577652",
-1793 => x"7c518996",
-1794 => x"3f800854",
-1795 => x"8008ff2e",
-1796 => x"90388008",
-1797 => x"762782a7",
-1798 => x"387480d7",
-1799 => x"a02e829f",
-1800 => x"3880d7a0",
-1801 => x"0b880508",
-1802 => x"55841508",
-1803 => x"fc067079",
-1804 => x"31797226",
-1805 => x"8f722507",
-1806 => x"5d555a7a",
-1807 => x"83f23877",
-1808 => x"81078416",
-1809 => x"0c771570",
-1810 => x"80d7a00b",
-1811 => x"88050c74",
-1812 => x"81078412",
-1813 => x"0c567c51",
-1814 => x"88c33f88",
-1815 => x"15547380",
-1816 => x"0c8e3d0d",
-1817 => x"0474832a",
-1818 => x"70545480",
-1819 => x"7424819b",
-1820 => x"3872822c",
-1821 => x"81712b80",
-1822 => x"d7a40807",
-1823 => x"7080d7a0",
-1824 => x"0b84050c",
-1825 => x"75101010",
-1826 => x"80d7a005",
-1827 => x"88110871",
-1828 => x"8c1b0c70",
-1829 => x"881b0c79",
-1830 => x"88130c57",
-1831 => x"555c5575",
-1832 => x"8c150cfd",
-1833 => x"c1397879",
-1834 => x"10101080",
-1835 => x"d7a00570",
-1836 => x"565b5c8c",
-1837 => x"14085675",
-1838 => x"742ea338",
-1839 => x"841608fc",
-1840 => x"06707931",
-1841 => x"5853768f",
-1842 => x"2483f138",
-1843 => x"76802584",
-1844 => x"af388c16",
-1845 => x"08567574",
-1846 => x"2e098106",
-1847 => x"df388814",
-1848 => x"811a7083",
-1849 => x"06555a54",
-1850 => x"72c9387b",
-1851 => x"83065675",
-1852 => x"802efdb8",
-1853 => x"38ff1cf8",
-1854 => x"1b5b5c88",
-1855 => x"1a087a2e",
-1856 => x"ea38fdb5",
-1857 => x"39831953",
-1858 => x"fce43983",
-1859 => x"1470822c",
-1860 => x"81712b80",
-1861 => x"d7a40807",
-1862 => x"7080d7a0",
-1863 => x"0b84050c",
-1864 => x"76101010",
-1865 => x"80d7a005",
-1866 => x"88110871",
-1867 => x"8c1c0c70",
-1868 => x"881c0c7a",
-1869 => x"88130c58",
-1870 => x"535d5653",
-1871 => x"fee13980",
-1872 => x"d6e40817",
-1873 => x"59800876",
-1874 => x"2e818b38",
-1875 => x"80d79408",
-1876 => x"ff2e848e",
-1877 => x"38737631",
-1878 => x"1980d6e4",
-1879 => x"0c738706",
-1880 => x"70565372",
-1881 => x"802e8838",
-1882 => x"88733170",
-1883 => x"15555576",
-1884 => x"149fff06",
-1885 => x"a0807131",
-1886 => x"1670547e",
-1887 => x"53515386",
-1888 => x"9d3f8008",
-1889 => x"568008ff",
-1890 => x"2e819e38",
-1891 => x"80d6e408",
-1892 => x"137080d6",
-1893 => x"e40c7475",
-1894 => x"80d7a00b",
-1895 => x"88050c77",
-1896 => x"76311581",
-1897 => x"07555659",
-1898 => x"7a80d7a0",
-1899 => x"2e83c038",
-1900 => x"798f2682",
-1901 => x"ef38810b",
-1902 => x"84150c84",
-1903 => x"1508fc06",
-1904 => x"70793179",
-1905 => x"72268f72",
-1906 => x"25075d55",
-1907 => x"5a7a802e",
-1908 => x"fced3880",
-1909 => x"db398008",
-1910 => x"9fff0655",
-1911 => x"74feed38",
-1912 => x"7880d6e4",
-1913 => x"0c80d7a0",
-1914 => x"0b880508",
-1915 => x"7a188107",
-1916 => x"84120c55",
-1917 => x"80d79008",
-1918 => x"79278638",
-1919 => x"7880d790",
-1920 => x"0c80d78c",
-1921 => x"087927fc",
-1922 => x"a0387880",
-1923 => x"d78c0c84",
-1924 => x"1508fc06",
-1925 => x"70793179",
-1926 => x"72268f72",
-1927 => x"25075d55",
-1928 => x"5a7a802e",
-1929 => x"fc993888",
-1930 => x"39807457",
-1931 => x"53fedd39",
-1932 => x"7c5184e9",
-1933 => x"3f800b80",
-1934 => x"0c8e3d0d",
-1935 => x"04807324",
-1936 => x"a5387282",
-1937 => x"2c81712b",
-1938 => x"80d7a408",
-1939 => x"077080d7",
-1940 => x"a00b8405",
-1941 => x"0c5c5a76",
-1942 => x"8c170c73",
-1943 => x"88170c75",
-1944 => x"88180cf9",
-1945 => x"fd398313",
-1946 => x"70822c81",
-1947 => x"712b80d7",
-1948 => x"a4080770",
-1949 => x"80d7a00b",
-1950 => x"84050c5d",
-1951 => x"5b53d839",
-1952 => x"7a75065c",
-1953 => x"7bfc9f38",
-1954 => x"84197510",
-1955 => x"5659f139",
-1956 => x"ff178105",
-1957 => x"59f7ab39",
-1958 => x"8c150888",
-1959 => x"1608718c",
-1960 => x"120c8812",
-1961 => x"0c597515",
-1962 => x"84110881",
-1963 => x"0784120c",
-1964 => x"587c5183",
-1965 => x"e83f8815",
-1966 => x"54fba339",
-1967 => x"77167881",
-1968 => x"0784180c",
-1969 => x"8c170888",
-1970 => x"1808718c",
-1971 => x"120c8812",
-1972 => x"0c5c7080",
-1973 => x"d7b40c70",
-1974 => x"80d7b00c",
-1975 => x"80d7a80b",
-1976 => x"8c120c8c",
-1977 => x"11088812",
-1978 => x"0c778107",
-1979 => x"84120c77",
-1980 => x"0577710c",
-1981 => x"557c5183",
-1982 => x"a43f8816",
-1983 => x"54f5ba39",
-1984 => x"72168411",
-1985 => x"08810784",
-1986 => x"120c588c",
-1987 => x"16088817",
-1988 => x"08718c12",
-1989 => x"0c88120c",
-1990 => x"577c5183",
-1991 => x"803f8816",
-1992 => x"54f59639",
-1993 => x"7284150c",
-1994 => x"f41af806",
-1995 => x"70841d08",
-1996 => x"81060784",
-1997 => x"1d0c701c",
-1998 => x"5556850b",
-1999 => x"84150c85",
-2000 => x"0b88150c",
-2001 => x"8f7627fd",
-2002 => x"ab38881b",
-2003 => x"527c51eb",
-2004 => x"e83f80d7",
-2005 => x"a00b8805",
-2006 => x"0880d6e4",
-2007 => x"085a55fd",
-2008 => x"93397880",
-2009 => x"d6e40c73",
-2010 => x"80d7940c",
-2011 => x"fbef3972",
-2012 => x"84150cfc",
-2013 => x"ff39fb3d",
-2014 => x"0d77707a",
-2015 => x"7c585553",
-2016 => x"568f7527",
-2017 => x"80e63872",
-2018 => x"76078306",
-2019 => x"517080dc",
-2020 => x"38757352",
-2021 => x"54707084",
-2022 => x"05520874",
-2023 => x"70840556",
-2024 => x"0c737170",
-2025 => x"84055308",
-2026 => x"71708405",
-2027 => x"530c7170",
-2028 => x"84055308",
-2029 => x"71708405",
-2030 => x"530c7170",
-2031 => x"84055308",
-2032 => x"71708405",
-2033 => x"530cf016",
-2034 => x"5654748f",
-2035 => x"26c73883",
-2036 => x"75279538",
-2037 => x"70708405",
-2038 => x"52087470",
-2039 => x"8405560c",
-2040 => x"fc155574",
-2041 => x"8326ed38",
-2042 => x"73715452",
-2043 => x"ff155170",
-2044 => x"ff2e9838",
-2045 => x"72708105",
-2046 => x"54337270",
-2047 => x"81055434",
-2048 => x"ff115170",
-2049 => x"ff2e0981",
-2050 => x"06ea3875",
-2051 => x"800c873d",
-2052 => x"0d04fb3d",
-2053 => x"0d777a71",
-2054 => x"028c05a3",
-2055 => x"05335854",
-2056 => x"54568373",
-2057 => x"2780d438",
-2058 => x"75830651",
-2059 => x"7080cc38",
-2060 => x"74882b75",
-2061 => x"07707190",
-2062 => x"2b075551",
-2063 => x"8f7327a7",
-2064 => x"38737270",
-2065 => x"8405540c",
-2066 => x"71747170",
-2067 => x"8405530c",
-2068 => x"74717084",
-2069 => x"05530c74",
-2070 => x"71708405",
-2071 => x"530cf014",
-2072 => x"5452728f",
-2073 => x"26db3883",
-2074 => x"73279038",
-2075 => x"73727084",
-2076 => x"05540cfc",
-2077 => x"13537283",
-2078 => x"26f238ff",
-2079 => x"135170ff",
-2080 => x"2e933874",
-2081 => x"72708105",
-2082 => x"5434ff11",
-2083 => x"5170ff2e",
-2084 => x"098106ef",
-2085 => x"3875800c",
-2086 => x"873d0d04",
-2087 => x"04047070",
-2088 => x"7070800b",
-2089 => x"80dfe00c",
-2090 => x"765184f3",
-2091 => x"3f800853",
-2092 => x"8008ff2e",
-2093 => x"89387280",
-2094 => x"0c505050",
-2095 => x"500480df",
-2096 => x"e0085473",
-2097 => x"802eef38",
-2098 => x"7574710c",
-2099 => x"5272800c",
-2100 => x"50505050",
-2101 => x"04f93d0d",
-2102 => x"797c557b",
-2103 => x"548e1122",
-2104 => x"70902b70",
-2105 => x"902c5557",
-2106 => x"80cfe408",
-2107 => x"53585683",
-2108 => x"f63f8008",
-2109 => x"57800b80",
-2110 => x"08249338",
-2111 => x"80d01608",
-2112 => x"80080580",
-2113 => x"d0170c76",
-2114 => x"800c893d",
-2115 => x"0d048c16",
-2116 => x"2283dfff",
-2117 => x"0655748c",
-2118 => x"17237680",
-2119 => x"0c893d0d",
-2120 => x"04fa3d0d",
-2121 => x"788c1122",
-2122 => x"70882a70",
-2123 => x"81065157",
-2124 => x"585674a9",
-2125 => x"388c1622",
-2126 => x"83dfff06",
-2127 => x"55748c17",
-2128 => x"237a5479",
-2129 => x"538e1622",
-2130 => x"70902b70",
-2131 => x"902c5456",
-2132 => x"80cfe408",
-2133 => x"525681b2",
-2134 => x"3f883d0d",
-2135 => x"04825480",
-2136 => x"538e1622",
-2137 => x"70902b70",
-2138 => x"902c5456",
-2139 => x"80cfe408",
-2140 => x"525782bb",
-2141 => x"3f8c1622",
-2142 => x"83dfff06",
-2143 => x"55748c17",
-2144 => x"237a5479",
-2145 => x"538e1622",
-2146 => x"70902b70",
-2147 => x"902c5456",
-2148 => x"80cfe408",
-2149 => x"525680f2",
-2150 => x"3f883d0d",
-2151 => x"04f93d0d",
-2152 => x"797c557b",
-2153 => x"548e1122",
-2154 => x"70902b70",
-2155 => x"902c5557",
-2156 => x"80cfe408",
-2157 => x"53585681",
-2158 => x"f63f8008",
-2159 => x"578008ff",
-2160 => x"2e99388c",
-2161 => x"1622a080",
-2162 => x"0755748c",
-2163 => x"17238008",
-2164 => x"80d0170c",
-2165 => x"76800c89",
-2166 => x"3d0d048c",
-2167 => x"162283df",
-2168 => x"ff065574",
-2169 => x"8c172376",
-2170 => x"800c893d",
-2171 => x"0d047070",
-2172 => x"70748e11",
-2173 => x"2270902b",
-2174 => x"70902c55",
-2175 => x"51515380",
-2176 => x"cfe40851",
-2177 => x"bd3f5050",
-2178 => x"5004fb3d",
-2179 => x"0d800b80",
-2180 => x"dfe00c7a",
-2181 => x"53795278",
-2182 => x"5182ff3f",
-2183 => x"80085580",
-2184 => x"08ff2e88",
-2185 => x"3874800c",
-2186 => x"873d0d04",
-2187 => x"80dfe008",
-2188 => x"5675802e",
-2189 => x"f0387776",
-2190 => x"710c5474",
-2191 => x"800c873d",
-2192 => x"0d047070",
-2193 => x"7070800b",
-2194 => x"80dfe00c",
-2195 => x"765184cc",
-2196 => x"3f800853",
-2197 => x"8008ff2e",
-2198 => x"89387280",
-2199 => x"0c505050",
-2200 => x"500480df",
-2201 => x"e0085473",
-2202 => x"802eef38",
-2203 => x"7574710c",
-2204 => x"5272800c",
-2205 => x"50505050",
-2206 => x"04fc3d0d",
-2207 => x"800b80df",
-2208 => x"e00c7852",
-2209 => x"775187b3",
-2210 => x"3f800854",
-2211 => x"8008ff2e",
-2212 => x"88387380",
-2213 => x"0c863d0d",
-2214 => x"0480dfe0",
-2215 => x"08557480",
-2216 => x"2ef03876",
-2217 => x"75710c53",
-2218 => x"73800c86",
-2219 => x"3d0d04fb",
-2220 => x"3d0d800b",
-2221 => x"80dfe00c",
-2222 => x"7a537952",
-2223 => x"7851848e",
-2224 => x"3f800855",
-2225 => x"8008ff2e",
-2226 => x"88387480",
-2227 => x"0c873d0d",
-2228 => x"0480dfe0",
-2229 => x"08567580",
-2230 => x"2ef03877",
-2231 => x"76710c54",
-2232 => x"74800c87",
-2233 => x"3d0d04fb",
-2234 => x"3d0d800b",
-2235 => x"80dfe00c",
-2236 => x"7a537952",
-2237 => x"78518296",
-2238 => x"3f800855",
-2239 => x"8008ff2e",
-2240 => x"88387480",
-2241 => x"0c873d0d",
-2242 => x"0480dfe0",
-2243 => x"08567580",
-2244 => x"2ef03877",
-2245 => x"76710c54",
-2246 => x"74800c87",
-2247 => x"3d0d0470",
-2248 => x"707080df",
-2249 => x"d0088938",
-2250 => x"80dfe40b",
-2251 => x"80dfd00c",
-2252 => x"80dfd008",
-2253 => x"75115252",
-2254 => x"ff537087",
-2255 => x"fb808026",
-2256 => x"88387080",
-2257 => x"dfd00c71",
-2258 => x"5372800c",
-2259 => x"50505004",
-2260 => x"fd3d0d80",
-2261 => x"0b80cfd8",
-2262 => x"08545472",
-2263 => x"812e9b38",
-2264 => x"7380dfd4",
-2265 => x"0cc2bf3f",
-2266 => x"c1963f80",
-2267 => x"dfa85281",
-2268 => x"51c3fd3f",
-2269 => x"80085186",
-2270 => x"c23f7280",
-2271 => x"dfd40cc2",
-2272 => x"a53fc0fc",
-2273 => x"3f80dfa8",
-2274 => x"528151c3",
-2275 => x"e33f8008",
-2276 => x"5186a83f",
-2277 => x"00ff3900",
-2278 => x"ff39f53d",
-2279 => x"0d7e6080",
-2280 => x"dfd40870",
-2281 => x"5b585b5b",
-2282 => x"7580c238",
-2283 => x"777a25a1",
-2284 => x"38771b70",
-2285 => x"337081ff",
-2286 => x"06585859",
-2287 => x"758a2e98",
-2288 => x"387681ff",
-2289 => x"0651c1bd",
-2290 => x"3f811858",
-2291 => x"797824e1",
-2292 => x"3879800c",
-2293 => x"8d3d0d04",
-2294 => x"8d51c1a9",
-2295 => x"3f783370",
-2296 => x"81ff0652",
-2297 => x"57c19e3f",
-2298 => x"811858e0",
-2299 => x"3979557a",
-2300 => x"547d5385",
-2301 => x"528d3dfc",
-2302 => x"0551c0c6",
-2303 => x"3f800856",
-2304 => x"85b23f7b",
-2305 => x"80080c75",
-2306 => x"800c8d3d",
-2307 => x"0d04f63d",
-2308 => x"0d7d7f80",
-2309 => x"dfd40870",
-2310 => x"5b585a5a",
-2311 => x"7580c138",
-2312 => x"777925b3",
-2313 => x"38c0b93f",
-2314 => x"800881ff",
-2315 => x"06708d32",
-2316 => x"7030709f",
-2317 => x"2a515157",
-2318 => x"57768a2e",
-2319 => x"80c43875",
-2320 => x"802ebf38",
-2321 => x"771a5676",
-2322 => x"76347651",
-2323 => x"c0b73f81",
-2324 => x"18587878",
-2325 => x"24cf3877",
-2326 => x"5675800c",
-2327 => x"8c3d0d04",
-2328 => x"78557954",
-2329 => x"7c538452",
-2330 => x"8c3dfc05",
-2331 => x"51ffbfd2",
-2332 => x"3f800856",
-2333 => x"84be3f7a",
-2334 => x"80080c75",
-2335 => x"800c8c3d",
-2336 => x"0d04771a",
-2337 => x"598a7934",
-2338 => x"8118588d",
-2339 => x"51ffbff5",
-2340 => x"3f8a51ff",
-2341 => x"bfef3f77",
-2342 => x"56ffbe39",
-2343 => x"fb3d0d80",
-2344 => x"dfd40870",
-2345 => x"56547388",
-2346 => x"3874800c",
-2347 => x"873d0d04",
-2348 => x"77538352",
-2349 => x"873dfc05",
-2350 => x"51ffbf86",
-2351 => x"3f800854",
-2352 => x"83f23f75",
-2353 => x"80080c73",
-2354 => x"800c873d",
-2355 => x"0d04fa3d",
-2356 => x"0d80dfd4",
-2357 => x"08802ea3",
-2358 => x"387a5579",
-2359 => x"54785386",
-2360 => x"52883dfc",
-2361 => x"0551ffbe",
-2362 => x"d93f8008",
-2363 => x"5683c53f",
-2364 => x"7680080c",
-2365 => x"75800c88",
-2366 => x"3d0d0483",
-2367 => x"b73f9d0b",
-2368 => x"80080cff",
-2369 => x"0b800c88",
-2370 => x"3d0d04f7",
-2371 => x"3d0d7b7d",
-2372 => x"5b59bc53",
-2373 => x"80527951",
-2374 => x"f5f83f80",
-2375 => x"70565798",
-2376 => x"56741970",
-2377 => x"3370782b",
-2378 => x"79078118",
-2379 => x"f81a5a58",
-2380 => x"59555884",
-2381 => x"7524ea38",
-2382 => x"767a2384",
-2383 => x"19588070",
-2384 => x"56579856",
-2385 => x"74187033",
-2386 => x"70782b79",
-2387 => x"078118f8",
-2388 => x"1a5a5859",
-2389 => x"51548475",
-2390 => x"24ea3876",
-2391 => x"821b2388",
-2392 => x"19588070",
-2393 => x"56579856",
-2394 => x"74187033",
-2395 => x"70782b79",
-2396 => x"078118f8",
-2397 => x"1a5a5859",
-2398 => x"51548475",
-2399 => x"24ea3876",
-2400 => x"841b0c8c",
-2401 => x"19588070",
-2402 => x"56579856",
-2403 => x"74187033",
-2404 => x"70782b79",
-2405 => x"078118f8",
-2406 => x"1a5a5859",
-2407 => x"51548475",
-2408 => x"24ea3876",
-2409 => x"881b2390",
-2410 => x"19588070",
-2411 => x"56579856",
-2412 => x"74187033",
-2413 => x"70782b79",
-2414 => x"078118f8",
-2415 => x"1a5a5859",
-2416 => x"51548475",
-2417 => x"24ea3876",
-2418 => x"8a1b2394",
-2419 => x"19588070",
-2420 => x"56579856",
-2421 => x"74187033",
-2422 => x"70782b79",
-2423 => x"078118f8",
-2424 => x"1a5a5859",
-2425 => x"51548475",
-2426 => x"24ea3876",
-2427 => x"8c1b2398",
-2428 => x"19588070",
-2429 => x"56579856",
-2430 => x"74187033",
-2431 => x"70782b79",
-2432 => x"078118f8",
-2433 => x"1a5a5859",
-2434 => x"51548475",
-2435 => x"24ea3876",
-2436 => x"8e1b239c",
-2437 => x"19588070",
-2438 => x"5657b856",
-2439 => x"74187033",
-2440 => x"70782b79",
-2441 => x"078118f8",
-2442 => x"1a5a5859",
-2443 => x"5a548875",
-2444 => x"24ea3876",
-2445 => x"901b0c8b",
-2446 => x"3d0d04e9",
-2447 => x"3d0d6a80",
-2448 => x"dfd40857",
-2449 => x"57759338",
-2450 => x"80c0800b",
-2451 => x"84180c75",
-2452 => x"ac180c75",
-2453 => x"800c993d",
-2454 => x"0d04893d",
-2455 => x"70556a54",
-2456 => x"558a5299",
-2457 => x"3dffbc05",
-2458 => x"51ffbbd6",
-2459 => x"3f800877",
-2460 => x"53755256",
-2461 => x"fd953fbc",
-2462 => x"3f778008",
-2463 => x"0c75800c",
-2464 => x"993d0d04",
-2465 => x"fc3d0d81",
-2466 => x"5480dfd4",
-2467 => x"08883873",
-2468 => x"800c863d",
-2469 => x"0d047653",
-2470 => x"97b95286",
-2471 => x"3dfc0551",
-2472 => x"ffbb9f3f",
-2473 => x"8008548c",
-2474 => x"3f748008",
-2475 => x"0c73800c",
-2476 => x"863d0d04",
-2477 => x"80cfe408",
-2478 => x"800c04f7",
-2479 => x"3d0d7b80",
-2480 => x"cfe40882",
-2481 => x"c811085a",
-2482 => x"545a7780",
-2483 => x"2e80da38",
-2484 => x"81881884",
-2485 => x"1908ff05",
-2486 => x"81712b59",
-2487 => x"55598074",
-2488 => x"2480ea38",
-2489 => x"807424b5",
-2490 => x"3873822b",
-2491 => x"78118805",
-2492 => x"56568180",
-2493 => x"19087706",
-2494 => x"5372802e",
-2495 => x"b6387816",
-2496 => x"70085353",
-2497 => x"79517408",
-2498 => x"53722dff",
-2499 => x"14fc17fc",
-2500 => x"1779812c",
-2501 => x"5a575754",
-2502 => x"738025d6",
-2503 => x"38770858",
-2504 => x"77ffad38",
-2505 => x"80cfe408",
-2506 => x"53bc1308",
-2507 => x"a5387951",
-2508 => x"f8e23f74",
-2509 => x"0853722d",
-2510 => x"ff14fc17",
-2511 => x"fc177981",
-2512 => x"2c5a5757",
-2513 => x"54738025",
-2514 => x"ffa838d1",
-2515 => x"398057ff",
-2516 => x"93397251",
-2517 => x"bc130854",
-2518 => x"732d7951",
-2519 => x"f8b63f70",
-2520 => x"7080dfb0",
-2521 => x"0bfc0570",
-2522 => x"08525270",
-2523 => x"ff2e9138",
-2524 => x"702dfc12",
-2525 => x"70085252",
-2526 => x"70ff2e09",
-2527 => x"8106f138",
-2528 => x"50500404",
-2529 => x"ffbb8c3f",
-2530 => x"04000000",
-2531 => x"00000040",
-2532 => x"48656c6c",
-2533 => x"6f20776f",
-2534 => x"726c6420",
-2535 => x"310a0000",
-2536 => x"48656c6c",
-2537 => x"6f20776f",
-2538 => x"726c6420",
-2539 => x"320a0000",
-2540 => x"0a000000",
-2541 => x"43000000",
-2542 => x"64756d6d",
-2543 => x"792e6578",
-2544 => x"65000000",
-2545 => x"00ffffff",
-2546 => x"ff00ffff",
-2547 => x"ffff00ff",
-2548 => x"ffffff00",
-2549 => x"00000000",
-2550 => x"00000000",
-2551 => x"00000000",
-2552 => x"00002fb8",
-2553 => x"000027e8",
-2554 => x"00000000",
-2555 => x"00002a50",
-2556 => x"00002aac",
-2557 => x"00002b08",
-2558 => x"00000000",
-2559 => x"00000000",
-2560 => x"00000000",
-2561 => x"00000000",
-2562 => x"00000000",
-2563 => x"00000000",
-2564 => x"00000000",
-2565 => x"00000000",
-2566 => x"00000000",
-2567 => x"000027b4",
-2568 => x"00000000",
-2569 => x"00000000",
-2570 => x"00000000",
-2571 => x"00000000",
-2572 => x"00000000",
-2573 => x"00000000",
-2574 => x"00000000",
-2575 => x"00000000",
-2576 => x"00000000",
-2577 => x"00000000",
-2578 => x"00000000",
-2579 => x"00000000",
-2580 => x"00000000",
-2581 => x"00000000",
-2582 => x"00000000",
-2583 => x"00000000",
-2584 => x"00000000",
-2585 => x"00000000",
-2586 => x"00000000",
-2587 => x"00000000",
-2588 => x"00000000",
-2589 => x"00000000",
-2590 => x"00000000",
-2591 => x"00000000",
-2592 => x"00000000",
-2593 => x"00000000",
-2594 => x"00000000",
-2595 => x"00000000",
-2596 => x"00000001",
-2597 => x"330eabcd",
-2598 => x"1234e66d",
-2599 => x"deec0005",
-2600 => x"000b0000",
-2601 => x"00000000",
-2602 => x"00000000",
-2603 => x"00000000",
-2604 => x"00000000",
-2605 => x"00000000",
-2606 => x"00000000",
-2607 => x"00000000",
-2608 => x"00000000",
-2609 => x"00000000",
-2610 => x"00000000",
-2611 => x"00000000",
-2612 => x"00000000",
-2613 => x"00000000",
-2614 => x"00000000",
-2615 => x"00000000",
-2616 => x"00000000",
-2617 => x"00000000",
-2618 => x"00000000",
-2619 => x"00000000",
-2620 => x"00000000",
-2621 => x"00000000",
-2622 => x"00000000",
-2623 => x"00000000",
-2624 => x"00000000",
-2625 => x"00000000",
-2626 => x"00000000",
-2627 => x"00000000",
-2628 => x"00000000",
-2629 => x"00000000",
-2630 => x"00000000",
-2631 => x"00000000",
-2632 => x"00000000",
-2633 => x"00000000",
-2634 => x"00000000",
-2635 => x"00000000",
-2636 => x"00000000",
-2637 => x"00000000",
-2638 => x"00000000",
-2639 => x"00000000",
-2640 => x"00000000",
-2641 => x"00000000",
-2642 => x"00000000",
-2643 => x"00000000",
-2644 => x"00000000",
-2645 => x"00000000",
-2646 => x"00000000",
-2647 => x"00000000",
-2648 => x"00000000",
-2649 => x"00000000",
-2650 => x"00000000",
-2651 => x"00000000",
-2652 => x"00000000",
-2653 => x"00000000",
-2654 => x"00000000",
-2655 => x"00000000",
-2656 => x"00000000",
-2657 => x"00000000",
-2658 => x"00000000",
-2659 => x"00000000",
-2660 => x"00000000",
-2661 => x"00000000",
-2662 => x"00000000",
-2663 => x"00000000",
-2664 => x"00000000",
-2665 => x"00000000",
-2666 => x"00000000",
-2667 => x"00000000",
-2668 => x"00000000",
-2669 => x"00000000",
-2670 => x"00000000",
-2671 => x"00000000",
-2672 => x"00000000",
-2673 => x"00000000",
-2674 => x"00000000",
-2675 => x"00000000",
-2676 => x"00000000",
-2677 => x"00000000",
-2678 => x"00000000",
-2679 => x"00000000",
-2680 => x"00000000",
-2681 => x"00000000",
-2682 => x"00000000",
-2683 => x"00000000",
-2684 => x"00000000",
-2685 => x"00000000",
-2686 => x"00000000",
-2687 => x"00000000",
-2688 => x"00000000",
-2689 => x"00000000",
-2690 => x"00000000",
-2691 => x"00000000",
-2692 => x"00000000",
-2693 => x"00000000",
-2694 => x"00000000",
-2695 => x"00000000",
-2696 => x"00000000",
-2697 => x"00000000",
-2698 => x"00000000",
-2699 => x"00000000",
-2700 => x"00000000",
-2701 => x"00000000",
-2702 => x"00000000",
-2703 => x"00000000",
-2704 => x"00000000",
-2705 => x"00000000",
-2706 => x"00000000",
-2707 => x"00000000",
-2708 => x"00000000",
-2709 => x"00000000",
-2710 => x"00000000",
-2711 => x"00000000",
-2712 => x"00000000",
-2713 => x"00000000",
-2714 => x"00000000",
-2715 => x"00000000",
-2716 => x"00000000",
-2717 => x"00000000",
-2718 => x"00000000",
-2719 => x"00000000",
-2720 => x"00000000",
-2721 => x"00000000",
-2722 => x"00000000",
-2723 => x"00000000",
-2724 => x"00000000",
-2725 => x"00000000",
-2726 => x"00000000",
-2727 => x"00000000",
-2728 => x"00000000",
-2729 => x"00000000",
-2730 => x"00000000",
-2731 => x"00000000",
-2732 => x"00000000",
-2733 => x"00000000",
-2734 => x"00000000",
-2735 => x"00000000",
-2736 => x"00000000",
-2737 => x"00000000",
-2738 => x"00000000",
-2739 => x"00000000",
-2740 => x"00000000",
-2741 => x"00000000",
-2742 => x"00000000",
-2743 => x"00000000",
-2744 => x"00000000",
-2745 => x"00000000",
-2746 => x"00000000",
-2747 => x"00000000",
-2748 => x"00000000",
-2749 => x"00000000",
-2750 => x"00000000",
-2751 => x"00000000",
-2752 => x"00000000",
-2753 => x"00000000",
-2754 => x"00000000",
-2755 => x"00000000",
-2756 => x"00000000",
-2757 => x"00000000",
-2758 => x"00000000",
-2759 => x"00000000",
-2760 => x"00000000",
-2761 => x"00000000",
-2762 => x"00000000",
-2763 => x"00000000",
-2764 => x"00000000",
-2765 => x"00000000",
-2766 => x"00000000",
-2767 => x"00000000",
-2768 => x"00000000",
-2769 => x"00000000",
-2770 => x"00000000",
-2771 => x"00000000",
-2772 => x"00000000",
-2773 => x"00000000",
-2774 => x"00000000",
-2775 => x"00000000",
-2776 => x"00000000",
-2777 => x"00000000",
-2778 => x"00000000",
-2779 => x"00000000",
-2780 => x"00000000",
-2781 => x"00000000",
-2782 => x"00000000",
-2783 => x"00000000",
-2784 => x"00000000",
-2785 => x"00000000",
-2786 => x"00000000",
-2787 => x"00000000",
-2788 => x"00000000",
-2789 => x"ffffffff",
-2790 => x"00000000",
-2791 => x"00020000",
-2792 => x"00000000",
-2793 => x"00000000",
-2794 => x"00002ba0",
-2795 => x"00002ba0",
-2796 => x"00002ba8",
-2797 => x"00002ba8",
-2798 => x"00002bb0",
-2799 => x"00002bb0",
-2800 => x"00002bb8",
-2801 => x"00002bb8",
-2802 => x"00002bc0",
-2803 => x"00002bc0",
-2804 => x"00002bc8",
-2805 => x"00002bc8",
-2806 => x"00002bd0",
-2807 => x"00002bd0",
-2808 => x"00002bd8",
-2809 => x"00002bd8",
-2810 => x"00002be0",
-2811 => x"00002be0",
-2812 => x"00002be8",
-2813 => x"00002be8",
-2814 => x"00002bf0",
-2815 => x"00002bf0",
-2816 => x"00002bf8",
-2817 => x"00002bf8",
-2818 => x"00002c00",
-2819 => x"00002c00",
-2820 => x"00002c08",
-2821 => x"00002c08",
-2822 => x"00002c10",
-2823 => x"00002c10",
-2824 => x"00002c18",
-2825 => x"00002c18",
-2826 => x"00002c20",
-2827 => x"00002c20",
-2828 => x"00002c28",
-2829 => x"00002c28",
-2830 => x"00002c30",
-2831 => x"00002c30",
-2832 => x"00002c38",
-2833 => x"00002c38",
-2834 => x"00002c40",
-2835 => x"00002c40",
-2836 => x"00002c48",
-2837 => x"00002c48",
-2838 => x"00002c50",
-2839 => x"00002c50",
-2840 => x"00002c58",
-2841 => x"00002c58",
-2842 => x"00002c60",
-2843 => x"00002c60",
-2844 => x"00002c68",
-2845 => x"00002c68",
-2846 => x"00002c70",
-2847 => x"00002c70",
-2848 => x"00002c78",
-2849 => x"00002c78",
-2850 => x"00002c80",
-2851 => x"00002c80",
-2852 => x"00002c88",
-2853 => x"00002c88",
-2854 => x"00002c90",
-2855 => x"00002c90",
-2856 => x"00002c98",
-2857 => x"00002c98",
-2858 => x"00002ca0",
-2859 => x"00002ca0",
-2860 => x"00002ca8",
-2861 => x"00002ca8",
-2862 => x"00002cb0",
-2863 => x"00002cb0",
-2864 => x"00002cb8",
-2865 => x"00002cb8",
-2866 => x"00002cc0",
-2867 => x"00002cc0",
-2868 => x"00002cc8",
-2869 => x"00002cc8",
-2870 => x"00002cd0",
-2871 => x"00002cd0",
-2872 => x"00002cd8",
-2873 => x"00002cd8",
-2874 => x"00002ce0",
-2875 => x"00002ce0",
-2876 => x"00002ce8",
-2877 => x"00002ce8",
-2878 => x"00002cf0",
-2879 => x"00002cf0",
-2880 => x"00002cf8",
-2881 => x"00002cf8",
-2882 => x"00002d00",
-2883 => x"00002d00",
-2884 => x"00002d08",
-2885 => x"00002d08",
-2886 => x"00002d10",
-2887 => x"00002d10",
-2888 => x"00002d18",
-2889 => x"00002d18",
-2890 => x"00002d20",
-2891 => x"00002d20",
-2892 => x"00002d28",
-2893 => x"00002d28",
-2894 => x"00002d30",
-2895 => x"00002d30",
-2896 => x"00002d38",
-2897 => x"00002d38",
-2898 => x"00002d40",
-2899 => x"00002d40",
-2900 => x"00002d48",
-2901 => x"00002d48",
-2902 => x"00002d50",
-2903 => x"00002d50",
-2904 => x"00002d58",
-2905 => x"00002d58",
-2906 => x"00002d60",
-2907 => x"00002d60",
-2908 => x"00002d68",
-2909 => x"00002d68",
-2910 => x"00002d70",
-2911 => x"00002d70",
-2912 => x"00002d78",
-2913 => x"00002d78",
-2914 => x"00002d80",
-2915 => x"00002d80",
-2916 => x"00002d88",
-2917 => x"00002d88",
-2918 => x"00002d90",
-2919 => x"00002d90",
-2920 => x"00002d98",
-2921 => x"00002d98",
-2922 => x"00002da0",
-2923 => x"00002da0",
-2924 => x"00002da8",
-2925 => x"00002da8",
-2926 => x"00002db0",
-2927 => x"00002db0",
-2928 => x"00002db8",
-2929 => x"00002db8",
-2930 => x"00002dc0",
-2931 => x"00002dc0",
-2932 => x"00002dc8",
-2933 => x"00002dc8",
-2934 => x"00002dd0",
-2935 => x"00002dd0",
-2936 => x"00002dd8",
-2937 => x"00002dd8",
-2938 => x"00002de0",
-2939 => x"00002de0",
-2940 => x"00002de8",
-2941 => x"00002de8",
-2942 => x"00002df0",
-2943 => x"00002df0",
-2944 => x"00002df8",
-2945 => x"00002df8",
-2946 => x"00002e00",
-2947 => x"00002e00",
-2948 => x"00002e08",
-2949 => x"00002e08",
-2950 => x"00002e10",
-2951 => x"00002e10",
-2952 => x"00002e18",
-2953 => x"00002e18",
-2954 => x"00002e20",
-2955 => x"00002e20",
-2956 => x"00002e28",
-2957 => x"00002e28",
-2958 => x"00002e30",
-2959 => x"00002e30",
-2960 => x"00002e38",
-2961 => x"00002e38",
-2962 => x"00002e40",
-2963 => x"00002e40",
-2964 => x"00002e48",
-2965 => x"00002e48",
-2966 => x"00002e50",
-2967 => x"00002e50",
-2968 => x"00002e58",
-2969 => x"00002e58",
-2970 => x"00002e60",
-2971 => x"00002e60",
-2972 => x"00002e68",
-2973 => x"00002e68",
-2974 => x"00002e70",
-2975 => x"00002e70",
-2976 => x"00002e78",
-2977 => x"00002e78",
-2978 => x"00002e80",
-2979 => x"00002e80",
-2980 => x"00002e88",
-2981 => x"00002e88",
-2982 => x"00002e90",
-2983 => x"00002e90",
-2984 => x"00002e98",
-2985 => x"00002e98",
-2986 => x"00002ea0",
-2987 => x"00002ea0",
-2988 => x"00002ea8",
-2989 => x"00002ea8",
-2990 => x"00002eb0",
-2991 => x"00002eb0",
-2992 => x"00002eb8",
-2993 => x"00002eb8",
-2994 => x"00002ec0",
-2995 => x"00002ec0",
-2996 => x"00002ec8",
-2997 => x"00002ec8",
-2998 => x"00002ed0",
-2999 => x"00002ed0",
-3000 => x"00002ed8",
-3001 => x"00002ed8",
-3002 => x"00002ee0",
-3003 => x"00002ee0",
-3004 => x"00002ee8",
-3005 => x"00002ee8",
-3006 => x"00002ef0",
-3007 => x"00002ef0",
-3008 => x"00002ef8",
-3009 => x"00002ef8",
-3010 => x"00002f00",
-3011 => x"00002f00",
-3012 => x"00002f08",
-3013 => x"00002f08",
-3014 => x"00002f10",
-3015 => x"00002f10",
-3016 => x"00002f18",
-3017 => x"00002f18",
-3018 => x"00002f20",
-3019 => x"00002f20",
-3020 => x"00002f28",
-3021 => x"00002f28",
-3022 => x"00002f30",
-3023 => x"00002f30",
-3024 => x"00002f38",
-3025 => x"00002f38",
-3026 => x"00002f40",
-3027 => x"00002f40",
-3028 => x"00002f48",
-3029 => x"00002f48",
-3030 => x"00002f50",
-3031 => x"00002f50",
-3032 => x"00002f58",
-3033 => x"00002f58",
-3034 => x"00002f60",
-3035 => x"00002f60",
-3036 => x"00002f68",
-3037 => x"00002f68",
-3038 => x"00002f70",
-3039 => x"00002f70",
-3040 => x"00002f78",
-3041 => x"00002f78",
-3042 => x"00002f80",
-3043 => x"00002f80",
-3044 => x"00002f88",
-3045 => x"00002f88",
-3046 => x"00002f90",
-3047 => x"00002f90",
-3048 => x"00002f98",
-3049 => x"00002f98",
-3050 => x"000027b8",
-3051 => x"ffffffff",
-3052 => x"00000000",
-3053 => x"ffffffff",
-3054 => x"00000000",
- others => x"00000000"
-);
-
-begin
-
-mem_busy<=mem_readEnable; -- we're done on the cycle after we serve the read request
-
-process (clk, areset)
-begin
- if areset = '1' then
- elsif (clk'event and clk = '1') then
- if (mem_writeEnable = '1') then
- ram(to_integer(unsigned(mem_addr(maxAddrBit downto minAddrBit)))) := mem_write;
- end if;
- if (mem_readEnable = '1') then
- mem_read <= ram(to_integer(unsigned(mem_addr(maxAddrBit downto minAddrBit))));
- end if;
- end if;
-end process;
-
-
-
-
-end dram_arch;
+library ieee;
+use ieee.std_logic_1164.all;
+use ieee.numeric_std.all;
+
+
+library work;
+use work.zpu_config.all;
+use work.zpupkg.all;
+
+entity dram is
+port (clk : in std_logic;
+areset : std_logic;
+ mem_writeEnable : in std_logic;
+ mem_readEnable : in std_logic;
+ mem_addr : in std_logic_vector(maxAddrBit downto 0);
+ mem_write : in std_logic_vector(wordSize-1 downto 0);
+ mem_read : out std_logic_vector(wordSize-1 downto 0);
+ mem_busy : out std_logic;
+ mem_writeMask : in std_logic_vector(wordBytes-1 downto 0));
+end dram;
+
+architecture dram_arch of dram is
+
+
+type ram_type is array(natural range 0 to ((2**(maxAddrBitDRAM+1))/4)-1) of std_logic_vector(wordSize-1 downto 0);
+
+shared variable ram : ram_type :=
+(
+0 => x"0b0b0b0b",
+1 => x"82700b0b",
+2 => x"80cfd80c",
+3 => x"3a0b0b80",
+4 => x"c6d00400",
+5 => x"00000000",
+6 => x"00000000",
+7 => x"00000000",
+8 => x"80088408",
+9 => x"88080b0b",
+10 => x"80c7972d",
+11 => x"880c840c",
+12 => x"800c0400",
+13 => x"00000000",
+14 => x"00000000",
+15 => x"00000000",
+16 => x"71fd0608",
+17 => x"72830609",
+18 => x"81058205",
+19 => x"832b2a83",
+20 => x"ffff0652",
+21 => x"04000000",
+22 => x"00000000",
+23 => x"00000000",
+24 => x"71fd0608",
+25 => x"83ffff73",
+26 => x"83060981",
+27 => x"05820583",
+28 => x"2b2b0906",
+29 => x"7383ffff",
+30 => x"0b0b0b0b",
+31 => x"83a70400",
+32 => x"72098105",
+33 => x"72057373",
+34 => x"09060906",
+35 => x"73097306",
+36 => x"070a8106",
+37 => x"53510400",
+38 => x"00000000",
+39 => x"00000000",
+40 => x"72722473",
+41 => x"732e0753",
+42 => x"51040000",
+43 => x"00000000",
+44 => x"00000000",
+45 => x"00000000",
+46 => x"00000000",
+47 => x"00000000",
+48 => x"71737109",
+49 => x"71068106",
+50 => x"30720a10",
+51 => x"0a720a10",
+52 => x"0a31050a",
+53 => x"81065151",
+54 => x"53510400",
+55 => x"00000000",
+56 => x"72722673",
+57 => x"732e0753",
+58 => x"51040000",
+59 => x"00000000",
+60 => x"00000000",
+61 => x"00000000",
+62 => x"00000000",
+63 => x"00000000",
+64 => x"00000000",
+65 => x"00000000",
+66 => x"00000000",
+67 => x"00000000",
+68 => x"00000000",
+69 => x"00000000",
+70 => x"00000000",
+71 => x"00000000",
+72 => x"0b0b0b88",
+73 => x"c4040000",
+74 => x"00000000",
+75 => x"00000000",
+76 => x"00000000",
+77 => x"00000000",
+78 => x"00000000",
+79 => x"00000000",
+80 => x"720a722b",
+81 => x"0a535104",
+82 => x"00000000",
+83 => x"00000000",
+84 => x"00000000",
+85 => x"00000000",
+86 => x"00000000",
+87 => x"00000000",
+88 => x"72729f06",
+89 => x"0981050b",
+90 => x"0b0b88a7",
+91 => x"05040000",
+92 => x"00000000",
+93 => x"00000000",
+94 => x"00000000",
+95 => x"00000000",
+96 => x"72722aff",
+97 => x"739f062a",
+98 => x"0974090a",
+99 => x"8106ff05",
+100 => x"06075351",
+101 => x"04000000",
+102 => x"00000000",
+103 => x"00000000",
+104 => x"71715351",
+105 => x"020d0406",
+106 => x"73830609",
+107 => x"81058205",
+108 => x"832b0b2b",
+109 => x"0772fc06",
+110 => x"0c515104",
+111 => x"00000000",
+112 => x"72098105",
+113 => x"72050970",
+114 => x"81050906",
+115 => x"0a810653",
+116 => x"51040000",
+117 => x"00000000",
+118 => x"00000000",
+119 => x"00000000",
+120 => x"72098105",
+121 => x"72050970",
+122 => x"81050906",
+123 => x"0a098106",
+124 => x"53510400",
+125 => x"00000000",
+126 => x"00000000",
+127 => x"00000000",
+128 => x"71098105",
+129 => x"52040000",
+130 => x"00000000",
+131 => x"00000000",
+132 => x"00000000",
+133 => x"00000000",
+134 => x"00000000",
+135 => x"00000000",
+136 => x"72720981",
+137 => x"05055351",
+138 => x"04000000",
+139 => x"00000000",
+140 => x"00000000",
+141 => x"00000000",
+142 => x"00000000",
+143 => x"00000000",
+144 => x"72097206",
+145 => x"73730906",
+146 => x"07535104",
+147 => x"00000000",
+148 => x"00000000",
+149 => x"00000000",
+150 => x"00000000",
+151 => x"00000000",
+152 => x"71fc0608",
+153 => x"72830609",
+154 => x"81058305",
+155 => x"1010102a",
+156 => x"81ff0652",
+157 => x"04000000",
+158 => x"00000000",
+159 => x"00000000",
+160 => x"71fc0608",
+161 => x"0b0b80cf",
+162 => x"c4738306",
+163 => x"10100508",
+164 => x"060b0b0b",
+165 => x"88aa0400",
+166 => x"00000000",
+167 => x"00000000",
+168 => x"80088408",
+169 => x"88087575",
+170 => x"0b0b0b8b",
+171 => x"9f2d5050",
+172 => x"80085688",
+173 => x"0c840c80",
+174 => x"0c510400",
+175 => x"00000000",
+176 => x"80088408",
+177 => x"88087575",
+178 => x"0b0b0b8b",
+179 => x"e32d5050",
+180 => x"80085688",
+181 => x"0c840c80",
+182 => x"0c510400",
+183 => x"00000000",
+184 => x"72097081",
+185 => x"0509060a",
+186 => x"8106ff05",
+187 => x"70547106",
+188 => x"73097274",
+189 => x"05ff0506",
+190 => x"07515151",
+191 => x"04000000",
+192 => x"72097081",
+193 => x"0509060a",
+194 => x"098106ff",
+195 => x"05705471",
+196 => x"06730972",
+197 => x"7405ff05",
+198 => x"06075151",
+199 => x"51040000",
+200 => x"05ff0504",
+201 => x"00000000",
+202 => x"00000000",
+203 => x"00000000",
+204 => x"00000000",
+205 => x"00000000",
+206 => x"00000000",
+207 => x"00000000",
+208 => x"810b0b0b",
+209 => x"80cfd40c",
+210 => x"51040000",
+211 => x"00000000",
+212 => x"00000000",
+213 => x"00000000",
+214 => x"00000000",
+215 => x"00000000",
+216 => x"71810552",
+217 => x"04000000",
+218 => x"00000000",
+219 => x"00000000",
+220 => x"00000000",
+221 => x"00000000",
+222 => x"00000000",
+223 => x"00000000",
+224 => x"00000000",
+225 => x"00000000",
+226 => x"00000000",
+227 => x"00000000",
+228 => x"00000000",
+229 => x"00000000",
+230 => x"00000000",
+231 => x"00000000",
+232 => x"02840572",
+233 => x"10100552",
+234 => x"04000000",
+235 => x"00000000",
+236 => x"00000000",
+237 => x"00000000",
+238 => x"00000000",
+239 => x"00000000",
+240 => x"00000000",
+241 => x"00000000",
+242 => x"00000000",
+243 => x"00000000",
+244 => x"00000000",
+245 => x"00000000",
+246 => x"00000000",
+247 => x"00000000",
+248 => x"717105ff",
+249 => x"05715351",
+250 => x"020d0400",
+251 => x"00000000",
+252 => x"00000000",
+253 => x"00000000",
+254 => x"00000000",
+255 => x"00000000",
+256 => x"82c53f80",
+257 => x"c6d93f04",
+258 => x"10101010",
+259 => x"10101010",
+260 => x"10101010",
+261 => x"10101010",
+262 => x"10101010",
+263 => x"10101010",
+264 => x"10101010",
+265 => x"10101053",
+266 => x"51047381",
+267 => x"ff067383",
+268 => x"06098105",
+269 => x"83051010",
+270 => x"102b0772",
+271 => x"fc060c51",
+272 => x"51043c04",
+273 => x"72728072",
+274 => x"8106ff05",
+275 => x"09720605",
+276 => x"71105272",
+277 => x"0a100a53",
+278 => x"72ed3851",
+279 => x"51535104",
+280 => x"fe3d0d0b",
+281 => x"0b80dfc0",
+282 => x"08538413",
+283 => x"0870882a",
+284 => x"70810651",
+285 => x"52527080",
+286 => x"2ef03871",
+287 => x"81ff0680",
+288 => x"0c843d0d",
+289 => x"04ff3d0d",
+290 => x"0b0b80df",
+291 => x"c0085271",
+292 => x"0870882a",
+293 => x"81327081",
+294 => x"06515151",
+295 => x"70f13873",
+296 => x"720c833d",
+297 => x"0d0480cf",
+298 => x"d408802e",
+299 => x"a43880cf",
+300 => x"d808822e",
+301 => x"bd388380",
+302 => x"800b0b0b",
+303 => x"80dfc00c",
+304 => x"82a0800b",
+305 => x"80dfc40c",
+306 => x"8290800b",
+307 => x"80dfc80c",
+308 => x"04f88080",
+309 => x"80a40b0b",
+310 => x"0b80dfc0",
+311 => x"0cf88080",
+312 => x"82800b80",
+313 => x"dfc40cf8",
+314 => x"80808480",
+315 => x"0b80dfc8",
+316 => x"0c0480c0",
+317 => x"a8808c0b",
+318 => x"0b0b80df",
+319 => x"c00c80c0",
+320 => x"a880940b",
+321 => x"80dfc40c",
+322 => x"0b0b80cf",
+323 => x"8c0b80df",
+324 => x"c80c0470",
+325 => x"7080dfcc",
+326 => x"335170a7",
+327 => x"3880cfe0",
+328 => x"08700852",
+329 => x"5270802e",
+330 => x"94388412",
+331 => x"80cfe00c",
+332 => x"702d80cf",
+333 => x"e0087008",
+334 => x"525270ee",
+335 => x"38810b80",
+336 => x"dfcc3450",
+337 => x"50040470",
+338 => x"0b0b80df",
+339 => x"bc08802e",
+340 => x"8e380b0b",
+341 => x"0b0b800b",
+342 => x"802e0981",
+343 => x"06833850",
+344 => x"040b0b80",
+345 => x"dfbc510b",
+346 => x"0b0bf594",
+347 => x"3f500404",
+348 => x"fe3d0d89",
+349 => x"5380cf90",
+350 => x"5182c13f",
+351 => x"80cfa051",
+352 => x"82ba3f81",
+353 => x"0a0b80df",
+354 => x"d80cff0b",
+355 => x"80dfdc0c",
+356 => x"ff135372",
+357 => x"8025de38",
+358 => x"72800c84",
+359 => x"3d0d04fb",
+360 => x"3d0d7779",
+361 => x"55558056",
+362 => x"757524ab",
+363 => x"38807424",
+364 => x"9d388053",
+365 => x"73527451",
+366 => x"80e13f80",
+367 => x"08547580",
+368 => x"2e853880",
+369 => x"08305473",
+370 => x"800c873d",
+371 => x"0d047330",
+372 => x"76813257",
+373 => x"54dc3974",
+374 => x"30558156",
+375 => x"738025d2",
+376 => x"38ec39fa",
+377 => x"3d0d787a",
+378 => x"57558057",
+379 => x"767524a4",
+380 => x"38759f2c",
+381 => x"54815375",
+382 => x"74327431",
+383 => x"5274519b",
+384 => x"3f800854",
+385 => x"76802e85",
+386 => x"38800830",
+387 => x"5473800c",
+388 => x"883d0d04",
+389 => x"74305581",
+390 => x"57d739fc",
+391 => x"3d0d7678",
+392 => x"53548153",
+393 => x"80747326",
+394 => x"52557280",
+395 => x"2e983870",
+396 => x"802eab38",
+397 => x"807224a6",
+398 => x"38711073",
+399 => x"10757226",
+400 => x"53545272",
+401 => x"ea387351",
+402 => x"78833874",
+403 => x"5170800c",
+404 => x"863d0d04",
+405 => x"720a100a",
+406 => x"720a100a",
+407 => x"53537280",
+408 => x"2ee43871",
+409 => x"7426ed38",
+410 => x"73723175",
+411 => x"7407740a",
+412 => x"100a740a",
+413 => x"100a5555",
+414 => x"5654e339",
+415 => x"f73d0d7c",
+416 => x"70525380",
+417 => x"f93f7254",
+418 => x"80085580",
+419 => x"cfb05681",
+420 => x"57800881",
+421 => x"055a8b3d",
+422 => x"e4115953",
+423 => x"8259f413",
+424 => x"527b8811",
+425 => x"08525381",
+426 => x"b23f8008",
+427 => x"30708008",
+428 => x"079f2c8a",
+429 => x"07800c53",
+430 => x"8b3d0d04",
+431 => x"f63d0d7c",
+432 => x"80cfe408",
+433 => x"71535553",
+434 => x"b53f7255",
+435 => x"80085680",
+436 => x"cfb05781",
+437 => x"58800881",
+438 => x"055b8c3d",
+439 => x"e4115a53",
+440 => x"825af413",
+441 => x"52881408",
+442 => x"5180f03f",
+443 => x"80083070",
+444 => x"8008079f",
+445 => x"2c8a0780",
+446 => x"0c548c3d",
+447 => x"0d047070",
+448 => x"70707570",
+449 => x"71830653",
+450 => x"555270b4",
+451 => x"38717008",
+452 => x"7009f7fb",
+453 => x"fdff1206",
+454 => x"f8848281",
+455 => x"80065452",
+456 => x"53719b38",
+457 => x"84137008",
+458 => x"7009f7fb",
+459 => x"fdff1206",
+460 => x"f8848281",
+461 => x"80065452",
+462 => x"5371802e",
+463 => x"e7387252",
+464 => x"71335372",
+465 => x"802e8a38",
+466 => x"81127033",
+467 => x"545272f8",
+468 => x"38717431",
+469 => x"800c5050",
+470 => x"505004f2",
+471 => x"3d0d6062",
+472 => x"88110870",
+473 => x"58565f5a",
+474 => x"73802e81",
+475 => x"8c388c1a",
+476 => x"2270832a",
+477 => x"81328106",
+478 => x"56587486",
+479 => x"38901a08",
+480 => x"91387951",
+481 => x"90b73fff",
+482 => x"55800880",
+483 => x"ec388c1a",
+484 => x"22587d08",
+485 => x"55807883",
+486 => x"ffff0670",
+487 => x"0a100a81",
+488 => x"06415c57",
+489 => x"7e772e80",
+490 => x"d7387690",
+491 => x"38740884",
+492 => x"16088817",
+493 => x"57585676",
+494 => x"802ef238",
+495 => x"76548880",
+496 => x"77278438",
+497 => x"88805473",
+498 => x"5375529c",
+499 => x"1a0851a4",
+500 => x"1a085877",
+501 => x"2d800b80",
+502 => x"082582e0",
+503 => x"38800816",
+504 => x"77800831",
+505 => x"7f880508",
+506 => x"80083170",
+507 => x"6188050c",
+508 => x"5b585678",
+509 => x"ffb43880",
+510 => x"5574800c",
+511 => x"903d0d04",
+512 => x"7a813281",
+513 => x"06774056",
+514 => x"75802e81",
+515 => x"bd387690",
+516 => x"38740884",
+517 => x"16088817",
+518 => x"57585976",
+519 => x"802ef238",
+520 => x"881a0878",
+521 => x"83ffff06",
+522 => x"70892a81",
+523 => x"06565956",
+524 => x"73802e82",
+525 => x"f8387577",
+526 => x"278b3877",
+527 => x"872a8106",
+528 => x"5c7b82b5",
+529 => x"38767627",
+530 => x"83387656",
+531 => x"75537852",
+532 => x"79085185",
+533 => x"833f881a",
+534 => x"08763188",
+535 => x"1b0c7908",
+536 => x"167a0c76",
+537 => x"56751977",
+538 => x"77317f88",
+539 => x"05087831",
+540 => x"70618805",
+541 => x"0c415859",
+542 => x"7e802efe",
+543 => x"fa388c1a",
+544 => x"2258ff8a",
+545 => x"39787954",
+546 => x"7c537b52",
+547 => x"5684c93f",
+548 => x"881a0879",
+549 => x"31881b0c",
+550 => x"7908197a",
+551 => x"0c7c7631",
+552 => x"5d7c8e38",
+553 => x"79518ff2",
+554 => x"3f800881",
+555 => x"8f388008",
+556 => x"5f751c77",
+557 => x"77317f88",
+558 => x"05087831",
+559 => x"70618805",
+560 => x"0c5d585c",
+561 => x"7a802efe",
+562 => x"ae387681",
+563 => x"83387408",
+564 => x"84160888",
+565 => x"1757585c",
+566 => x"76802ef2",
+567 => x"3876538a",
+568 => x"527b5182",
+569 => x"d33f8008",
+570 => x"7c318105",
+571 => x"5d800884",
+572 => x"3881175d",
+573 => x"815f7c59",
+574 => x"767d2783",
+575 => x"38765994",
+576 => x"1a08881b",
+577 => x"08115758",
+578 => x"807a085c",
+579 => x"54901a08",
+580 => x"7b278338",
+581 => x"81547579",
+582 => x"25843873",
+583 => x"ba387779",
+584 => x"24fee238",
+585 => x"77537b52",
+586 => x"9c1a0851",
+587 => x"a41a0859",
+588 => x"782d8008",
+589 => x"56800880",
+590 => x"24fee238",
+591 => x"8c1a2280",
+592 => x"c0075e7d",
+593 => x"8c1b23ff",
+594 => x"5574800c",
+595 => x"903d0d04",
+596 => x"7effa338",
+597 => x"ff873975",
+598 => x"537b527a",
+599 => x"5182f93f",
+600 => x"7908167a",
+601 => x"0c79518e",
+602 => x"b13f8008",
+603 => x"cf387c76",
+604 => x"315d7cfe",
+605 => x"bc38feac",
+606 => x"39901a08",
+607 => x"7a087131",
+608 => x"78117056",
+609 => x"5a575280",
+610 => x"cfe40851",
+611 => x"84943f80",
+612 => x"08802eff",
+613 => x"a7388008",
+614 => x"901b0c80",
+615 => x"08167a0c",
+616 => x"77941b0c",
+617 => x"76881b0c",
+618 => x"7656fd99",
+619 => x"39790858",
+620 => x"901a0878",
+621 => x"27833881",
+622 => x"54757727",
+623 => x"843873b3",
+624 => x"38941a08",
+625 => x"54737726",
+626 => x"80d33873",
+627 => x"5378529c",
+628 => x"1a0851a4",
+629 => x"1a085877",
+630 => x"2d800856",
+631 => x"80088024",
+632 => x"fd83388c",
+633 => x"1a2280c0",
+634 => x"075e7d8c",
+635 => x"1b23ff55",
+636 => x"fed73975",
+637 => x"53785277",
+638 => x"5181dd3f",
+639 => x"7908167a",
+640 => x"0c79518d",
+641 => x"953f8008",
+642 => x"802efcd9",
+643 => x"388c1a22",
+644 => x"80c0075e",
+645 => x"7d8c1b23",
+646 => x"ff55fead",
+647 => x"39767754",
+648 => x"79537852",
+649 => x"5681b13f",
+650 => x"881a0877",
+651 => x"31881b0c",
+652 => x"7908177a",
+653 => x"0cfcae39",
+654 => x"fa3d0d7a",
+655 => x"79028805",
+656 => x"a7053355",
+657 => x"53548374",
+658 => x"2780df38",
+659 => x"71830651",
+660 => x"7080d738",
+661 => x"71715755",
+662 => x"83517582",
+663 => x"802913ff",
+664 => x"12525670",
+665 => x"8025f338",
+666 => x"837427bc",
+667 => x"38740876",
+668 => x"327009f7",
+669 => x"fbfdff12",
+670 => x"06f88482",
+671 => x"81800651",
+672 => x"5170802e",
+673 => x"98387451",
+674 => x"80527033",
+675 => x"5772772e",
+676 => x"b9388111",
+677 => x"81135351",
+678 => x"837227ee",
+679 => x"38fc1484",
+680 => x"16565473",
+681 => x"8326c638",
+682 => x"7452ff14",
+683 => x"5170ff2e",
+684 => x"97387133",
+685 => x"5472742e",
+686 => x"98388112",
+687 => x"ff125252",
+688 => x"70ff2e09",
+689 => x"8106eb38",
+690 => x"80517080",
+691 => x"0c883d0d",
+692 => x"0471800c",
+693 => x"883d0d04",
+694 => x"fa3d0d78",
+695 => x"7a7c7272",
+696 => x"72595755",
+697 => x"58565774",
+698 => x"7727b238",
+699 => x"75155176",
+700 => x"7127aa38",
+701 => x"707618ff",
+702 => x"18535353",
+703 => x"70ff2e96",
+704 => x"38ff12ff",
+705 => x"14545272",
+706 => x"337234ff",
+707 => x"115170ff",
+708 => x"2e098106",
+709 => x"ec387680",
+710 => x"0c883d0d",
+711 => x"048f7627",
+712 => x"80e63874",
+713 => x"77078306",
+714 => x"517080dc",
+715 => x"38767552",
+716 => x"53707084",
+717 => x"05520873",
+718 => x"70840555",
+719 => x"0c727170",
+720 => x"84055308",
+721 => x"71708405",
+722 => x"530c7170",
+723 => x"84055308",
+724 => x"71708405",
+725 => x"530c7170",
+726 => x"84055308",
+727 => x"71708405",
+728 => x"530cf015",
+729 => x"5553738f",
+730 => x"26c73883",
+731 => x"74279538",
+732 => x"70708405",
+733 => x"52087370",
+734 => x"8405550c",
+735 => x"fc145473",
+736 => x"8326ed38",
+737 => x"72715452",
+738 => x"ff145170",
+739 => x"ff2eff86",
+740 => x"38727081",
+741 => x"05543372",
+742 => x"70810554",
+743 => x"34ff1151",
+744 => x"ea39ef3d",
+745 => x"0d636567",
+746 => x"405d427b",
+747 => x"802e8582",
+748 => x"386151a9",
+749 => x"e73ff81c",
+750 => x"70841208",
+751 => x"70fc0670",
+752 => x"628b0570",
+753 => x"f8064159",
+754 => x"455c5f41",
+755 => x"57967427",
+756 => x"82c53880",
+757 => x"7b247e7c",
+758 => x"26075880",
+759 => x"5477742e",
+760 => x"09810682",
+761 => x"ab38787b",
+762 => x"2581fe38",
+763 => x"781780d7",
+764 => x"a00b8805",
+765 => x"085b5679",
+766 => x"762e84c5",
+767 => x"38841608",
+768 => x"70fe0617",
+769 => x"84110881",
+770 => x"06415555",
+771 => x"7e828d38",
+772 => x"74fc0658",
+773 => x"79762e84",
+774 => x"e3387818",
+775 => x"5f7e7b25",
+776 => x"81ff387c",
+777 => x"81065473",
+778 => x"82c13876",
+779 => x"77083184",
+780 => x"1108fc06",
+781 => x"56577580",
+782 => x"2e913879",
+783 => x"762e84f0",
+784 => x"38741819",
+785 => x"58777b25",
+786 => x"84913876",
+787 => x"802e829b",
+788 => x"38781556",
+789 => x"7a762482",
+790 => x"92388c17",
+791 => x"08881808",
+792 => x"718c120c",
+793 => x"88120c5e",
+794 => x"75598817",
+795 => x"61fc055b",
+796 => x"5679a426",
+797 => x"85ff387b",
+798 => x"76595593",
+799 => x"7a2780c9",
+800 => x"387b7084",
+801 => x"055d087c",
+802 => x"56760c74",
+803 => x"70840556",
+804 => x"088c180c",
+805 => x"9017589b",
+806 => x"7a27ae38",
+807 => x"74708405",
+808 => x"5608780c",
+809 => x"74708405",
+810 => x"56089418",
+811 => x"0c981758",
+812 => x"a37a2795",
+813 => x"38747084",
+814 => x"05560878",
+815 => x"0c747084",
+816 => x"0556089c",
+817 => x"180ca017",
+818 => x"58747084",
+819 => x"05560875",
+820 => x"5f787084",
+821 => x"055a0c77",
+822 => x"7e708405",
+823 => x"40087170",
+824 => x"8405530c",
+825 => x"7e08710c",
+826 => x"5d787b31",
+827 => x"56758f26",
+828 => x"80c93884",
+829 => x"17088106",
+830 => x"79078418",
+831 => x"0c781784",
+832 => x"11088107",
+833 => x"84120c5b",
+834 => x"6151a791",
+835 => x"3f881754",
+836 => x"73800c93",
+837 => x"3d0d0490",
+838 => x"5bfdb839",
+839 => x"7756fe83",
+840 => x"398c1608",
+841 => x"88170871",
+842 => x"8c120c88",
+843 => x"120c587e",
+844 => x"707c3157",
+845 => x"598f7627",
+846 => x"ffb9387a",
+847 => x"17841808",
+848 => x"81067c07",
+849 => x"84190c76",
+850 => x"81078412",
+851 => x"0c761184",
+852 => x"11088107",
+853 => x"84120c5b",
+854 => x"88055261",
+855 => x"518fda3f",
+856 => x"6151a6b9",
+857 => x"3f881754",
+858 => x"ffa6397d",
+859 => x"52615197",
+860 => x"d73f8008",
+861 => x"5a800880",
+862 => x"2e81ab38",
+863 => x"8008f805",
+864 => x"60840508",
+865 => x"fe066105",
+866 => x"58557477",
+867 => x"2e83f238",
+868 => x"fc195877",
+869 => x"a42681b0",
+870 => x"387b8008",
+871 => x"56579378",
+872 => x"2780dc38",
+873 => x"7b707084",
+874 => x"05520880",
+875 => x"08708405",
+876 => x"800c0c80",
+877 => x"08717084",
+878 => x"0553085d",
+879 => x"567b7670",
+880 => x"8405580c",
+881 => x"579b7827",
+882 => x"b6387670",
+883 => x"84055808",
+884 => x"75708405",
+885 => x"570c7670",
+886 => x"84055808",
+887 => x"75708405",
+888 => x"570ca378",
+889 => x"27993876",
+890 => x"70840558",
+891 => x"08757084",
+892 => x"05570c76",
+893 => x"70840558",
+894 => x"08757084",
+895 => x"05570c76",
+896 => x"70840558",
+897 => x"08775e75",
+898 => x"70840557",
+899 => x"0c747d70",
+900 => x"84055f08",
+901 => x"71708405",
+902 => x"530c7d08",
+903 => x"710c5f7b",
+904 => x"5261518e",
+905 => x"943f6151",
+906 => x"a4f33f79",
+907 => x"800c933d",
+908 => x"0d047d52",
+909 => x"61519690",
+910 => x"3f800880",
+911 => x"0c933d0d",
+912 => x"04841608",
+913 => x"55fbc939",
+914 => x"77537b52",
+915 => x"800851a2",
+916 => x"a53f7b52",
+917 => x"61518de1",
+918 => x"3fcc398c",
+919 => x"16088817",
+920 => x"08718c12",
+921 => x"0c88120c",
+922 => x"5d8c1708",
+923 => x"88180871",
+924 => x"8c120c88",
+925 => x"120c5977",
+926 => x"59fbef39",
+927 => x"7818901c",
+928 => x"40557e75",
+929 => x"24fb9c38",
+930 => x"7a177080",
+931 => x"d7a00b88",
+932 => x"050c757c",
+933 => x"31810784",
+934 => x"120c5684",
+935 => x"17088106",
+936 => x"7b078418",
+937 => x"0c6151a3",
+938 => x"f43f8817",
+939 => x"54fce139",
+940 => x"74181990",
+941 => x"1c5e5a7c",
+942 => x"7a24fb8f",
+943 => x"388c1708",
+944 => x"88180871",
+945 => x"8c120c88",
+946 => x"120c5e88",
+947 => x"1761fc05",
+948 => x"575975a4",
+949 => x"2681b638",
+950 => x"7b795955",
+951 => x"93762780",
+952 => x"c9387b70",
+953 => x"84055d08",
+954 => x"7c56790c",
+955 => x"74708405",
+956 => x"56088c18",
+957 => x"0c901758",
+958 => x"9b7627ae",
+959 => x"38747084",
+960 => x"05560878",
+961 => x"0c747084",
+962 => x"05560894",
+963 => x"180c9817",
+964 => x"58a37627",
+965 => x"95387470",
+966 => x"84055608",
+967 => x"780c7470",
+968 => x"84055608",
+969 => x"9c180ca0",
+970 => x"17587470",
+971 => x"84055608",
+972 => x"75417870",
+973 => x"84055a0c",
+974 => x"77607084",
+975 => x"05420871",
+976 => x"70840553",
+977 => x"0c600871",
+978 => x"0c5e7a17",
+979 => x"7080d7a0",
+980 => x"0b88050c",
+981 => x"7a7c3181",
+982 => x"0784120c",
+983 => x"58841708",
+984 => x"81067b07",
+985 => x"84180c61",
+986 => x"51a2b23f",
+987 => x"78547380",
+988 => x"0c933d0d",
+989 => x"0479537b",
+990 => x"5275519f",
+991 => x"f93ffae9",
+992 => x"39841508",
+993 => x"fc061960",
+994 => x"5859fadd",
+995 => x"3975537b",
+996 => x"5278519f",
+997 => x"e13f7a17",
+998 => x"7080d7a0",
+999 => x"0b88050c",
+1000 => x"7a7c3181",
+1001 => x"0784120c",
+1002 => x"58841708",
+1003 => x"81067b07",
+1004 => x"84180c61",
+1005 => x"51a1e63f",
+1006 => x"7854ffb2",
+1007 => x"39fa3d0d",
+1008 => x"7880cfe4",
+1009 => x"085455b8",
+1010 => x"1308802e",
+1011 => x"81af388c",
+1012 => x"15227083",
+1013 => x"ffff0670",
+1014 => x"832a8132",
+1015 => x"81065555",
+1016 => x"5672802e",
+1017 => x"80da3873",
+1018 => x"842a8132",
+1019 => x"810657ff",
+1020 => x"537680f2",
+1021 => x"3873822a",
+1022 => x"81065473",
+1023 => x"802eb938",
+1024 => x"b0150854",
+1025 => x"73802e9c",
+1026 => x"3880c015",
+1027 => x"5373732e",
+1028 => x"8f387352",
+1029 => x"80cfe408",
+1030 => x"518a9e3f",
+1031 => x"8c152256",
+1032 => x"76b0160c",
+1033 => x"75db0657",
+1034 => x"768c1623",
+1035 => x"800b8416",
+1036 => x"0c901508",
+1037 => x"750c7656",
+1038 => x"75880754",
+1039 => x"738c1623",
+1040 => x"90150880",
+1041 => x"2ebf388c",
+1042 => x"15227081",
+1043 => x"06555373",
+1044 => x"9c38720a",
+1045 => x"100a8106",
+1046 => x"56758538",
+1047 => x"94150854",
+1048 => x"7388160c",
+1049 => x"80537280",
+1050 => x"0c883d0d",
+1051 => x"04800b88",
+1052 => x"160c9415",
+1053 => x"08309816",
+1054 => x"0c8053ea",
+1055 => x"39725182",
+1056 => x"a63ffecb",
+1057 => x"3974518f",
+1058 => x"bc3f8c15",
+1059 => x"22708106",
+1060 => x"55537380",
+1061 => x"2effbb38",
+1062 => x"d439f83d",
+1063 => x"0d7a5776",
+1064 => x"802e8197",
+1065 => x"3880cfe4",
+1066 => x"0854b814",
+1067 => x"08802e80",
+1068 => x"eb388c17",
+1069 => x"2270902b",
+1070 => x"70902c70",
+1071 => x"832a8132",
+1072 => x"81065b5b",
+1073 => x"57557780",
+1074 => x"cb389017",
+1075 => x"08567580",
+1076 => x"2e80c138",
+1077 => x"76087631",
+1078 => x"76780c79",
+1079 => x"83065555",
+1080 => x"73853894",
+1081 => x"17085877",
+1082 => x"88180c80",
+1083 => x"7525a538",
+1084 => x"74537552",
+1085 => x"9c170851",
+1086 => x"a4170854",
+1087 => x"732d800b",
+1088 => x"80082580",
+1089 => x"c9388008",
+1090 => x"16758008",
+1091 => x"31565674",
+1092 => x"8024dd38",
+1093 => x"800b800c",
+1094 => x"8a3d0d04",
+1095 => x"73518187",
+1096 => x"3f8c1722",
+1097 => x"70902b70",
+1098 => x"902c7083",
+1099 => x"2a813281",
+1100 => x"065b5b57",
+1101 => x"5577dd38",
+1102 => x"ff9039a1",
+1103 => x"9a5280cf",
+1104 => x"e408518c",
+1105 => x"d03f8008",
+1106 => x"800c8a3d",
+1107 => x"0d048c17",
+1108 => x"2280c007",
+1109 => x"58778c18",
+1110 => x"23ff0b80",
+1111 => x"0c8a3d0d",
+1112 => x"04fa3d0d",
+1113 => x"797080dc",
+1114 => x"298c1154",
+1115 => x"7a535657",
+1116 => x"8fd63f80",
+1117 => x"08800855",
+1118 => x"56800880",
+1119 => x"2ea23880",
+1120 => x"088c0554",
+1121 => x"800b8008",
+1122 => x"0c768008",
+1123 => x"84050c73",
+1124 => x"80088805",
+1125 => x"0c745380",
+1126 => x"5273519c",
+1127 => x"f53f7554",
+1128 => x"73800c88",
+1129 => x"3d0d0470",
+1130 => x"707074a8",
+1131 => x"e60bbc12",
+1132 => x"0c53810b",
+1133 => x"b8140c80",
+1134 => x"0b84dc14",
+1135 => x"0c830b84",
+1136 => x"e0140c84",
+1137 => x"e81384e4",
+1138 => x"140c8413",
+1139 => x"08518070",
+1140 => x"720c7084",
+1141 => x"130c7088",
+1142 => x"130c5284",
+1143 => x"0b8c1223",
+1144 => x"718e1223",
+1145 => x"7190120c",
+1146 => x"7194120c",
+1147 => x"7198120c",
+1148 => x"709c120c",
+1149 => x"80c1d50b",
+1150 => x"a0120c80",
+1151 => x"c2a10ba4",
+1152 => x"120c80c3",
+1153 => x"9d0ba812",
+1154 => x"0c80c3ee",
+1155 => x"0bac120c",
+1156 => x"88130872",
+1157 => x"710c7284",
+1158 => x"120c7288",
+1159 => x"120c5189",
+1160 => x"0b8c1223",
+1161 => x"810b8e12",
+1162 => x"23719012",
+1163 => x"0c719412",
+1164 => x"0c719812",
+1165 => x"0c709c12",
+1166 => x"0c80c1d5",
+1167 => x"0ba0120c",
+1168 => x"80c2a10b",
+1169 => x"a4120c80",
+1170 => x"c39d0ba8",
+1171 => x"120c80c3",
+1172 => x"ee0bac12",
+1173 => x"0c8c1308",
+1174 => x"72710c72",
+1175 => x"84120c72",
+1176 => x"88120c51",
+1177 => x"8a0b8c12",
+1178 => x"23820b8e",
+1179 => x"12237190",
+1180 => x"120c7194",
+1181 => x"120c7198",
+1182 => x"120c709c",
+1183 => x"120c80c1",
+1184 => x"d50ba012",
+1185 => x"0c80c2a1",
+1186 => x"0ba4120c",
+1187 => x"80c39d0b",
+1188 => x"a8120c80",
+1189 => x"c3ee0bac",
+1190 => x"120c5050",
+1191 => x"5004f83d",
+1192 => x"0d7a80cf",
+1193 => x"e408b811",
+1194 => x"08575758",
+1195 => x"7481ec38",
+1196 => x"a8e60bbc",
+1197 => x"170c810b",
+1198 => x"b8170c74",
+1199 => x"84dc170c",
+1200 => x"830b84e0",
+1201 => x"170c84e8",
+1202 => x"1684e417",
+1203 => x"0c841608",
+1204 => x"75710c75",
+1205 => x"84120c75",
+1206 => x"88120c59",
+1207 => x"840b8c1a",
+1208 => x"23748e1a",
+1209 => x"2374901a",
+1210 => x"0c74941a",
+1211 => x"0c74981a",
+1212 => x"0c789c1a",
+1213 => x"0c80c1d5",
+1214 => x"0ba01a0c",
+1215 => x"80c2a10b",
+1216 => x"a41a0c80",
+1217 => x"c39d0ba8",
+1218 => x"1a0c80c3",
+1219 => x"ee0bac1a",
+1220 => x"0c881608",
+1221 => x"75710c75",
+1222 => x"84120c75",
+1223 => x"88120c57",
+1224 => x"890b8c18",
+1225 => x"23810b8e",
+1226 => x"18237490",
+1227 => x"180c7494",
+1228 => x"180c7498",
+1229 => x"180c769c",
+1230 => x"180c80c1",
+1231 => x"d50ba018",
+1232 => x"0c80c2a1",
+1233 => x"0ba4180c",
+1234 => x"80c39d0b",
+1235 => x"a8180c80",
+1236 => x"c3ee0bac",
+1237 => x"180c8c16",
+1238 => x"0875710c",
+1239 => x"7584120c",
+1240 => x"7588120c",
+1241 => x"548a0b8c",
+1242 => x"1523820b",
+1243 => x"8e152374",
+1244 => x"90150c74",
+1245 => x"94150c74",
+1246 => x"98150c73",
+1247 => x"9c150c80",
+1248 => x"c1d50ba0",
+1249 => x"150c80c2",
+1250 => x"a10ba415",
+1251 => x"0c80c39d",
+1252 => x"0ba8150c",
+1253 => x"80c3ee0b",
+1254 => x"ac150c84",
+1255 => x"dc168811",
+1256 => x"08841208",
+1257 => x"ff055757",
+1258 => x"57807524",
+1259 => x"9f388c16",
+1260 => x"2270902b",
+1261 => x"70902c51",
+1262 => x"55597380",
+1263 => x"2e80ed38",
+1264 => x"80dc16ff",
+1265 => x"16565674",
+1266 => x"8025e338",
+1267 => x"76085574",
+1268 => x"802e8f38",
+1269 => x"74881108",
+1270 => x"841208ff",
+1271 => x"05575757",
+1272 => x"c83982fc",
+1273 => x"5277518a",
+1274 => x"df3f8008",
+1275 => x"80085556",
+1276 => x"8008802e",
+1277 => x"a3388008",
+1278 => x"8c057580",
+1279 => x"080c5484",
+1280 => x"0b800884",
+1281 => x"050c7380",
+1282 => x"0888050c",
+1283 => x"82f05374",
+1284 => x"52735197",
+1285 => x"fd3f7554",
+1286 => x"7374780c",
+1287 => x"5573ffb4",
+1288 => x"388c780c",
+1289 => x"800b800c",
+1290 => x"8a3d0d04",
+1291 => x"810b8c17",
+1292 => x"2373760c",
+1293 => x"7388170c",
+1294 => x"7384170c",
+1295 => x"7390170c",
+1296 => x"7394170c",
+1297 => x"7398170c",
+1298 => x"ff0b8e17",
+1299 => x"2373b017",
+1300 => x"0c73b417",
+1301 => x"0c7380c4",
+1302 => x"170c7380",
+1303 => x"c8170c75",
+1304 => x"800c8a3d",
+1305 => x"0d047070",
+1306 => x"a19a5273",
+1307 => x"5186a63f",
+1308 => x"50500470",
+1309 => x"70a19a52",
+1310 => x"80cfe408",
+1311 => x"5186963f",
+1312 => x"505004fb",
+1313 => x"3d0d7770",
+1314 => x"52569890",
+1315 => x"3f80d7a0",
+1316 => x"0b880508",
+1317 => x"841108fc",
+1318 => x"06707b31",
+1319 => x"9fef05e0",
+1320 => x"8006e080",
+1321 => x"05525555",
+1322 => x"a0807524",
+1323 => x"94388052",
+1324 => x"755197ea",
+1325 => x"3f80d7a8",
+1326 => x"08145372",
+1327 => x"80082e8f",
+1328 => x"38755197",
+1329 => x"d83f8053",
+1330 => x"72800c87",
+1331 => x"3d0d0474",
+1332 => x"30527551",
+1333 => x"97c83f80",
+1334 => x"08ff2ea8",
+1335 => x"3880d7a0",
+1336 => x"0b880508",
+1337 => x"74763181",
+1338 => x"0784120c",
+1339 => x"5380d6e4",
+1340 => x"08753180",
+1341 => x"d6e40c75",
+1342 => x"5197a23f",
+1343 => x"810b800c",
+1344 => x"873d0d04",
+1345 => x"80527551",
+1346 => x"97943f80",
+1347 => x"d7a00b88",
+1348 => x"05088008",
+1349 => x"71315454",
+1350 => x"8f7325ff",
+1351 => x"a4388008",
+1352 => x"80d79408",
+1353 => x"3180d6e4",
+1354 => x"0c728107",
+1355 => x"84150c75",
+1356 => x"5196ea3f",
+1357 => x"8053ff90",
+1358 => x"39f73d0d",
+1359 => x"7b7d545a",
+1360 => x"72802e82",
+1361 => x"83387951",
+1362 => x"96d23ff8",
+1363 => x"13841108",
+1364 => x"70fe0670",
+1365 => x"13841108",
+1366 => x"fc065c57",
+1367 => x"58545780",
+1368 => x"d7a80874",
+1369 => x"2e82de38",
+1370 => x"7784150c",
+1371 => x"80738106",
+1372 => x"56597479",
+1373 => x"2e81d538",
+1374 => x"77148411",
+1375 => x"08810656",
+1376 => x"5374a038",
+1377 => x"77165678",
+1378 => x"81e63888",
+1379 => x"14085574",
+1380 => x"80d7a82e",
+1381 => x"82f9388c",
+1382 => x"1408708c",
+1383 => x"170c7588",
+1384 => x"120c5875",
+1385 => x"81078418",
+1386 => x"0c751776",
+1387 => x"710c5478",
+1388 => x"81913883",
+1389 => x"ff762781",
+1390 => x"c8387589",
+1391 => x"2a76832a",
+1392 => x"54547380",
+1393 => x"2ebf3875",
+1394 => x"862ab805",
+1395 => x"53847427",
+1396 => x"b43880db",
+1397 => x"14539474",
+1398 => x"27ab3875",
+1399 => x"8c2a80ee",
+1400 => x"055380d4",
+1401 => x"74279e38",
+1402 => x"758f2a80",
+1403 => x"f7055382",
+1404 => x"d4742791",
+1405 => x"3875922a",
+1406 => x"80fc0553",
+1407 => x"8ad47427",
+1408 => x"843880fe",
+1409 => x"53721010",
+1410 => x"1080d7a0",
+1411 => x"05881108",
+1412 => x"55557375",
+1413 => x"2e82bf38",
+1414 => x"841408fc",
+1415 => x"06597579",
+1416 => x"278d3888",
+1417 => x"14085473",
+1418 => x"752e0981",
+1419 => x"06ea388c",
+1420 => x"1408708c",
+1421 => x"190c7488",
+1422 => x"190c7788",
+1423 => x"120c5576",
+1424 => x"8c150c79",
+1425 => x"5194d63f",
+1426 => x"8b3d0d04",
+1427 => x"76087771",
+1428 => x"31587605",
+1429 => x"88180856",
+1430 => x"567480d7",
+1431 => x"a82e80e0",
+1432 => x"388c1708",
+1433 => x"708c170c",
+1434 => x"7588120c",
+1435 => x"53fe8939",
+1436 => x"8814088c",
+1437 => x"1508708c",
+1438 => x"130c5988",
+1439 => x"190cfea3",
+1440 => x"3975832a",
+1441 => x"70545480",
+1442 => x"74248198",
+1443 => x"3872822c",
+1444 => x"81712b80",
+1445 => x"d7a40807",
+1446 => x"80d7a00b",
+1447 => x"84050c74",
+1448 => x"10101080",
+1449 => x"d7a00588",
+1450 => x"1108718c",
+1451 => x"1b0c7088",
+1452 => x"1b0c7988",
+1453 => x"130c565a",
+1454 => x"55768c15",
+1455 => x"0cff8439",
+1456 => x"8159fdb4",
+1457 => x"39771673",
+1458 => x"81065455",
+1459 => x"72983876",
+1460 => x"08777131",
+1461 => x"5875058c",
+1462 => x"18088819",
+1463 => x"08718c12",
+1464 => x"0c88120c",
+1465 => x"55557481",
+1466 => x"0784180c",
+1467 => x"7680d7a0",
+1468 => x"0b88050c",
+1469 => x"80d79c08",
+1470 => x"7526fec7",
+1471 => x"3880d798",
+1472 => x"08527951",
+1473 => x"fafd3f79",
+1474 => x"5193923f",
+1475 => x"feba3981",
+1476 => x"778c170c",
+1477 => x"7788170c",
+1478 => x"758c190c",
+1479 => x"7588190c",
+1480 => x"59fd8039",
+1481 => x"83147082",
+1482 => x"2c81712b",
+1483 => x"80d7a408",
+1484 => x"0780d7a0",
+1485 => x"0b84050c",
+1486 => x"75101010",
+1487 => x"80d7a005",
+1488 => x"88110871",
+1489 => x"8c1c0c70",
+1490 => x"881c0c7a",
+1491 => x"88130c57",
+1492 => x"5b5653fe",
+1493 => x"e4398073",
+1494 => x"24a33872",
+1495 => x"822c8171",
+1496 => x"2b80d7a4",
+1497 => x"080780d7",
+1498 => x"a00b8405",
+1499 => x"0c58748c",
+1500 => x"180c7388",
+1501 => x"180c7688",
+1502 => x"160cfdc3",
+1503 => x"39831370",
+1504 => x"822c8171",
+1505 => x"2b80d7a4",
+1506 => x"080780d7",
+1507 => x"a00b8405",
+1508 => x"0c5953da",
+1509 => x"39f93d0d",
+1510 => x"797b5853",
+1511 => x"800b80cf",
+1512 => x"e4085356",
+1513 => x"72722ebc",
+1514 => x"3884dc13",
+1515 => x"5574762e",
+1516 => x"b3388815",
+1517 => x"08841608",
+1518 => x"ff055454",
+1519 => x"80732499",
+1520 => x"388c1422",
+1521 => x"70902b53",
+1522 => x"587180d4",
+1523 => x"3880dc14",
+1524 => x"ff145454",
+1525 => x"728025e9",
+1526 => x"38740855",
+1527 => x"74d43880",
+1528 => x"cfe40852",
+1529 => x"84dc1255",
+1530 => x"74802ead",
+1531 => x"38881508",
+1532 => x"841608ff",
+1533 => x"05545480",
+1534 => x"73249838",
+1535 => x"8c142270",
+1536 => x"902b5358",
+1537 => x"71ad3880",
+1538 => x"dc14ff14",
+1539 => x"54547280",
+1540 => x"25ea3874",
+1541 => x"085574d5",
+1542 => x"3875800c",
+1543 => x"893d0d04",
+1544 => x"7351762d",
+1545 => x"75800807",
+1546 => x"80dc15ff",
+1547 => x"15555556",
+1548 => x"ffa23973",
+1549 => x"51762d75",
+1550 => x"80080780",
+1551 => x"dc15ff15",
+1552 => x"555556ca",
+1553 => x"39ea3d0d",
+1554 => x"688c1122",
+1555 => x"700a100a",
+1556 => x"81065758",
+1557 => x"567480e4",
+1558 => x"388e1622",
+1559 => x"70902b70",
+1560 => x"902c5155",
+1561 => x"58807424",
+1562 => x"b138983d",
+1563 => x"c4055373",
+1564 => x"5280cfe4",
+1565 => x"08519481",
+1566 => x"3f800b80",
+1567 => x"08249738",
+1568 => x"7983e080",
+1569 => x"06547380",
+1570 => x"c0802e81",
+1571 => x"8f387382",
+1572 => x"80802e81",
+1573 => x"91388c16",
+1574 => x"22577690",
+1575 => x"80075473",
+1576 => x"8c172388",
+1577 => x"805280cf",
+1578 => x"e4085181",
+1579 => x"9b3f8008",
+1580 => x"9d388c16",
+1581 => x"22820755",
+1582 => x"748c1723",
+1583 => x"80c31670",
+1584 => x"770c9017",
+1585 => x"0c810b94",
+1586 => x"170c983d",
+1587 => x"0d0480cf",
+1588 => x"e408a8e6",
+1589 => x"0bbc120c",
+1590 => x"588c1622",
+1591 => x"81800754",
+1592 => x"738c1723",
+1593 => x"8008760c",
+1594 => x"80089017",
+1595 => x"0c88800b",
+1596 => x"94170c74",
+1597 => x"802ed338",
+1598 => x"8e162270",
+1599 => x"902b7090",
+1600 => x"2c535654",
+1601 => x"9afe3f80",
+1602 => x"08802eff",
+1603 => x"bd388c16",
+1604 => x"22810757",
+1605 => x"768c1723",
+1606 => x"983d0d04",
+1607 => x"810b8c17",
+1608 => x"225855fe",
+1609 => x"f539a816",
+1610 => x"0880c39d",
+1611 => x"2e098106",
+1612 => x"fee4388c",
+1613 => x"16228880",
+1614 => x"0754738c",
+1615 => x"17238880",
+1616 => x"0b80cc17",
+1617 => x"0cfedc39",
+1618 => x"f43d0d7e",
+1619 => x"608b1170",
+1620 => x"f8065b55",
+1621 => x"555d7296",
+1622 => x"26833890",
+1623 => x"58807824",
+1624 => x"74792607",
+1625 => x"55805474",
+1626 => x"742e0981",
+1627 => x"0680ca38",
+1628 => x"7c518ea8",
+1629 => x"3f7783f7",
+1630 => x"2680c538",
+1631 => x"77832a70",
+1632 => x"10101080",
+1633 => x"d7a0058c",
+1634 => x"11085858",
+1635 => x"5475772e",
+1636 => x"81f03884",
+1637 => x"1608fc06",
+1638 => x"8c170888",
+1639 => x"1808718c",
+1640 => x"120c8812",
+1641 => x"0c5b7605",
+1642 => x"84110881",
+1643 => x"0784120c",
+1644 => x"537c518d",
+1645 => x"e83f8816",
+1646 => x"5473800c",
+1647 => x"8e3d0d04",
+1648 => x"77892a78",
+1649 => x"832a5854",
+1650 => x"73802ebf",
+1651 => x"3877862a",
+1652 => x"b8055784",
+1653 => x"7427b438",
+1654 => x"80db1457",
+1655 => x"947427ab",
+1656 => x"38778c2a",
+1657 => x"80ee0557",
+1658 => x"80d47427",
+1659 => x"9e38778f",
+1660 => x"2a80f705",
+1661 => x"5782d474",
+1662 => x"27913877",
+1663 => x"922a80fc",
+1664 => x"05578ad4",
+1665 => x"74278438",
+1666 => x"80fe5776",
+1667 => x"10101080",
+1668 => x"d7a0058c",
+1669 => x"11085653",
+1670 => x"74732ea3",
+1671 => x"38841508",
+1672 => x"fc067079",
+1673 => x"31555673",
+1674 => x"8f2488e4",
+1675 => x"38738025",
+1676 => x"88e6388c",
+1677 => x"15085574",
+1678 => x"732e0981",
+1679 => x"06df3881",
+1680 => x"175980d7",
+1681 => x"b0085675",
+1682 => x"80d7a82e",
+1683 => x"82cc3884",
+1684 => x"1608fc06",
+1685 => x"70793155",
+1686 => x"55738f24",
+1687 => x"bb3880d7",
+1688 => x"a80b80d7",
+1689 => x"b40c80d7",
+1690 => x"a80b80d7",
+1691 => x"b00c8074",
+1692 => x"2480db38",
+1693 => x"74168411",
+1694 => x"08810784",
+1695 => x"120c53fe",
+1696 => x"b0398816",
+1697 => x"8c110857",
+1698 => x"5975792e",
+1699 => x"098106fe",
+1700 => x"82388214",
+1701 => x"59ffab39",
+1702 => x"77167881",
+1703 => x"0784180c",
+1704 => x"7080d7b4",
+1705 => x"0c7080d7",
+1706 => x"b00c80d7",
+1707 => x"a80b8c12",
+1708 => x"0c8c1108",
+1709 => x"88120c74",
+1710 => x"81078412",
+1711 => x"0c740574",
+1712 => x"710c5b7c",
+1713 => x"518bd63f",
+1714 => x"881654fd",
+1715 => x"ec3983ff",
+1716 => x"75278391",
+1717 => x"3874892a",
+1718 => x"75832a54",
+1719 => x"5473802e",
+1720 => x"bf387486",
+1721 => x"2ab80553",
+1722 => x"847427b4",
+1723 => x"3880db14",
+1724 => x"53947427",
+1725 => x"ab38748c",
+1726 => x"2a80ee05",
+1727 => x"5380d474",
+1728 => x"279e3874",
+1729 => x"8f2a80f7",
+1730 => x"055382d4",
+1731 => x"74279138",
+1732 => x"74922a80",
+1733 => x"fc05538a",
+1734 => x"d4742784",
+1735 => x"3880fe53",
+1736 => x"72101010",
+1737 => x"80d7a005",
+1738 => x"88110855",
+1739 => x"5773772e",
+1740 => x"868b3884",
+1741 => x"1408fc06",
+1742 => x"5b747b27",
+1743 => x"8d388814",
+1744 => x"08547377",
+1745 => x"2e098106",
+1746 => x"ea388c14",
+1747 => x"0880d7a0",
+1748 => x"0b840508",
+1749 => x"718c190c",
+1750 => x"7588190c",
+1751 => x"7788130c",
+1752 => x"5c57758c",
+1753 => x"150c7853",
+1754 => x"80792483",
+1755 => x"98387282",
+1756 => x"2c81712b",
+1757 => x"5656747b",
+1758 => x"2680ca38",
+1759 => x"7a750657",
+1760 => x"7682a338",
+1761 => x"78fc0684",
+1762 => x"05597410",
+1763 => x"707c0655",
+1764 => x"55738292",
+1765 => x"38841959",
+1766 => x"f13980d7",
+1767 => x"a00b8405",
+1768 => x"0879545b",
+1769 => x"788025c6",
+1770 => x"3882da39",
+1771 => x"74097b06",
+1772 => x"7080d7a0",
+1773 => x"0b84050c",
+1774 => x"5b741055",
+1775 => x"747b2685",
+1776 => x"387485bc",
+1777 => x"3880d7a0",
+1778 => x"0b880508",
+1779 => x"70841208",
+1780 => x"fc06707b",
+1781 => x"317b7226",
+1782 => x"8f722507",
+1783 => x"5d575c5c",
+1784 => x"5578802e",
+1785 => x"80d93879",
+1786 => x"1580d798",
+1787 => x"08199011",
+1788 => x"59545680",
+1789 => x"d79408ff",
+1790 => x"2e8838a0",
+1791 => x"8f13e080",
+1792 => x"06577652",
+1793 => x"7c518996",
+1794 => x"3f800854",
+1795 => x"8008ff2e",
+1796 => x"90388008",
+1797 => x"762782a7",
+1798 => x"387480d7",
+1799 => x"a02e829f",
+1800 => x"3880d7a0",
+1801 => x"0b880508",
+1802 => x"55841508",
+1803 => x"fc067079",
+1804 => x"31797226",
+1805 => x"8f722507",
+1806 => x"5d555a7a",
+1807 => x"83f23877",
+1808 => x"81078416",
+1809 => x"0c771570",
+1810 => x"80d7a00b",
+1811 => x"88050c74",
+1812 => x"81078412",
+1813 => x"0c567c51",
+1814 => x"88c33f88",
+1815 => x"15547380",
+1816 => x"0c8e3d0d",
+1817 => x"0474832a",
+1818 => x"70545480",
+1819 => x"7424819b",
+1820 => x"3872822c",
+1821 => x"81712b80",
+1822 => x"d7a40807",
+1823 => x"7080d7a0",
+1824 => x"0b84050c",
+1825 => x"75101010",
+1826 => x"80d7a005",
+1827 => x"88110871",
+1828 => x"8c1b0c70",
+1829 => x"881b0c79",
+1830 => x"88130c57",
+1831 => x"555c5575",
+1832 => x"8c150cfd",
+1833 => x"c1397879",
+1834 => x"10101080",
+1835 => x"d7a00570",
+1836 => x"565b5c8c",
+1837 => x"14085675",
+1838 => x"742ea338",
+1839 => x"841608fc",
+1840 => x"06707931",
+1841 => x"5853768f",
+1842 => x"2483f138",
+1843 => x"76802584",
+1844 => x"af388c16",
+1845 => x"08567574",
+1846 => x"2e098106",
+1847 => x"df388814",
+1848 => x"811a7083",
+1849 => x"06555a54",
+1850 => x"72c9387b",
+1851 => x"83065675",
+1852 => x"802efdb8",
+1853 => x"38ff1cf8",
+1854 => x"1b5b5c88",
+1855 => x"1a087a2e",
+1856 => x"ea38fdb5",
+1857 => x"39831953",
+1858 => x"fce43983",
+1859 => x"1470822c",
+1860 => x"81712b80",
+1861 => x"d7a40807",
+1862 => x"7080d7a0",
+1863 => x"0b84050c",
+1864 => x"76101010",
+1865 => x"80d7a005",
+1866 => x"88110871",
+1867 => x"8c1c0c70",
+1868 => x"881c0c7a",
+1869 => x"88130c58",
+1870 => x"535d5653",
+1871 => x"fee13980",
+1872 => x"d6e40817",
+1873 => x"59800876",
+1874 => x"2e818b38",
+1875 => x"80d79408",
+1876 => x"ff2e848e",
+1877 => x"38737631",
+1878 => x"1980d6e4",
+1879 => x"0c738706",
+1880 => x"70565372",
+1881 => x"802e8838",
+1882 => x"88733170",
+1883 => x"15555576",
+1884 => x"149fff06",
+1885 => x"a0807131",
+1886 => x"1670547e",
+1887 => x"53515386",
+1888 => x"9d3f8008",
+1889 => x"568008ff",
+1890 => x"2e819e38",
+1891 => x"80d6e408",
+1892 => x"137080d6",
+1893 => x"e40c7475",
+1894 => x"80d7a00b",
+1895 => x"88050c77",
+1896 => x"76311581",
+1897 => x"07555659",
+1898 => x"7a80d7a0",
+1899 => x"2e83c038",
+1900 => x"798f2682",
+1901 => x"ef38810b",
+1902 => x"84150c84",
+1903 => x"1508fc06",
+1904 => x"70793179",
+1905 => x"72268f72",
+1906 => x"25075d55",
+1907 => x"5a7a802e",
+1908 => x"fced3880",
+1909 => x"db398008",
+1910 => x"9fff0655",
+1911 => x"74feed38",
+1912 => x"7880d6e4",
+1913 => x"0c80d7a0",
+1914 => x"0b880508",
+1915 => x"7a188107",
+1916 => x"84120c55",
+1917 => x"80d79008",
+1918 => x"79278638",
+1919 => x"7880d790",
+1920 => x"0c80d78c",
+1921 => x"087927fc",
+1922 => x"a0387880",
+1923 => x"d78c0c84",
+1924 => x"1508fc06",
+1925 => x"70793179",
+1926 => x"72268f72",
+1927 => x"25075d55",
+1928 => x"5a7a802e",
+1929 => x"fc993888",
+1930 => x"39807457",
+1931 => x"53fedd39",
+1932 => x"7c5184e9",
+1933 => x"3f800b80",
+1934 => x"0c8e3d0d",
+1935 => x"04807324",
+1936 => x"a5387282",
+1937 => x"2c81712b",
+1938 => x"80d7a408",
+1939 => x"077080d7",
+1940 => x"a00b8405",
+1941 => x"0c5c5a76",
+1942 => x"8c170c73",
+1943 => x"88170c75",
+1944 => x"88180cf9",
+1945 => x"fd398313",
+1946 => x"70822c81",
+1947 => x"712b80d7",
+1948 => x"a4080770",
+1949 => x"80d7a00b",
+1950 => x"84050c5d",
+1951 => x"5b53d839",
+1952 => x"7a75065c",
+1953 => x"7bfc9f38",
+1954 => x"84197510",
+1955 => x"5659f139",
+1956 => x"ff178105",
+1957 => x"59f7ab39",
+1958 => x"8c150888",
+1959 => x"1608718c",
+1960 => x"120c8812",
+1961 => x"0c597515",
+1962 => x"84110881",
+1963 => x"0784120c",
+1964 => x"587c5183",
+1965 => x"e83f8815",
+1966 => x"54fba339",
+1967 => x"77167881",
+1968 => x"0784180c",
+1969 => x"8c170888",
+1970 => x"1808718c",
+1971 => x"120c8812",
+1972 => x"0c5c7080",
+1973 => x"d7b40c70",
+1974 => x"80d7b00c",
+1975 => x"80d7a80b",
+1976 => x"8c120c8c",
+1977 => x"11088812",
+1978 => x"0c778107",
+1979 => x"84120c77",
+1980 => x"0577710c",
+1981 => x"557c5183",
+1982 => x"a43f8816",
+1983 => x"54f5ba39",
+1984 => x"72168411",
+1985 => x"08810784",
+1986 => x"120c588c",
+1987 => x"16088817",
+1988 => x"08718c12",
+1989 => x"0c88120c",
+1990 => x"577c5183",
+1991 => x"803f8816",
+1992 => x"54f59639",
+1993 => x"7284150c",
+1994 => x"f41af806",
+1995 => x"70841d08",
+1996 => x"81060784",
+1997 => x"1d0c701c",
+1998 => x"5556850b",
+1999 => x"84150c85",
+2000 => x"0b88150c",
+2001 => x"8f7627fd",
+2002 => x"ab38881b",
+2003 => x"527c51eb",
+2004 => x"e83f80d7",
+2005 => x"a00b8805",
+2006 => x"0880d6e4",
+2007 => x"085a55fd",
+2008 => x"93397880",
+2009 => x"d6e40c73",
+2010 => x"80d7940c",
+2011 => x"fbef3972",
+2012 => x"84150cfc",
+2013 => x"ff39fb3d",
+2014 => x"0d77707a",
+2015 => x"7c585553",
+2016 => x"568f7527",
+2017 => x"80e63872",
+2018 => x"76078306",
+2019 => x"517080dc",
+2020 => x"38757352",
+2021 => x"54707084",
+2022 => x"05520874",
+2023 => x"70840556",
+2024 => x"0c737170",
+2025 => x"84055308",
+2026 => x"71708405",
+2027 => x"530c7170",
+2028 => x"84055308",
+2029 => x"71708405",
+2030 => x"530c7170",
+2031 => x"84055308",
+2032 => x"71708405",
+2033 => x"530cf016",
+2034 => x"5654748f",
+2035 => x"26c73883",
+2036 => x"75279538",
+2037 => x"70708405",
+2038 => x"52087470",
+2039 => x"8405560c",
+2040 => x"fc155574",
+2041 => x"8326ed38",
+2042 => x"73715452",
+2043 => x"ff155170",
+2044 => x"ff2e9838",
+2045 => x"72708105",
+2046 => x"54337270",
+2047 => x"81055434",
+2048 => x"ff115170",
+2049 => x"ff2e0981",
+2050 => x"06ea3875",
+2051 => x"800c873d",
+2052 => x"0d04fb3d",
+2053 => x"0d777a71",
+2054 => x"028c05a3",
+2055 => x"05335854",
+2056 => x"54568373",
+2057 => x"2780d438",
+2058 => x"75830651",
+2059 => x"7080cc38",
+2060 => x"74882b75",
+2061 => x"07707190",
+2062 => x"2b075551",
+2063 => x"8f7327a7",
+2064 => x"38737270",
+2065 => x"8405540c",
+2066 => x"71747170",
+2067 => x"8405530c",
+2068 => x"74717084",
+2069 => x"05530c74",
+2070 => x"71708405",
+2071 => x"530cf014",
+2072 => x"5452728f",
+2073 => x"26db3883",
+2074 => x"73279038",
+2075 => x"73727084",
+2076 => x"05540cfc",
+2077 => x"13537283",
+2078 => x"26f238ff",
+2079 => x"135170ff",
+2080 => x"2e933874",
+2081 => x"72708105",
+2082 => x"5434ff11",
+2083 => x"5170ff2e",
+2084 => x"098106ef",
+2085 => x"3875800c",
+2086 => x"873d0d04",
+2087 => x"04047070",
+2088 => x"7070800b",
+2089 => x"80dfe00c",
+2090 => x"765184f3",
+2091 => x"3f800853",
+2092 => x"8008ff2e",
+2093 => x"89387280",
+2094 => x"0c505050",
+2095 => x"500480df",
+2096 => x"e0085473",
+2097 => x"802eef38",
+2098 => x"7574710c",
+2099 => x"5272800c",
+2100 => x"50505050",
+2101 => x"04f93d0d",
+2102 => x"797c557b",
+2103 => x"548e1122",
+2104 => x"70902b70",
+2105 => x"902c5557",
+2106 => x"80cfe408",
+2107 => x"53585683",
+2108 => x"f63f8008",
+2109 => x"57800b80",
+2110 => x"08249338",
+2111 => x"80d01608",
+2112 => x"80080580",
+2113 => x"d0170c76",
+2114 => x"800c893d",
+2115 => x"0d048c16",
+2116 => x"2283dfff",
+2117 => x"0655748c",
+2118 => x"17237680",
+2119 => x"0c893d0d",
+2120 => x"04fa3d0d",
+2121 => x"788c1122",
+2122 => x"70882a70",
+2123 => x"81065157",
+2124 => x"585674a9",
+2125 => x"388c1622",
+2126 => x"83dfff06",
+2127 => x"55748c17",
+2128 => x"237a5479",
+2129 => x"538e1622",
+2130 => x"70902b70",
+2131 => x"902c5456",
+2132 => x"80cfe408",
+2133 => x"525681b2",
+2134 => x"3f883d0d",
+2135 => x"04825480",
+2136 => x"538e1622",
+2137 => x"70902b70",
+2138 => x"902c5456",
+2139 => x"80cfe408",
+2140 => x"525782bb",
+2141 => x"3f8c1622",
+2142 => x"83dfff06",
+2143 => x"55748c17",
+2144 => x"237a5479",
+2145 => x"538e1622",
+2146 => x"70902b70",
+2147 => x"902c5456",
+2148 => x"80cfe408",
+2149 => x"525680f2",
+2150 => x"3f883d0d",
+2151 => x"04f93d0d",
+2152 => x"797c557b",
+2153 => x"548e1122",
+2154 => x"70902b70",
+2155 => x"902c5557",
+2156 => x"80cfe408",
+2157 => x"53585681",
+2158 => x"f63f8008",
+2159 => x"578008ff",
+2160 => x"2e99388c",
+2161 => x"1622a080",
+2162 => x"0755748c",
+2163 => x"17238008",
+2164 => x"80d0170c",
+2165 => x"76800c89",
+2166 => x"3d0d048c",
+2167 => x"162283df",
+2168 => x"ff065574",
+2169 => x"8c172376",
+2170 => x"800c893d",
+2171 => x"0d047070",
+2172 => x"70748e11",
+2173 => x"2270902b",
+2174 => x"70902c55",
+2175 => x"51515380",
+2176 => x"cfe40851",
+2177 => x"bd3f5050",
+2178 => x"5004fb3d",
+2179 => x"0d800b80",
+2180 => x"dfe00c7a",
+2181 => x"53795278",
+2182 => x"5182ff3f",
+2183 => x"80085580",
+2184 => x"08ff2e88",
+2185 => x"3874800c",
+2186 => x"873d0d04",
+2187 => x"80dfe008",
+2188 => x"5675802e",
+2189 => x"f0387776",
+2190 => x"710c5474",
+2191 => x"800c873d",
+2192 => x"0d047070",
+2193 => x"7070800b",
+2194 => x"80dfe00c",
+2195 => x"765184cc",
+2196 => x"3f800853",
+2197 => x"8008ff2e",
+2198 => x"89387280",
+2199 => x"0c505050",
+2200 => x"500480df",
+2201 => x"e0085473",
+2202 => x"802eef38",
+2203 => x"7574710c",
+2204 => x"5272800c",
+2205 => x"50505050",
+2206 => x"04fc3d0d",
+2207 => x"800b80df",
+2208 => x"e00c7852",
+2209 => x"775187b3",
+2210 => x"3f800854",
+2211 => x"8008ff2e",
+2212 => x"88387380",
+2213 => x"0c863d0d",
+2214 => x"0480dfe0",
+2215 => x"08557480",
+2216 => x"2ef03876",
+2217 => x"75710c53",
+2218 => x"73800c86",
+2219 => x"3d0d04fb",
+2220 => x"3d0d800b",
+2221 => x"80dfe00c",
+2222 => x"7a537952",
+2223 => x"7851848e",
+2224 => x"3f800855",
+2225 => x"8008ff2e",
+2226 => x"88387480",
+2227 => x"0c873d0d",
+2228 => x"0480dfe0",
+2229 => x"08567580",
+2230 => x"2ef03877",
+2231 => x"76710c54",
+2232 => x"74800c87",
+2233 => x"3d0d04fb",
+2234 => x"3d0d800b",
+2235 => x"80dfe00c",
+2236 => x"7a537952",
+2237 => x"78518296",
+2238 => x"3f800855",
+2239 => x"8008ff2e",
+2240 => x"88387480",
+2241 => x"0c873d0d",
+2242 => x"0480dfe0",
+2243 => x"08567580",
+2244 => x"2ef03877",
+2245 => x"76710c54",
+2246 => x"74800c87",
+2247 => x"3d0d0470",
+2248 => x"707080df",
+2249 => x"d0088938",
+2250 => x"80dfe40b",
+2251 => x"80dfd00c",
+2252 => x"80dfd008",
+2253 => x"75115252",
+2254 => x"ff537087",
+2255 => x"fb808026",
+2256 => x"88387080",
+2257 => x"dfd00c71",
+2258 => x"5372800c",
+2259 => x"50505004",
+2260 => x"fd3d0d80",
+2261 => x"0b80cfd8",
+2262 => x"08545472",
+2263 => x"812e9b38",
+2264 => x"7380dfd4",
+2265 => x"0cc2bf3f",
+2266 => x"c1963f80",
+2267 => x"dfa85281",
+2268 => x"51c3fd3f",
+2269 => x"80085186",
+2270 => x"c23f7280",
+2271 => x"dfd40cc2",
+2272 => x"a53fc0fc",
+2273 => x"3f80dfa8",
+2274 => x"528151c3",
+2275 => x"e33f8008",
+2276 => x"5186a83f",
+2277 => x"00ff3900",
+2278 => x"ff39f53d",
+2279 => x"0d7e6080",
+2280 => x"dfd40870",
+2281 => x"5b585b5b",
+2282 => x"7580c238",
+2283 => x"777a25a1",
+2284 => x"38771b70",
+2285 => x"337081ff",
+2286 => x"06585859",
+2287 => x"758a2e98",
+2288 => x"387681ff",
+2289 => x"0651c1bd",
+2290 => x"3f811858",
+2291 => x"797824e1",
+2292 => x"3879800c",
+2293 => x"8d3d0d04",
+2294 => x"8d51c1a9",
+2295 => x"3f783370",
+2296 => x"81ff0652",
+2297 => x"57c19e3f",
+2298 => x"811858e0",
+2299 => x"3979557a",
+2300 => x"547d5385",
+2301 => x"528d3dfc",
+2302 => x"0551c0c6",
+2303 => x"3f800856",
+2304 => x"85b23f7b",
+2305 => x"80080c75",
+2306 => x"800c8d3d",
+2307 => x"0d04f63d",
+2308 => x"0d7d7f80",
+2309 => x"dfd40870",
+2310 => x"5b585a5a",
+2311 => x"7580c138",
+2312 => x"777925b3",
+2313 => x"38c0b93f",
+2314 => x"800881ff",
+2315 => x"06708d32",
+2316 => x"7030709f",
+2317 => x"2a515157",
+2318 => x"57768a2e",
+2319 => x"80c43875",
+2320 => x"802ebf38",
+2321 => x"771a5676",
+2322 => x"76347651",
+2323 => x"c0b73f81",
+2324 => x"18587878",
+2325 => x"24cf3877",
+2326 => x"5675800c",
+2327 => x"8c3d0d04",
+2328 => x"78557954",
+2329 => x"7c538452",
+2330 => x"8c3dfc05",
+2331 => x"51ffbfd2",
+2332 => x"3f800856",
+2333 => x"84be3f7a",
+2334 => x"80080c75",
+2335 => x"800c8c3d",
+2336 => x"0d04771a",
+2337 => x"598a7934",
+2338 => x"8118588d",
+2339 => x"51ffbff5",
+2340 => x"3f8a51ff",
+2341 => x"bfef3f77",
+2342 => x"56ffbe39",
+2343 => x"fb3d0d80",
+2344 => x"dfd40870",
+2345 => x"56547388",
+2346 => x"3874800c",
+2347 => x"873d0d04",
+2348 => x"77538352",
+2349 => x"873dfc05",
+2350 => x"51ffbf86",
+2351 => x"3f800854",
+2352 => x"83f23f75",
+2353 => x"80080c73",
+2354 => x"800c873d",
+2355 => x"0d04fa3d",
+2356 => x"0d80dfd4",
+2357 => x"08802ea3",
+2358 => x"387a5579",
+2359 => x"54785386",
+2360 => x"52883dfc",
+2361 => x"0551ffbe",
+2362 => x"d93f8008",
+2363 => x"5683c53f",
+2364 => x"7680080c",
+2365 => x"75800c88",
+2366 => x"3d0d0483",
+2367 => x"b73f9d0b",
+2368 => x"80080cff",
+2369 => x"0b800c88",
+2370 => x"3d0d04f7",
+2371 => x"3d0d7b7d",
+2372 => x"5b59bc53",
+2373 => x"80527951",
+2374 => x"f5f83f80",
+2375 => x"70565798",
+2376 => x"56741970",
+2377 => x"3370782b",
+2378 => x"79078118",
+2379 => x"f81a5a58",
+2380 => x"59555884",
+2381 => x"7524ea38",
+2382 => x"767a2384",
+2383 => x"19588070",
+2384 => x"56579856",
+2385 => x"74187033",
+2386 => x"70782b79",
+2387 => x"078118f8",
+2388 => x"1a5a5859",
+2389 => x"51548475",
+2390 => x"24ea3876",
+2391 => x"821b2388",
+2392 => x"19588070",
+2393 => x"56579856",
+2394 => x"74187033",
+2395 => x"70782b79",
+2396 => x"078118f8",
+2397 => x"1a5a5859",
+2398 => x"51548475",
+2399 => x"24ea3876",
+2400 => x"841b0c8c",
+2401 => x"19588070",
+2402 => x"56579856",
+2403 => x"74187033",
+2404 => x"70782b79",
+2405 => x"078118f8",
+2406 => x"1a5a5859",
+2407 => x"51548475",
+2408 => x"24ea3876",
+2409 => x"881b2390",
+2410 => x"19588070",
+2411 => x"56579856",
+2412 => x"74187033",
+2413 => x"70782b79",
+2414 => x"078118f8",
+2415 => x"1a5a5859",
+2416 => x"51548475",
+2417 => x"24ea3876",
+2418 => x"8a1b2394",
+2419 => x"19588070",
+2420 => x"56579856",
+2421 => x"74187033",
+2422 => x"70782b79",
+2423 => x"078118f8",
+2424 => x"1a5a5859",
+2425 => x"51548475",
+2426 => x"24ea3876",
+2427 => x"8c1b2398",
+2428 => x"19588070",
+2429 => x"56579856",
+2430 => x"74187033",
+2431 => x"70782b79",
+2432 => x"078118f8",
+2433 => x"1a5a5859",
+2434 => x"51548475",
+2435 => x"24ea3876",
+2436 => x"8e1b239c",
+2437 => x"19588070",
+2438 => x"5657b856",
+2439 => x"74187033",
+2440 => x"70782b79",
+2441 => x"078118f8",
+2442 => x"1a5a5859",
+2443 => x"5a548875",
+2444 => x"24ea3876",
+2445 => x"901b0c8b",
+2446 => x"3d0d04e9",
+2447 => x"3d0d6a80",
+2448 => x"dfd40857",
+2449 => x"57759338",
+2450 => x"80c0800b",
+2451 => x"84180c75",
+2452 => x"ac180c75",
+2453 => x"800c993d",
+2454 => x"0d04893d",
+2455 => x"70556a54",
+2456 => x"558a5299",
+2457 => x"3dffbc05",
+2458 => x"51ffbbd6",
+2459 => x"3f800877",
+2460 => x"53755256",
+2461 => x"fd953fbc",
+2462 => x"3f778008",
+2463 => x"0c75800c",
+2464 => x"993d0d04",
+2465 => x"fc3d0d81",
+2466 => x"5480dfd4",
+2467 => x"08883873",
+2468 => x"800c863d",
+2469 => x"0d047653",
+2470 => x"97b95286",
+2471 => x"3dfc0551",
+2472 => x"ffbb9f3f",
+2473 => x"8008548c",
+2474 => x"3f748008",
+2475 => x"0c73800c",
+2476 => x"863d0d04",
+2477 => x"80cfe408",
+2478 => x"800c04f7",
+2479 => x"3d0d7b80",
+2480 => x"cfe40882",
+2481 => x"c811085a",
+2482 => x"545a7780",
+2483 => x"2e80da38",
+2484 => x"81881884",
+2485 => x"1908ff05",
+2486 => x"81712b59",
+2487 => x"55598074",
+2488 => x"2480ea38",
+2489 => x"807424b5",
+2490 => x"3873822b",
+2491 => x"78118805",
+2492 => x"56568180",
+2493 => x"19087706",
+2494 => x"5372802e",
+2495 => x"b6387816",
+2496 => x"70085353",
+2497 => x"79517408",
+2498 => x"53722dff",
+2499 => x"14fc17fc",
+2500 => x"1779812c",
+2501 => x"5a575754",
+2502 => x"738025d6",
+2503 => x"38770858",
+2504 => x"77ffad38",
+2505 => x"80cfe408",
+2506 => x"53bc1308",
+2507 => x"a5387951",
+2508 => x"f8e23f74",
+2509 => x"0853722d",
+2510 => x"ff14fc17",
+2511 => x"fc177981",
+2512 => x"2c5a5757",
+2513 => x"54738025",
+2514 => x"ffa838d1",
+2515 => x"398057ff",
+2516 => x"93397251",
+2517 => x"bc130854",
+2518 => x"732d7951",
+2519 => x"f8b63f70",
+2520 => x"7080dfb0",
+2521 => x"0bfc0570",
+2522 => x"08525270",
+2523 => x"ff2e9138",
+2524 => x"702dfc12",
+2525 => x"70085252",
+2526 => x"70ff2e09",
+2527 => x"8106f138",
+2528 => x"50500404",
+2529 => x"ffbb8c3f",
+2530 => x"04000000",
+2531 => x"00000040",
+2532 => x"48656c6c",
+2533 => x"6f20776f",
+2534 => x"726c6420",
+2535 => x"310a0000",
+2536 => x"48656c6c",
+2537 => x"6f20776f",
+2538 => x"726c6420",
+2539 => x"320a0000",
+2540 => x"0a000000",
+2541 => x"43000000",
+2542 => x"64756d6d",
+2543 => x"792e6578",
+2544 => x"65000000",
+2545 => x"00ffffff",
+2546 => x"ff00ffff",
+2547 => x"ffff00ff",
+2548 => x"ffffff00",
+2549 => x"00000000",
+2550 => x"00000000",
+2551 => x"00000000",
+2552 => x"00002fb8",
+2553 => x"000027e8",
+2554 => x"00000000",
+2555 => x"00002a50",
+2556 => x"00002aac",
+2557 => x"00002b08",
+2558 => x"00000000",
+2559 => x"00000000",
+2560 => x"00000000",
+2561 => x"00000000",
+2562 => x"00000000",
+2563 => x"00000000",
+2564 => x"00000000",
+2565 => x"00000000",
+2566 => x"00000000",
+2567 => x"000027b4",
+2568 => x"00000000",
+2569 => x"00000000",
+2570 => x"00000000",
+2571 => x"00000000",
+2572 => x"00000000",
+2573 => x"00000000",
+2574 => x"00000000",
+2575 => x"00000000",
+2576 => x"00000000",
+2577 => x"00000000",
+2578 => x"00000000",
+2579 => x"00000000",
+2580 => x"00000000",
+2581 => x"00000000",
+2582 => x"00000000",
+2583 => x"00000000",
+2584 => x"00000000",
+2585 => x"00000000",
+2586 => x"00000000",
+2587 => x"00000000",
+2588 => x"00000000",
+2589 => x"00000000",
+2590 => x"00000000",
+2591 => x"00000000",
+2592 => x"00000000",
+2593 => x"00000000",
+2594 => x"00000000",
+2595 => x"00000000",
+2596 => x"00000001",
+2597 => x"330eabcd",
+2598 => x"1234e66d",
+2599 => x"deec0005",
+2600 => x"000b0000",
+2601 => x"00000000",
+2602 => x"00000000",
+2603 => x"00000000",
+2604 => x"00000000",
+2605 => x"00000000",
+2606 => x"00000000",
+2607 => x"00000000",
+2608 => x"00000000",
+2609 => x"00000000",
+2610 => x"00000000",
+2611 => x"00000000",
+2612 => x"00000000",
+2613 => x"00000000",
+2614 => x"00000000",
+2615 => x"00000000",
+2616 => x"00000000",
+2617 => x"00000000",
+2618 => x"00000000",
+2619 => x"00000000",
+2620 => x"00000000",
+2621 => x"00000000",
+2622 => x"00000000",
+2623 => x"00000000",
+2624 => x"00000000",
+2625 => x"00000000",
+2626 => x"00000000",
+2627 => x"00000000",
+2628 => x"00000000",
+2629 => x"00000000",
+2630 => x"00000000",
+2631 => x"00000000",
+2632 => x"00000000",
+2633 => x"00000000",
+2634 => x"00000000",
+2635 => x"00000000",
+2636 => x"00000000",
+2637 => x"00000000",
+2638 => x"00000000",
+2639 => x"00000000",
+2640 => x"00000000",
+2641 => x"00000000",
+2642 => x"00000000",
+2643 => x"00000000",
+2644 => x"00000000",
+2645 => x"00000000",
+2646 => x"00000000",
+2647 => x"00000000",
+2648 => x"00000000",
+2649 => x"00000000",
+2650 => x"00000000",
+2651 => x"00000000",
+2652 => x"00000000",
+2653 => x"00000000",
+2654 => x"00000000",
+2655 => x"00000000",
+2656 => x"00000000",
+2657 => x"00000000",
+2658 => x"00000000",
+2659 => x"00000000",
+2660 => x"00000000",
+2661 => x"00000000",
+2662 => x"00000000",
+2663 => x"00000000",
+2664 => x"00000000",
+2665 => x"00000000",
+2666 => x"00000000",
+2667 => x"00000000",
+2668 => x"00000000",
+2669 => x"00000000",
+2670 => x"00000000",
+2671 => x"00000000",
+2672 => x"00000000",
+2673 => x"00000000",
+2674 => x"00000000",
+2675 => x"00000000",
+2676 => x"00000000",
+2677 => x"00000000",
+2678 => x"00000000",
+2679 => x"00000000",
+2680 => x"00000000",
+2681 => x"00000000",
+2682 => x"00000000",
+2683 => x"00000000",
+2684 => x"00000000",
+2685 => x"00000000",
+2686 => x"00000000",
+2687 => x"00000000",
+2688 => x"00000000",
+2689 => x"00000000",
+2690 => x"00000000",
+2691 => x"00000000",
+2692 => x"00000000",
+2693 => x"00000000",
+2694 => x"00000000",
+2695 => x"00000000",
+2696 => x"00000000",
+2697 => x"00000000",
+2698 => x"00000000",
+2699 => x"00000000",
+2700 => x"00000000",
+2701 => x"00000000",
+2702 => x"00000000",
+2703 => x"00000000",
+2704 => x"00000000",
+2705 => x"00000000",
+2706 => x"00000000",
+2707 => x"00000000",
+2708 => x"00000000",
+2709 => x"00000000",
+2710 => x"00000000",
+2711 => x"00000000",
+2712 => x"00000000",
+2713 => x"00000000",
+2714 => x"00000000",
+2715 => x"00000000",
+2716 => x"00000000",
+2717 => x"00000000",
+2718 => x"00000000",
+2719 => x"00000000",
+2720 => x"00000000",
+2721 => x"00000000",
+2722 => x"00000000",
+2723 => x"00000000",
+2724 => x"00000000",
+2725 => x"00000000",
+2726 => x"00000000",
+2727 => x"00000000",
+2728 => x"00000000",
+2729 => x"00000000",
+2730 => x"00000000",
+2731 => x"00000000",
+2732 => x"00000000",
+2733 => x"00000000",
+2734 => x"00000000",
+2735 => x"00000000",
+2736 => x"00000000",
+2737 => x"00000000",
+2738 => x"00000000",
+2739 => x"00000000",
+2740 => x"00000000",
+2741 => x"00000000",
+2742 => x"00000000",
+2743 => x"00000000",
+2744 => x"00000000",
+2745 => x"00000000",
+2746 => x"00000000",
+2747 => x"00000000",
+2748 => x"00000000",
+2749 => x"00000000",
+2750 => x"00000000",
+2751 => x"00000000",
+2752 => x"00000000",
+2753 => x"00000000",
+2754 => x"00000000",
+2755 => x"00000000",
+2756 => x"00000000",
+2757 => x"00000000",
+2758 => x"00000000",
+2759 => x"00000000",
+2760 => x"00000000",
+2761 => x"00000000",
+2762 => x"00000000",
+2763 => x"00000000",
+2764 => x"00000000",
+2765 => x"00000000",
+2766 => x"00000000",
+2767 => x"00000000",
+2768 => x"00000000",
+2769 => x"00000000",
+2770 => x"00000000",
+2771 => x"00000000",
+2772 => x"00000000",
+2773 => x"00000000",
+2774 => x"00000000",
+2775 => x"00000000",
+2776 => x"00000000",
+2777 => x"00000000",
+2778 => x"00000000",
+2779 => x"00000000",
+2780 => x"00000000",
+2781 => x"00000000",
+2782 => x"00000000",
+2783 => x"00000000",
+2784 => x"00000000",
+2785 => x"00000000",
+2786 => x"00000000",
+2787 => x"00000000",
+2788 => x"00000000",
+2789 => x"ffffffff",
+2790 => x"00000000",
+2791 => x"00020000",
+2792 => x"00000000",
+2793 => x"00000000",
+2794 => x"00002ba0",
+2795 => x"00002ba0",
+2796 => x"00002ba8",
+2797 => x"00002ba8",
+2798 => x"00002bb0",
+2799 => x"00002bb0",
+2800 => x"00002bb8",
+2801 => x"00002bb8",
+2802 => x"00002bc0",
+2803 => x"00002bc0",
+2804 => x"00002bc8",
+2805 => x"00002bc8",
+2806 => x"00002bd0",
+2807 => x"00002bd0",
+2808 => x"00002bd8",
+2809 => x"00002bd8",
+2810 => x"00002be0",
+2811 => x"00002be0",
+2812 => x"00002be8",
+2813 => x"00002be8",
+2814 => x"00002bf0",
+2815 => x"00002bf0",
+2816 => x"00002bf8",
+2817 => x"00002bf8",
+2818 => x"00002c00",
+2819 => x"00002c00",
+2820 => x"00002c08",
+2821 => x"00002c08",
+2822 => x"00002c10",
+2823 => x"00002c10",
+2824 => x"00002c18",
+2825 => x"00002c18",
+2826 => x"00002c20",
+2827 => x"00002c20",
+2828 => x"00002c28",
+2829 => x"00002c28",
+2830 => x"00002c30",
+2831 => x"00002c30",
+2832 => x"00002c38",
+2833 => x"00002c38",
+2834 => x"00002c40",
+2835 => x"00002c40",
+2836 => x"00002c48",
+2837 => x"00002c48",
+2838 => x"00002c50",
+2839 => x"00002c50",
+2840 => x"00002c58",
+2841 => x"00002c58",
+2842 => x"00002c60",
+2843 => x"00002c60",
+2844 => x"00002c68",
+2845 => x"00002c68",
+2846 => x"00002c70",
+2847 => x"00002c70",
+2848 => x"00002c78",
+2849 => x"00002c78",
+2850 => x"00002c80",
+2851 => x"00002c80",
+2852 => x"00002c88",
+2853 => x"00002c88",
+2854 => x"00002c90",
+2855 => x"00002c90",
+2856 => x"00002c98",
+2857 => x"00002c98",
+2858 => x"00002ca0",
+2859 => x"00002ca0",
+2860 => x"00002ca8",
+2861 => x"00002ca8",
+2862 => x"00002cb0",
+2863 => x"00002cb0",
+2864 => x"00002cb8",
+2865 => x"00002cb8",
+2866 => x"00002cc0",
+2867 => x"00002cc0",
+2868 => x"00002cc8",
+2869 => x"00002cc8",
+2870 => x"00002cd0",
+2871 => x"00002cd0",
+2872 => x"00002cd8",
+2873 => x"00002cd8",
+2874 => x"00002ce0",
+2875 => x"00002ce0",
+2876 => x"00002ce8",
+2877 => x"00002ce8",
+2878 => x"00002cf0",
+2879 => x"00002cf0",
+2880 => x"00002cf8",
+2881 => x"00002cf8",
+2882 => x"00002d00",
+2883 => x"00002d00",
+2884 => x"00002d08",
+2885 => x"00002d08",
+2886 => x"00002d10",
+2887 => x"00002d10",
+2888 => x"00002d18",
+2889 => x"00002d18",
+2890 => x"00002d20",
+2891 => x"00002d20",
+2892 => x"00002d28",
+2893 => x"00002d28",
+2894 => x"00002d30",
+2895 => x"00002d30",
+2896 => x"00002d38",
+2897 => x"00002d38",
+2898 => x"00002d40",
+2899 => x"00002d40",
+2900 => x"00002d48",
+2901 => x"00002d48",
+2902 => x"00002d50",
+2903 => x"00002d50",
+2904 => x"00002d58",
+2905 => x"00002d58",
+2906 => x"00002d60",
+2907 => x"00002d60",
+2908 => x"00002d68",
+2909 => x"00002d68",
+2910 => x"00002d70",
+2911 => x"00002d70",
+2912 => x"00002d78",
+2913 => x"00002d78",
+2914 => x"00002d80",
+2915 => x"00002d80",
+2916 => x"00002d88",
+2917 => x"00002d88",
+2918 => x"00002d90",
+2919 => x"00002d90",
+2920 => x"00002d98",
+2921 => x"00002d98",
+2922 => x"00002da0",
+2923 => x"00002da0",
+2924 => x"00002da8",
+2925 => x"00002da8",
+2926 => x"00002db0",
+2927 => x"00002db0",
+2928 => x"00002db8",
+2929 => x"00002db8",
+2930 => x"00002dc0",
+2931 => x"00002dc0",
+2932 => x"00002dc8",
+2933 => x"00002dc8",
+2934 => x"00002dd0",
+2935 => x"00002dd0",
+2936 => x"00002dd8",
+2937 => x"00002dd8",
+2938 => x"00002de0",
+2939 => x"00002de0",
+2940 => x"00002de8",
+2941 => x"00002de8",
+2942 => x"00002df0",
+2943 => x"00002df0",
+2944 => x"00002df8",
+2945 => x"00002df8",
+2946 => x"00002e00",
+2947 => x"00002e00",
+2948 => x"00002e08",
+2949 => x"00002e08",
+2950 => x"00002e10",
+2951 => x"00002e10",
+2952 => x"00002e18",
+2953 => x"00002e18",
+2954 => x"00002e20",
+2955 => x"00002e20",
+2956 => x"00002e28",
+2957 => x"00002e28",
+2958 => x"00002e30",
+2959 => x"00002e30",
+2960 => x"00002e38",
+2961 => x"00002e38",
+2962 => x"00002e40",
+2963 => x"00002e40",
+2964 => x"00002e48",
+2965 => x"00002e48",
+2966 => x"00002e50",
+2967 => x"00002e50",
+2968 => x"00002e58",
+2969 => x"00002e58",
+2970 => x"00002e60",
+2971 => x"00002e60",
+2972 => x"00002e68",
+2973 => x"00002e68",
+2974 => x"00002e70",
+2975 => x"00002e70",
+2976 => x"00002e78",
+2977 => x"00002e78",
+2978 => x"00002e80",
+2979 => x"00002e80",
+2980 => x"00002e88",
+2981 => x"00002e88",
+2982 => x"00002e90",
+2983 => x"00002e90",
+2984 => x"00002e98",
+2985 => x"00002e98",
+2986 => x"00002ea0",
+2987 => x"00002ea0",
+2988 => x"00002ea8",
+2989 => x"00002ea8",
+2990 => x"00002eb0",
+2991 => x"00002eb0",
+2992 => x"00002eb8",
+2993 => x"00002eb8",
+2994 => x"00002ec0",
+2995 => x"00002ec0",
+2996 => x"00002ec8",
+2997 => x"00002ec8",
+2998 => x"00002ed0",
+2999 => x"00002ed0",
+3000 => x"00002ed8",
+3001 => x"00002ed8",
+3002 => x"00002ee0",
+3003 => x"00002ee0",
+3004 => x"00002ee8",
+3005 => x"00002ee8",
+3006 => x"00002ef0",
+3007 => x"00002ef0",
+3008 => x"00002ef8",
+3009 => x"00002ef8",
+3010 => x"00002f00",
+3011 => x"00002f00",
+3012 => x"00002f08",
+3013 => x"00002f08",
+3014 => x"00002f10",
+3015 => x"00002f10",
+3016 => x"00002f18",
+3017 => x"00002f18",
+3018 => x"00002f20",
+3019 => x"00002f20",
+3020 => x"00002f28",
+3021 => x"00002f28",
+3022 => x"00002f30",
+3023 => x"00002f30",
+3024 => x"00002f38",
+3025 => x"00002f38",
+3026 => x"00002f40",
+3027 => x"00002f40",
+3028 => x"00002f48",
+3029 => x"00002f48",
+3030 => x"00002f50",
+3031 => x"00002f50",
+3032 => x"00002f58",
+3033 => x"00002f58",
+3034 => x"00002f60",
+3035 => x"00002f60",
+3036 => x"00002f68",
+3037 => x"00002f68",
+3038 => x"00002f70",
+3039 => x"00002f70",
+3040 => x"00002f78",
+3041 => x"00002f78",
+3042 => x"00002f80",
+3043 => x"00002f80",
+3044 => x"00002f88",
+3045 => x"00002f88",
+3046 => x"00002f90",
+3047 => x"00002f90",
+3048 => x"00002f98",
+3049 => x"00002f98",
+3050 => x"000027b8",
+3051 => x"ffffffff",
+3052 => x"00000000",
+3053 => x"ffffffff",
+3054 => x"00000000",
+ others => x"00000000"
+);
+
+begin
+
+mem_busy<=mem_readEnable; -- we're done on the cycle after we serve the read request
+
+process (clk, areset)
+begin
+ if areset = '1' then
+ elsif (clk'event and clk = '1') then
+ if (mem_writeEnable = '1') then
+ ram(to_integer(unsigned(mem_addr(maxAddrBit downto minAddrBit)))) := mem_write;
+ end if;
+ if (mem_readEnable = '1') then
+ mem_read <= ram(to_integer(unsigned(mem_addr(maxAddrBit downto minAddrBit))));
+ end if;
+ end if;
+end process;
+
+
+
+
+end dram_arch;
diff --git a/zpu/hdl/example_medium/sim_fpga_top.vhd b/zpu/hdl/example_medium/sim_fpga_top.vhd
index 2191889..a10da37 100644
--- a/zpu/hdl/example_medium/sim_fpga_top.vhd
+++ b/zpu/hdl/example_medium/sim_fpga_top.vhd
@@ -1,185 +1,185 @@
---------------------------------------------------------------------------------
--- Company:
--- Engineer:
---
--- Create Date: 20:15:31 04/14/05
--- Design Name:
--- Module Name: fpga_top - behave
--- Project Name:
--- Target Device:
--- Tool versions:
--- Description:
---
--- Dependencies:
---
--- Revision:
--- Revision 0.01 - File Created
--- Additional Comments:
---
---------------------------------------------------------------------------------
-library IEEE;
-use IEEE.STD_LOGIC_1164.ALL;
-
----- Uncomment the following library declaration if instantiating
----- any Xilinx primitives in this code.
---library UNISIM;
---use UNISIM.VComponents.all;
-
-library work;
-use work.zpu_config.all;
-
-entity fpga_top is
-end fpga_top;
-
-use work.zpupkg.all;
-
-architecture behave of fpga_top is
-
-
-signal clk : std_logic;
-
-signal areset : std_logic := '1';
-
-
-component zpu_io is
- generic (
- log_file: string := "log.txt"
- );
- port(
- clk : in std_logic;
- areset : in std_logic;
- busy : out std_logic;
- writeEnable : in std_logic;
- readEnable : in std_logic;
- write : in std_logic_vector(wordSize-1 downto 0);
- read : out std_logic_vector(wordSize-1 downto 0);
- addr : in std_logic_vector(maxAddrBit downto minAddrBit)
- );
-end component;
-
-
-
-
-
-signal mem_busy : std_logic;
-signal mem_read : std_logic_vector(wordSize-1 downto 0);
-signal mem_write : std_logic_vector(wordSize-1 downto 0);
-signal mem_addr : std_logic_vector(maxAddrBitIncIO downto 0);
-signal mem_writeEnable : std_logic;
-signal mem_readEnable : std_logic;
-signal mem_writeMask: std_logic_vector(wordBytes-1 downto 0);
-
-signal enable : std_logic;
-
-signal dram_mem_busy : std_logic;
-signal dram_mem_read : std_logic_vector(wordSize-1 downto 0);
-signal dram_mem_write : std_logic_vector(wordSize-1 downto 0);
-signal dram_mem_writeEnable : std_logic;
-signal dram_mem_readEnable : std_logic;
-signal dram_mem_writeMask: std_logic_vector(wordBytes-1 downto 0);
-
-
-signal io_busy : std_logic;
-
-signal io_mem_read : std_logic_vector(wordSize-1 downto 0);
-signal io_mem_writeEnable : std_logic;
-signal io_mem_readEnable : std_logic;
-
-
-signal dram_ready : std_logic;
-signal io_ready : std_logic;
-signal io_reading : std_logic;
-
-
-signal break : std_logic;
-
-begin
- zpu: zpu_core port map (
- clk => clk ,
- areset => areset,
- enable => enable,
- in_mem_busy => mem_busy,
- mem_read => mem_read,
- mem_write => mem_write,
- out_mem_addr => mem_addr,
- out_mem_writeEnable => mem_writeEnable,
- out_mem_readEnable => mem_readEnable,
- mem_writeMask => mem_writeMask,
- interrupt => '0',
- break => break);
-
- dram_imp: dram port map (
- clk => clk ,
- areset => areset,
- mem_busy => dram_mem_busy,
- mem_read => dram_mem_read,
- mem_write => mem_write,
- mem_addr => mem_addr(maxAddrBit downto 0),
- mem_writeEnable => dram_mem_writeEnable,
- mem_readEnable => dram_mem_readEnable,
- mem_writeMask => mem_writeMask);
-
-
- ioMap: zpu_io port map (
- clk => clk,
- areset => areset,
- busy => io_busy,
- writeEnable => io_mem_writeEnable,
- readEnable => io_mem_readEnable,
- write => mem_write(wordSize-1 downto 0),
- read => io_mem_read,
- addr => mem_addr(maxAddrBit downto minAddrBit)
- );
-
- dram_mem_writeEnable <= mem_writeEnable and not mem_addr(ioBit);
- dram_mem_readEnable <= mem_readEnable and not mem_addr(ioBit);
- io_mem_writeEnable <= mem_writeEnable and mem_addr(ioBit);
- io_mem_readEnable <= mem_readEnable and mem_addr(ioBit);
- mem_busy <= io_busy or dram_mem_busy or io_busy;
-
-
-
- -- Memory reads either come from IO or DRAM. We need to pick the right one.
- memorycontrol:
- process(dram_mem_read, dram_ready, io_ready, io_mem_read)
- begin
- mem_read <= (others => 'U');
- if dram_ready='1' then
- mem_read <= dram_mem_read;
- end if;
-
- if io_ready='1' then
- mem_read <= io_mem_read;
- end if;
- end process;
-
-
- io_ready <= (io_reading or io_mem_readEnable) and not io_busy;
-
- memoryControlSync:
- process(clk, areset)
- begin
- if areset = '1' then
- enable <= '0';
- io_reading <= '0';
- dram_ready <= '0';
- elsif (clk'event and clk = '1') then
- enable <= '1';
- io_reading <= io_busy or io_mem_readEnable;
- dram_ready<=dram_mem_readEnable;
-
- end if;
- end process;
-
- -- wiggle the clock @ 100MHz
- clock : PROCESS
- begin
- clk <= '0';
- wait for 5 ns;
- clk <= '1';
- wait for 5 ns;
- areset <= '0';
- end PROCESS clock;
-
-
-end behave;
+--------------------------------------------------------------------------------
+-- Company:
+-- Engineer:
+--
+-- Create Date: 20:15:31 04/14/05
+-- Design Name:
+-- Module Name: fpga_top - behave
+-- Project Name:
+-- Target Device:
+-- Tool versions:
+-- Description:
+--
+-- Dependencies:
+--
+-- Revision:
+-- Revision 0.01 - File Created
+-- Additional Comments:
+--
+--------------------------------------------------------------------------------
+library IEEE;
+use IEEE.STD_LOGIC_1164.ALL;
+
+---- Uncomment the following library declaration if instantiating
+---- any Xilinx primitives in this code.
+--library UNISIM;
+--use UNISIM.VComponents.all;
+
+library work;
+use work.zpu_config.all;
+
+entity fpga_top is
+end fpga_top;
+
+use work.zpupkg.all;
+
+architecture behave of fpga_top is
+
+
+signal clk : std_logic;
+
+signal areset : std_logic := '1';
+
+
+component zpu_io is
+ generic (
+ log_file: string := "log.txt"
+ );
+ port(
+ clk : in std_logic;
+ areset : in std_logic;
+ busy : out std_logic;
+ writeEnable : in std_logic;
+ readEnable : in std_logic;
+ write : in std_logic_vector(wordSize-1 downto 0);
+ read : out std_logic_vector(wordSize-1 downto 0);
+ addr : in std_logic_vector(maxAddrBit downto minAddrBit)
+ );
+end component;
+
+
+
+
+
+signal mem_busy : std_logic;
+signal mem_read : std_logic_vector(wordSize-1 downto 0);
+signal mem_write : std_logic_vector(wordSize-1 downto 0);
+signal mem_addr : std_logic_vector(maxAddrBitIncIO downto 0);
+signal mem_writeEnable : std_logic;
+signal mem_readEnable : std_logic;
+signal mem_writeMask: std_logic_vector(wordBytes-1 downto 0);
+
+signal enable : std_logic;
+
+signal dram_mem_busy : std_logic;
+signal dram_mem_read : std_logic_vector(wordSize-1 downto 0);
+signal dram_mem_write : std_logic_vector(wordSize-1 downto 0);
+signal dram_mem_writeEnable : std_logic;
+signal dram_mem_readEnable : std_logic;
+signal dram_mem_writeMask: std_logic_vector(wordBytes-1 downto 0);
+
+
+signal io_busy : std_logic;
+
+signal io_mem_read : std_logic_vector(wordSize-1 downto 0);
+signal io_mem_writeEnable : std_logic;
+signal io_mem_readEnable : std_logic;
+
+
+signal dram_ready : std_logic;
+signal io_ready : std_logic;
+signal io_reading : std_logic;
+
+
+signal break : std_logic;
+
+begin
+ zpu: zpu_core port map (
+ clk => clk ,
+ areset => areset,
+ enable => enable,
+ in_mem_busy => mem_busy,
+ mem_read => mem_read,
+ mem_write => mem_write,
+ out_mem_addr => mem_addr,
+ out_mem_writeEnable => mem_writeEnable,
+ out_mem_readEnable => mem_readEnable,
+ mem_writeMask => mem_writeMask,
+ interrupt => '0',
+ break => break);
+
+ dram_imp: dram port map (
+ clk => clk ,
+ areset => areset,
+ mem_busy => dram_mem_busy,
+ mem_read => dram_mem_read,
+ mem_write => mem_write,
+ mem_addr => mem_addr(maxAddrBit downto 0),
+ mem_writeEnable => dram_mem_writeEnable,
+ mem_readEnable => dram_mem_readEnable,
+ mem_writeMask => mem_writeMask);
+
+
+ ioMap: zpu_io port map (
+ clk => clk,
+ areset => areset,
+ busy => io_busy,
+ writeEnable => io_mem_writeEnable,
+ readEnable => io_mem_readEnable,
+ write => mem_write(wordSize-1 downto 0),
+ read => io_mem_read,
+ addr => mem_addr(maxAddrBit downto minAddrBit)
+ );
+
+ dram_mem_writeEnable <= mem_writeEnable and not mem_addr(ioBit);
+ dram_mem_readEnable <= mem_readEnable and not mem_addr(ioBit);
+ io_mem_writeEnable <= mem_writeEnable and mem_addr(ioBit);
+ io_mem_readEnable <= mem_readEnable and mem_addr(ioBit);
+ mem_busy <= io_busy or dram_mem_busy or io_busy;
+
+
+
+ -- Memory reads either come from IO or DRAM. We need to pick the right one.
+ memorycontrol:
+ process(dram_mem_read, dram_ready, io_ready, io_mem_read)
+ begin
+ mem_read <= (others => 'U');
+ if dram_ready='1' then
+ mem_read <= dram_mem_read;
+ end if;
+
+ if io_ready='1' then
+ mem_read <= io_mem_read;
+ end if;
+ end process;
+
+
+ io_ready <= (io_reading or io_mem_readEnable) and not io_busy;
+
+ memoryControlSync:
+ process(clk, areset)
+ begin
+ if areset = '1' then
+ enable <= '0';
+ io_reading <= '0';
+ dram_ready <= '0';
+ elsif (clk'event and clk = '1') then
+ enable <= '1';
+ io_reading <= io_busy or io_mem_readEnable;
+ dram_ready<=dram_mem_readEnable;
+
+ end if;
+ end process;
+
+ -- wiggle the clock @ 100MHz
+ clock : PROCESS
+ begin
+ clk <= '0';
+ wait for 5 ns;
+ clk <= '1';
+ wait for 5 ns;
+ areset <= '0';
+ end PROCESS clock;
+
+
+end behave;
diff --git a/zpu/hdl/example_medium/zpu_config_trace.vhd b/zpu/hdl/example_medium/zpu_config_trace.vhd
index d765d9a..a5b9192 100644
--- a/zpu/hdl/example_medium/zpu_config_trace.vhd
+++ b/zpu/hdl/example_medium/zpu_config_trace.vhd
@@ -1,17 +1,17 @@
-library ieee;
-use ieee.std_logic_1164.all;
-
-package zpu_config is
-
- constant Generate_Trace : boolean := true;
- constant wordPower : integer := 5;
- -- during simulation, set this to '0' to get matching trace.txt
- constant DontCareValue : std_logic := '0';
- -- Clock frequency in MHz.
- constant ZPU_Frequency : std_logic_vector(7 downto 0) := x"64";
- constant maxAddrBitIncIO : integer := 27;
- constant maxAddrBitDRAM : integer := 16;
- constant maxAddrBitBRAM : integer := 16;
- constant spStart : std_logic_vector(maxAddrBitIncIO downto 0) := x"001fff8";
-
-end zpu_config;
+library ieee;
+use ieee.std_logic_1164.all;
+
+package zpu_config is
+
+ constant Generate_Trace : boolean := true;
+ constant wordPower : integer := 5;
+ -- during simulation, set this to '0' to get matching trace.txt
+ constant DontCareValue : std_logic := '0';
+ -- Clock frequency in MHz.
+ constant ZPU_Frequency : std_logic_vector(7 downto 0) := x"64";
+ constant maxAddrBitIncIO : integer := 27;
+ constant maxAddrBitDRAM : integer := 16;
+ constant maxAddrBitBRAM : integer := 16;
+ constant spStart : std_logic_vector(maxAddrBitIncIO downto 0) := x"001fff8";
+
+end zpu_config;
diff --git a/zpu/hdl/wishbone/wishbone_pkg.vhd b/zpu/hdl/wishbone/wishbone_pkg.vhd
index 97240de..b6d30ee 100644
--- a/zpu/hdl/wishbone/wishbone_pkg.vhd
+++ b/zpu/hdl/wishbone/wishbone_pkg.vhd
@@ -1,86 +1,86 @@
--- ZPU
---
--- Copyright 2004-2008 oharboe - Øyvind Harboe - oyvind.harboe@zylin.com
---
--- The FreeBSD license
---
--- Redistribution and use in source and binary forms, with or without
--- modification, are permitted provided that the following conditions
--- are met:
---
--- 1. Redistributions of source code must retain the above copyright
--- notice, this list of conditions and the following disclaimer.
--- 2. Redistributions in binary form must reproduce the above
--- copyright notice, this list of conditions and the following
--- disclaimer in the documentation and/or other materials
--- provided with the distribution.
---
--- THIS SOFTWARE IS PROVIDED BY THE ZPU PROJECT ``AS IS'' AND ANY
--- EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
--- THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
--- PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
--- ZPU PROJECT OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
--- INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
--- (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
--- OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
--- HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
--- STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
--- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
--- ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
---
--- The views and conclusions contained in the software and documentation
--- are those of the authors and should not be interpreted as representing
--- official policies, either expressed or implied, of the ZPU Project.
-
-library IEEE;
-use IEEE.STD_LOGIC_1164.all;
-use IEEE.STD_LOGIC_UNSIGNED.ALL;
-
-package wishbone_pkg is
-
- type wishbone_bus_in is record
- adr : std_logic_vector(31 downto 0);
- sel : std_logic_vector(3 downto 0);
- we : std_logic;
- dat : std_logic_vector(31 downto 0); -- Note! Data written with 'we'
- cyc : std_logic;
- stb : std_logic;
- end record;
-
- type wishbone_bus_out is record
- dat : std_logic_vector(31 downto 0);
- ack : std_logic;
- end record;
-
- type wishbone_bus is record
- insig : wishbone_bus_in;
- outsig : wishbone_bus_out;
- end record;
-
- component atomic32_access is
- port ( cpu_clk : in std_logic;
- areset : in std_logic;
-
- -- Wishbone from CPU interface
- wb_16_i : in wishbone_bus_in;
- wb_16_o : out wishbone_bus_out;
- -- Wishbone to FPGA registers and ethernet core
- wb_32_i : in wishbone_bus_out;
- wb_32_o : out wishbone_bus_in);
- end component;
-
- component eth_access_corr is
- port ( cpu_clk : in std_logic;
- areset : in std_logic;
-
- -- Wishbone from Wishbone MUX
- eth_raw_o : out wishbone_bus_out;
- eth_raw_i : in wishbone_bus_in;
-
- -- Wishbone ethernet core
- eth_slave_i : in wishbone_bus_out;
- eth_slave_o : out wishbone_bus_in);
- end component;
-
-
-end wishbone_pkg;
+-- ZPU
+--
+-- Copyright 2004-2008 oharboe - Øyvind Harboe - oyvind.harboe@zylin.com
+--
+-- The FreeBSD license
+--
+-- Redistribution and use in source and binary forms, with or without
+-- modification, are permitted provided that the following conditions
+-- are met:
+--
+-- 1. Redistributions of source code must retain the above copyright
+-- notice, this list of conditions and the following disclaimer.
+-- 2. Redistributions in binary form must reproduce the above
+-- copyright notice, this list of conditions and the following
+-- disclaimer in the documentation and/or other materials
+-- provided with the distribution.
+--
+-- THIS SOFTWARE IS PROVIDED BY THE ZPU PROJECT ``AS IS'' AND ANY
+-- EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+-- THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+-- PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+-- ZPU PROJECT OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+-- INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+-- (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+-- OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+-- HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+-- STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+-- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+-- ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+--
+-- The views and conclusions contained in the software and documentation
+-- are those of the authors and should not be interpreted as representing
+-- official policies, either expressed or implied, of the ZPU Project.
+
+library IEEE;
+use IEEE.STD_LOGIC_1164.all;
+use IEEE.STD_LOGIC_UNSIGNED.ALL;
+
+package wishbone_pkg is
+
+ type wishbone_bus_in is record
+ adr : std_logic_vector(31 downto 0);
+ sel : std_logic_vector(3 downto 0);
+ we : std_logic;
+ dat : std_logic_vector(31 downto 0); -- Note! Data written with 'we'
+ cyc : std_logic;
+ stb : std_logic;
+ end record;
+
+ type wishbone_bus_out is record
+ dat : std_logic_vector(31 downto 0);
+ ack : std_logic;
+ end record;
+
+ type wishbone_bus is record
+ insig : wishbone_bus_in;
+ outsig : wishbone_bus_out;
+ end record;
+
+ component atomic32_access is
+ port ( cpu_clk : in std_logic;
+ areset : in std_logic;
+
+ -- Wishbone from CPU interface
+ wb_16_i : in wishbone_bus_in;
+ wb_16_o : out wishbone_bus_out;
+ -- Wishbone to FPGA registers and ethernet core
+ wb_32_i : in wishbone_bus_out;
+ wb_32_o : out wishbone_bus_in);
+ end component;
+
+ component eth_access_corr is
+ port ( cpu_clk : in std_logic;
+ areset : in std_logic;
+
+ -- Wishbone from Wishbone MUX
+ eth_raw_o : out wishbone_bus_out;
+ eth_raw_i : in wishbone_bus_in;
+
+ -- Wishbone ethernet core
+ eth_slave_i : in wishbone_bus_out;
+ eth_slave_o : out wishbone_bus_in);
+ end component;
+
+
+end wishbone_pkg;
diff --git a/zpu/hdl/wishbone/zpu_system.vhd b/zpu/hdl/wishbone/zpu_system.vhd
index 5b95a80..07c5bdc 100644
--- a/zpu/hdl/wishbone/zpu_system.vhd
+++ b/zpu/hdl/wishbone/zpu_system.vhd
@@ -1,104 +1,104 @@
--- ZPU
---
--- Copyright 2004-2008 oharboe - Øyvind Harboe - oyvind.harboe@zylin.com
---
--- The FreeBSD license
---
--- Redistribution and use in source and binary forms, with or without
--- modification, are permitted provided that the following conditions
--- are met:
---
--- 1. Redistributions of source code must retain the above copyright
--- notice, this list of conditions and the following disclaimer.
--- 2. Redistributions in binary form must reproduce the above
--- copyright notice, this list of conditions and the following
--- disclaimer in the documentation and/or other materials
--- provided with the distribution.
---
--- THIS SOFTWARE IS PROVIDED BY THE ZPU PROJECT ``AS IS'' AND ANY
--- EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
--- THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
--- PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
--- ZPU PROJECT OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
--- INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
--- (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
--- OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
--- HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
--- STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
--- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
--- ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
---
--- The views and conclusions contained in the software and documentation
--- are those of the authors and should not be interpreted as representing
--- official policies, either expressed or implied, of the ZPU Project.
-
-library IEEE;
-use IEEE.STD_LOGIC_1164.all;
-use IEEE.STD_LOGIC_UNSIGNED.all;
-
-library work;
-use work.wishbone_pkg.all;
-use work.zpupkg.all;
-use work.zpu_config.all;
-
-entity zpu_system is
- generic(
- simulate : boolean := false);
- port ( areset : in std_logic;
- cpu_clk : in std_logic;
-
- -- ZPU Control signals
- enable : in std_logic;
- interrupt : in std_logic;
-
- zpu_status : out std_logic_vector(63 downto 0);
-
- -- wishbone interfaces
- zpu_wb_i : in wishbone_bus_out;
- zpu_wb_o : out wishbone_bus_in);
-end zpu_system;
-
-architecture behave of zpu_system is
-
-signal mem_req : std_logic;
-signal mem_we : std_logic;
-signal mem_ack : std_logic;
-signal mem_read : std_logic_vector(wordSize-1 downto 0);
-signal mem_write : std_logic_vector(wordSize-1 downto 0);
-signal out_mem_addr : std_logic_vector(maxAddrBitIncIO downto 0);
-signal mem_writeMask : std_logic_vector(wordBytes-1 downto 0);
-
-
-begin
-
- my_zpu_core:
- zpu_core port map (
- clk => cpu_clk,
- areset => areset,
- enable => enable,
- mem_req => mem_req,
- mem_we => mem_we,
- mem_ack => mem_ack,
- mem_read => mem_read,
- mem_write => mem_write,
- out_mem_addr => out_mem_addr,
- mem_writeMask => mem_writeMask,
- interrupt => interrupt,
- zpu_status => zpu_status,
- break => open);
-
- my_zpu_wb_bridge:
- zpu_wb_bridge port map (
- clk => cpu_clk,
- areset => areset,
- mem_req => mem_req,
- mem_we => mem_we,
- mem_ack => mem_ack,
- mem_read => mem_read,
- mem_write => mem_write,
- out_mem_addr => out_mem_addr,
- mem_writeMask => mem_writeMask,
- zpu_wb_i => zpu_wb_i,
- zpu_wb_o => zpu_wb_o);
-
-end behave;
+-- ZPU
+--
+-- Copyright 2004-2008 oharboe - Øyvind Harboe - oyvind.harboe@zylin.com
+--
+-- The FreeBSD license
+--
+-- Redistribution and use in source and binary forms, with or without
+-- modification, are permitted provided that the following conditions
+-- are met:
+--
+-- 1. Redistributions of source code must retain the above copyright
+-- notice, this list of conditions and the following disclaimer.
+-- 2. Redistributions in binary form must reproduce the above
+-- copyright notice, this list of conditions and the following
+-- disclaimer in the documentation and/or other materials
+-- provided with the distribution.
+--
+-- THIS SOFTWARE IS PROVIDED BY THE ZPU PROJECT ``AS IS'' AND ANY
+-- EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+-- THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+-- PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+-- ZPU PROJECT OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+-- INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+-- (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+-- OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+-- HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+-- STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+-- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+-- ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+--
+-- The views and conclusions contained in the software and documentation
+-- are those of the authors and should not be interpreted as representing
+-- official policies, either expressed or implied, of the ZPU Project.
+
+library IEEE;
+use IEEE.STD_LOGIC_1164.all;
+use IEEE.STD_LOGIC_UNSIGNED.all;
+
+library work;
+use work.wishbone_pkg.all;
+use work.zpupkg.all;
+use work.zpu_config.all;
+
+entity zpu_system is
+ generic(
+ simulate : boolean := false);
+ port ( areset : in std_logic;
+ cpu_clk : in std_logic;
+
+ -- ZPU Control signals
+ enable : in std_logic;
+ interrupt : in std_logic;
+
+ zpu_status : out std_logic_vector(63 downto 0);
+
+ -- wishbone interfaces
+ zpu_wb_i : in wishbone_bus_out;
+ zpu_wb_o : out wishbone_bus_in);
+end zpu_system;
+
+architecture behave of zpu_system is
+
+signal mem_req : std_logic;
+signal mem_we : std_logic;
+signal mem_ack : std_logic;
+signal mem_read : std_logic_vector(wordSize-1 downto 0);
+signal mem_write : std_logic_vector(wordSize-1 downto 0);
+signal out_mem_addr : std_logic_vector(maxAddrBitIncIO downto 0);
+signal mem_writeMask : std_logic_vector(wordBytes-1 downto 0);
+
+
+begin
+
+ my_zpu_core:
+ zpu_core port map (
+ clk => cpu_clk,
+ areset => areset,
+ enable => enable,
+ mem_req => mem_req,
+ mem_we => mem_we,
+ mem_ack => mem_ack,
+ mem_read => mem_read,
+ mem_write => mem_write,
+ out_mem_addr => out_mem_addr,
+ mem_writeMask => mem_writeMask,
+ interrupt => interrupt,
+ zpu_status => zpu_status,
+ break => open);
+
+ my_zpu_wb_bridge:
+ zpu_wb_bridge port map (
+ clk => cpu_clk,
+ areset => areset,
+ mem_req => mem_req,
+ mem_we => mem_we,
+ mem_ack => mem_ack,
+ mem_read => mem_read,
+ mem_write => mem_write,
+ out_mem_addr => out_mem_addr,
+ mem_writeMask => mem_writeMask,
+ zpu_wb_i => zpu_wb_i,
+ zpu_wb_o => zpu_wb_o);
+
+end behave;
diff --git a/zpu/hdl/wishbone/zpu_wb_bridge.vhd b/zpu/hdl/wishbone/zpu_wb_bridge.vhd
index 226d839..086ae11 100644
--- a/zpu/hdl/wishbone/zpu_wb_bridge.vhd
+++ b/zpu/hdl/wishbone/zpu_wb_bridge.vhd
@@ -1,83 +1,83 @@
--- ZPU
---
--- Copyright 2004-2008 oharboe - Øyvind Harboe - oyvind.harboe@zylin.com
---
--- The FreeBSD license
---
--- Redistribution and use in source and binary forms, with or without
--- modification, are permitted provided that the following conditions
--- are met:
---
--- 1. Redistributions of source code must retain the above copyright
--- notice, this list of conditions and the following disclaimer.
--- 2. Redistributions in binary form must reproduce the above
--- copyright notice, this list of conditions and the following
--- disclaimer in the documentation and/or other materials
--- provided with the distribution.
---
--- THIS SOFTWARE IS PROVIDED BY THE ZPU PROJECT ``AS IS'' AND ANY
--- EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
--- THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
--- PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
--- ZPU PROJECT OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
--- INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
--- (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
--- OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
--- HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
--- STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
--- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
--- ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
---
--- The views and conclusions contained in the software and documentation
--- are those of the authors and should not be interpreted as representing
--- official policies, either expressed or implied, of the ZPU Project.
-
-library IEEE;
-use IEEE.STD_LOGIC_1164.ALL;
-use IEEE.STD_LOGIC_UNSIGNED.ALL;
-
-library work;
-use work.phi_config.all;
-use work.wishbone_pkg.all;
-use work.zpupkg.all;
-use work.zpu_config.all;
-
-entity zpu_wb_bridge is
- port ( -- Native ZPU interface
- clk : in std_logic;
- areset : in std_logic;
-
- mem_req : in std_logic;
- mem_we : in std_logic;
- mem_ack : out std_logic;
- mem_read : out std_logic_vector(wordSize-1 downto 0);
- mem_write : in std_logic_vector(wordSize-1 downto 0);
- out_mem_addr : in std_logic_vector(maxAddrBitIncIO downto 0);
- mem_writeMask : in std_logic_vector(wordBytes-1 downto 0);
-
- -- Wishbone from ZPU
- zpu_wb_i : in wishbone_bus_out;
- zpu_wb_o : out wishbone_bus_in);
-
-end zpu_wb_bridge;
-
-architecture behave of zpu_wb_bridge is
-
-begin
-
- mem_read <= zpu_wb_i.dat;
- mem_ack <= zpu_wb_i.ack;
-
- zpu_wb_o.adr <= "000000" & out_mem_addr(27) & out_mem_addr(24 downto 0);
- zpu_wb_o.dat <= mem_write;
- zpu_wb_o.sel <= mem_writeMask;
- zpu_wb_o.stb <= mem_req;
- zpu_wb_o.cyc <= mem_req;
- zpu_wb_o.we <= mem_we;
-
-end behave;
-
-
-
-
-
+-- ZPU
+--
+-- Copyright 2004-2008 oharboe - Øyvind Harboe - oyvind.harboe@zylin.com
+--
+-- The FreeBSD license
+--
+-- Redistribution and use in source and binary forms, with or without
+-- modification, are permitted provided that the following conditions
+-- are met:
+--
+-- 1. Redistributions of source code must retain the above copyright
+-- notice, this list of conditions and the following disclaimer.
+-- 2. Redistributions in binary form must reproduce the above
+-- copyright notice, this list of conditions and the following
+-- disclaimer in the documentation and/or other materials
+-- provided with the distribution.
+--
+-- THIS SOFTWARE IS PROVIDED BY THE ZPU PROJECT ``AS IS'' AND ANY
+-- EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+-- THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+-- PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+-- ZPU PROJECT OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+-- INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+-- (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+-- OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+-- HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+-- STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+-- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+-- ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+--
+-- The views and conclusions contained in the software and documentation
+-- are those of the authors and should not be interpreted as representing
+-- official policies, either expressed or implied, of the ZPU Project.
+
+library IEEE;
+use IEEE.STD_LOGIC_1164.ALL;
+use IEEE.STD_LOGIC_UNSIGNED.ALL;
+
+library work;
+use work.phi_config.all;
+use work.wishbone_pkg.all;
+use work.zpupkg.all;
+use work.zpu_config.all;
+
+entity zpu_wb_bridge is
+ port ( -- Native ZPU interface
+ clk : in std_logic;
+ areset : in std_logic;
+
+ mem_req : in std_logic;
+ mem_we : in std_logic;
+ mem_ack : out std_logic;
+ mem_read : out std_logic_vector(wordSize-1 downto 0);
+ mem_write : in std_logic_vector(wordSize-1 downto 0);
+ out_mem_addr : in std_logic_vector(maxAddrBitIncIO downto 0);
+ mem_writeMask : in std_logic_vector(wordBytes-1 downto 0);
+
+ -- Wishbone from ZPU
+ zpu_wb_i : in wishbone_bus_out;
+ zpu_wb_o : out wishbone_bus_in);
+
+end zpu_wb_bridge;
+
+architecture behave of zpu_wb_bridge is
+
+begin
+
+ mem_read <= zpu_wb_i.dat;
+ mem_ack <= zpu_wb_i.ack;
+
+ zpu_wb_o.adr <= "000000" & out_mem_addr(27) & out_mem_addr(24 downto 0);
+ zpu_wb_o.dat <= mem_write;
+ zpu_wb_o.sel <= mem_writeMask;
+ zpu_wb_o.stb <= mem_req;
+ zpu_wb_o.cyc <= mem_req;
+ zpu_wb_o.we <= mem_we;
+
+end behave;
+
+
+
+
+
diff --git a/zpu/hdl/zpu4/core/zpu_config.vhd b/zpu/hdl/zpu4/core/zpu_config.vhd
index 112dd01..5b3110c 100644
--- a/zpu/hdl/zpu4/core/zpu_config.vhd
+++ b/zpu/hdl/zpu4/core/zpu_config.vhd
@@ -1,44 +1,44 @@
--- ZPU
---
--- Copyright 2004-2008 oharboe - Øyvind Harboe - oyvind.harboe@zylin.com
---
--- The FreeBSD license
---
--- Redistribution and use in source and binary forms, with or without
--- modification, are permitted provided that the following conditions
--- are met:
---
--- 1. Redistributions of source code must retain the above copyright
--- notice, this list of conditions and the following disclaimer.
--- 2. Redistributions in binary form must reproduce the above
--- copyright notice, this list of conditions and the following
--- disclaimer in the documentation and/or other materials
--- provided with the distribution.
---
--- THIS SOFTWARE IS PROVIDED BY THE ZPU PROJECT ``AS IS'' AND ANY
--- EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
--- THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
--- PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
--- ZPU PROJECT OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
--- INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
--- (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
--- OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
--- HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
--- STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
--- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
--- ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
---
--- The views and conclusions contained in the software and documentation
--- are those of the authors and should not be interpreted as representing
--- official policies, either expressed or implied, of the ZPU Project.
-
-
-library ieee;
-use ieee.std_logic_1164.all;
-use ieee.std_logic_unsigned.all;
-use ieee.std_logic_arith.all;
-
-package zpu_config is
+-- ZPU
+--
+-- Copyright 2004-2008 oharboe - Øyvind Harboe - oyvind.harboe@zylin.com
+--
+-- The FreeBSD license
+--
+-- Redistribution and use in source and binary forms, with or without
+-- modification, are permitted provided that the following conditions
+-- are met:
+--
+-- 1. Redistributions of source code must retain the above copyright
+-- notice, this list of conditions and the following disclaimer.
+-- 2. Redistributions in binary form must reproduce the above
+-- copyright notice, this list of conditions and the following
+-- disclaimer in the documentation and/or other materials
+-- provided with the distribution.
+--
+-- THIS SOFTWARE IS PROVIDED BY THE ZPU PROJECT ``AS IS'' AND ANY
+-- EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+-- THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+-- PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+-- ZPU PROJECT OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+-- INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+-- (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+-- OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+-- HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+-- STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+-- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+-- ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+--
+-- The views and conclusions contained in the software and documentation
+-- are those of the authors and should not be interpreted as representing
+-- official policies, either expressed or implied, of the ZPU Project.
+
+
+library ieee;
+use ieee.std_logic_1164.all;
+use ieee.std_logic_unsigned.all;
+use ieee.std_logic_arith.all;
+
+package zpu_config is
-- generate trace output or not.
constant Generate_Trace : boolean := false;
@@ -56,4 +56,4 @@ package zpu_config is
constant spStart : std_logic_vector(maxAddrBitIncIO downto 0) :=
conv_std_logic_vector((2**(maxAddrBitBRAM+1))-8, maxAddrBitIncIO+1);
-end zpu_config;
+end zpu_config;
diff --git a/zpu/hdl/zpu4/core/zpu_core.vhd b/zpu/hdl/zpu4/core/zpu_core.vhd
index ff9449f..e2e4781 100644
--- a/zpu/hdl/zpu4/core/zpu_core.vhd
+++ b/zpu/hdl/zpu4/core/zpu_core.vhd
@@ -1,68 +1,68 @@
--- ZPU
---
--- Copyright 2004-2008 oharboe - Øyvind Harboe - oyvind.harboe@zylin.com
--- Copyright 2008 alvieboy - Álvaro Lopes - alvieboy@alvie.com
---
--- The FreeBSD license
---
--- Redistribution and use in source and binary forms, with or without
--- modification, are permitted provided that the following conditions
--- are met:
---
--- 1. Redistributions of source code must retain the above copyright
--- notice, this list of conditions and the following disclaimer.
--- 2. Redistributions in binary form must reproduce the above
--- copyright notice, this list of conditions and the following
--- disclaimer in the documentation and/or other materials
--- provided with the distribution.
---
--- THIS SOFTWARE IS PROVIDED BY THE ZPU PROJECT ``AS IS'' AND ANY
--- EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
--- THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
--- PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
--- ZPU PROJECT OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
--- INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
--- (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
--- OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
--- HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
--- STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
--- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
--- ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
---
--- The views and conclusions contained in the software and documentation
--- are those of the authors and should not be interpreted as representing
--- official policies, either expressed or implied, of the ZPU Project.
-
+-- ZPU
+--
+-- Copyright 2004-2008 oharboe - Øyvind Harboe - oyvind.harboe@zylin.com
+-- Copyright 2008 alvieboy - Álvaro Lopes - alvieboy@alvie.com
+--
+-- The FreeBSD license
+--
+-- Redistribution and use in source and binary forms, with or without
+-- modification, are permitted provided that the following conditions
+-- are met:
+--
+-- 1. Redistributions of source code must retain the above copyright
+-- notice, this list of conditions and the following disclaimer.
+-- 2. Redistributions in binary form must reproduce the above
+-- copyright notice, this list of conditions and the following
+-- disclaimer in the documentation and/or other materials
+-- provided with the distribution.
+--
+-- THIS SOFTWARE IS PROVIDED BY THE ZPU PROJECT ``AS IS'' AND ANY
+-- EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+-- THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+-- PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+-- ZPU PROJECT OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+-- INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+-- (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+-- OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+-- HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+-- STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+-- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+-- ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+--
+-- The views and conclusions contained in the software and documentation
+-- are those of the authors and should not be interpreted as representing
+-- official policies, either expressed or implied, of the ZPU Project.
+
library ieee;
use ieee.std_logic_1164.all;
-use ieee.numeric_std.all;
-
-library work;
-use work.zpu_config.all;
-use work.zpupkg.all;
-
-
--- mem_writeEnable - set to '1' for a single cycle to send off a write request.
--- mem_write is valid only while mem_writeEnable='1'.
--- mem_readEnable - set to '1' for a single cycle to send off a read request.
---
--- mem_busy - It is illegal to send off a read/write request when mem_busy='1'.
--- Set to '0' when mem_read is valid after a read request.
--- If it goes to '1'(busy), it is on the cycle after mem_read/writeEnable
--- is '1'.
--- mem_addr - address for read/write request
--- mem_read - read data. Valid only on the cycle after mem_busy='0' after
--- mem_readEnable='1' for a single cycle.
--- mem_write - data to write
--- mem_writeMask - set to '1' for those bits that are to be written to memory upon
--- write request
--- break - set to '1' when CPU hits break instruction
--- interrupt - set to '1' until interrupts are cleared by CPU.
-
-
-
-
-entity zpu_core is
+use ieee.numeric_std.all;
+
+library work;
+use work.zpu_config.all;
+use work.zpupkg.all;
+
+
+-- mem_writeEnable - set to '1' for a single cycle to send off a write request.
+-- mem_write is valid only while mem_writeEnable='1'.
+-- mem_readEnable - set to '1' for a single cycle to send off a read request.
+--
+-- mem_busy - It is illegal to send off a read/write request when mem_busy='1'.
+-- Set to '0' when mem_read is valid after a read request.
+-- If it goes to '1'(busy), it is on the cycle after mem_read/writeEnable
+-- is '1'.
+-- mem_addr - address for read/write request
+-- mem_read - read data. Valid only on the cycle after mem_busy='0' after
+-- mem_readEnable='1' for a single cycle.
+-- mem_write - data to write
+-- mem_writeMask - set to '1' for those bits that are to be written to memory upon
+-- write request
+-- break - set to '1' when CPU hits break instruction
+-- interrupt - set to '1' until interrupts are cleared by CPU.
+
+
+
+
+entity zpu_core is
port (
clk : in std_logic;
areset : in std_logic;
@@ -77,10 +77,10 @@ entity zpu_core is
interrupt : in std_logic;
break : out std_logic
);
-end zpu_core;
-
-architecture behave of zpu_core is
-
+end zpu_core;
+
+architecture behave of zpu_core is
+
type InsnType is (
State_AddTop,
State_Dup,
@@ -196,12 +196,12 @@ architecture behave of zpu_core is
signal trace_sp : std_logic_vector(maxAddrBitIncIO downto minAddrBit);
signal trace_topOfStack : std_logic_vector(wordSize-1 downto 0);
signal trace_topOfStackB : std_logic_vector(wordSize-1 downto 0);
-
--- state machine.
-
-begin
-
-
+
+-- state machine.
+
+begin
+
+
traceFileGenerate :
if Generate_Trace generate
trace_file : trace port map (
@@ -1009,7 +1009,7 @@ begin
end case; -- state
end if; -- clk'event
end process;
-
-
-
-end behave;
+
+
+
+end behave;
diff --git a/zpu/hdl/zpu4/core/zpu_core_small.vhd b/zpu/hdl/zpu4/core/zpu_core_small.vhd
index 1df9546..757d056 100644
--- a/zpu/hdl/zpu4/core/zpu_core_small.vhd
+++ b/zpu/hdl/zpu4/core/zpu_core_small.vhd
@@ -1,47 +1,47 @@
--- ZPU
---
--- Copyright 2004-2008 oharboe - Øyvind Harboe - oyvind.harboe@zylin.com
---
--- The FreeBSD license
---
--- Redistribution and use in source and binary forms, with or without
--- modification, are permitted provided that the following conditions
--- are met:
---
--- 1. Redistributions of source code must retain the above copyright
--- notice, this list of conditions and the following disclaimer.
--- 2. Redistributions in binary form must reproduce the above
--- copyright notice, this list of conditions and the following
--- disclaimer in the documentation and/or other materials
--- provided with the distribution.
---
--- THIS SOFTWARE IS PROVIDED BY THE ZPU PROJECT ``AS IS'' AND ANY
--- EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
--- THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
--- PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
--- ZPU PROJECT OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
--- INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
--- (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
--- OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
--- HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
--- STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
--- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
--- ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
---
--- The views and conclusions contained in the software and documentation
--- are those of the authors and should not be interpreted as representing
--- official policies, either expressed or implied, of the ZPU Project.
-
+-- ZPU
+--
+-- Copyright 2004-2008 oharboe - Øyvind Harboe - oyvind.harboe@zylin.com
+--
+-- The FreeBSD license
+--
+-- Redistribution and use in source and binary forms, with or without
+-- modification, are permitted provided that the following conditions
+-- are met:
+--
+-- 1. Redistributions of source code must retain the above copyright
+-- notice, this list of conditions and the following disclaimer.
+-- 2. Redistributions in binary form must reproduce the above
+-- copyright notice, this list of conditions and the following
+-- disclaimer in the documentation and/or other materials
+-- provided with the distribution.
+--
+-- THIS SOFTWARE IS PROVIDED BY THE ZPU PROJECT ``AS IS'' AND ANY
+-- EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+-- THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+-- PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+-- ZPU PROJECT OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+-- INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+-- (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+-- OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+-- HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+-- STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+-- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+-- ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+--
+-- The views and conclusions contained in the software and documentation
+-- are those of the authors and should not be interpreted as representing
+-- official policies, either expressed or implied, of the ZPU Project.
+
library ieee;
use ieee.std_logic_1164.all;
-use ieee.numeric_std.all;
-
-library work;
-use work.zpu_config.all;
-use work.zpupkg.all;
-
-
-entity zpu_core is
+use ieee.numeric_std.all;
+
+library work;
+use work.zpu_config.all;
+use work.zpupkg.all;
+
+
+entity zpu_core is
port (
clk : in std_logic;
-- asynchronous reset signal
@@ -67,12 +67,12 @@ entity zpu_core is
-- in simulation to stop simulation
break : out std_logic
);
-end zpu_core;
-
-
-
+end zpu_core;
+
+
+
architecture behave of zpu_core is
-
+
signal memAWriteEnable : std_logic;
signal memAAddr : unsigned(maxAddrBit downto minAddrBit);
signal memAWrite : unsigned(wordSize-1 downto 0);
@@ -171,11 +171,11 @@ architecture behave of zpu_core is
signal tOpcode_sel : index;
--
signal inInterrupt : std_logic;
-
-
-
-begin
-
+
+
+
+begin
+
-- generate a trace file.
--
-- This is only used in simulation to see what instructions are
@@ -596,7 +596,7 @@ begin
end if; -- reset, enable
end process;
-
-
-
-end behave;
+
+
+
+end behave;
diff --git a/zpu/hdl/zpu4/core/zpupkg.vhd b/zpu/hdl/zpu4/core/zpupkg.vhd
index f6823f5..a6e749d 100644
--- a/zpu/hdl/zpu4/core/zpupkg.vhd
+++ b/zpu/hdl/zpu4/core/zpupkg.vhd
@@ -1,47 +1,47 @@
--- ZPU
---
--- Copyright 2004-2008 oharboe - Øyvind Harboe - oyvind.harboe@zylin.com
---
--- The FreeBSD license
---
--- Redistribution and use in source and binary forms, with or without
--- modification, are permitted provided that the following conditions
--- are met:
---
--- 1. Redistributions of source code must retain the above copyright
--- notice, this list of conditions and the following disclaimer.
--- 2. Redistributions in binary form must reproduce the above
--- copyright notice, this list of conditions and the following
--- disclaimer in the documentation and/or other materials
--- provided with the distribution.
---
--- THIS SOFTWARE IS PROVIDED BY THE ZPU PROJECT ``AS IS'' AND ANY
--- EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
--- THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
--- PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
--- ZPU PROJECT OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
--- INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
--- (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
--- OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
--- HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
--- STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
--- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
--- ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
---
--- The views and conclusions contained in the software and documentation
--- are those of the authors and should not be interpreted as representing
--- official policies, either expressed or implied, of the ZPU Project.
-
+-- ZPU
+--
+-- Copyright 2004-2008 oharboe - Øyvind Harboe - oyvind.harboe@zylin.com
+--
+-- The FreeBSD license
+--
+-- Redistribution and use in source and binary forms, with or without
+-- modification, are permitted provided that the following conditions
+-- are met:
+--
+-- 1. Redistributions of source code must retain the above copyright
+-- notice, this list of conditions and the following disclaimer.
+-- 2. Redistributions in binary form must reproduce the above
+-- copyright notice, this list of conditions and the following
+-- disclaimer in the documentation and/or other materials
+-- provided with the distribution.
+--
+-- THIS SOFTWARE IS PROVIDED BY THE ZPU PROJECT ``AS IS'' AND ANY
+-- EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+-- THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+-- PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+-- ZPU PROJECT OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+-- INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+-- (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+-- OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+-- HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+-- STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+-- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+-- ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+--
+-- The views and conclusions contained in the software and documentation
+-- are those of the authors and should not be interpreted as representing
+-- official policies, either expressed or implied, of the ZPU Project.
+
library ieee;
use ieee.std_logic_1164.all;
-use ieee.numeric_std.all;
-
-library work;
-use work.zpu_config.all;
-
-
-package zpupkg is
-
+use ieee.numeric_std.all;
+
+library work;
+use work.zpu_config.all;
+
+
+package zpupkg is
+
-- This bit is set for read/writes to IO
-- FIX!!! eventually this should be set to wordSize-1 so as to
-- to make the address of IO independent of amount of memory
@@ -215,4 +215,4 @@ package zpupkg is
-end zpupkg;
+end zpupkg;
diff --git a/zpu/hdl/zpu4/src/clocks.vhd b/zpu/hdl/zpu4/src/clocks.vhd
index a352b3c..704d790 100644
--- a/zpu/hdl/zpu4/src/clocks.vhd
+++ b/zpu/hdl/zpu4/src/clocks.vhd
@@ -1,246 +1,246 @@
-library IEEE;
-use IEEE.STD_LOGIC_1164.ALL;
-use IEEE.STD_LOGIC_UNSIGNED.ALL;
-
-library UNISIM;
-use UNISIM.vcomponents.all;
-
-entity clocks is
- port ( areset : in std_logic;
- cpu_clk_p : in std_logic;
- sdr_clk_fb_p : in std_logic;
- cpu_clk : out std_logic;
- cpu_clk_2x : out std_logic;
- cpu_clk_4x : out std_logic;
- ddr_in_clk : out std_logic;
- ddr_in_clk_2x : out std_logic;
- locked : out std_logic_vector(2 downto 0));
-end clocks;
-
-architecture behave of clocks is
-
-signal low : std_logic;
-
-signal cpu_clk_in : std_logic;
-signal sdr_clk_fb_in : std_logic;
-
-signal dcm_cpu1 : std_logic;
-signal dcm_cpu2 : std_logic;
-signal dcm_cpu2_dum : std_logic;
-signal dcm_cpu4 : std_logic;
-signal dcm_ddr2 : std_logic;
-signal dcm_ddr2_2x : std_logic;
-
-signal cpu_clk_int : std_logic;
-signal cpu_clk_2x_int : std_logic;
-signal cpu_clk_2x_dum_int : std_logic;
-signal cpu_clk_4x_int : std_logic;
-signal ddr_in_clk_int : std_logic;
-signal ddr_in_clk_2x_int : std_logic;
-
-signal dcm1_locked_del : std_logic;
-signal dcm2_locked_del : std_logic;
-signal dcm2_reset : std_logic;
-signal dcm3_reset : std_logic;
-
-signal locked_int : std_logic_vector(2 downto 0);
-signal del_addr : std_logic_vector(3 downto 0);
-
-begin
-
- low <= '0';
- del_addr <= "1111";
-
- cpu_clk <= cpu_clk_int;
- cpu_clk_2x <= cpu_clk_2x_int;
- cpu_clk_4x <= cpu_clk_4x_int;
- ddr_in_clk <= ddr_in_clk_int;
- ddr_in_clk_2x <= ddr_in_clk_2x_int;
- locked <= locked_int;
-
-
- CPU_IBUFG:
- IBUFG port map (
- O => cpu_clk_in,
- I => cpu_clk_p);
-
- SDR_FB_IBUFG:
- IBUFG port map (
- O => sdr_clk_fb_in,
- I => sdr_clk_fb_p);
-
- dcm2_rst:
- SRL16 generic map (
- INIT => X"0000")
- port map (
- Q => dcm1_locked_del,
- A0 => del_addr(0),
- A1 => del_addr(1),
- A2 => del_addr(2),
- A3 => del_addr(3),
- CLK => cpu_clk_int,
- D => locked_int(0));
-
- dcm2_reset <= not(dcm1_locked_del);
-
- dcm3_rst:
- SRL16 generic map (
- INIT => X"0000")
- port map (
- Q => dcm2_locked_del,
- A0 => del_addr(0),
- A1 => del_addr(1),
- A2 => del_addr(2),
- A3 => del_addr(3),
- CLK => cpu_clk_int,
- D => locked_int(1));
-
- dcm3_reset <= not(dcm2_locked_del);
-
- cpu1_dcm:
- DCM generic map (
- CLKDV_DIVIDE => 2.0, -- Divide by: 1.5,2.0,2.5,3.0,3.5,4.0,4.5,5.0,5.5,6.0,6.5
- -- 7.0,7.5,8.0,9.0,10.0,11.0,12.0,13.0,14.0,15.0 or 16.0
- CLKFX_DIVIDE => 1, -- Can be any interger from 1 to 32
- CLKFX_MULTIPLY => 4, -- Can be any integer from 1 to 32
- CLKIN_DIVIDE_BY_2 => FALSE, -- TRUE/FALSE to enable CLKIN divide by two feature
- CLKIN_PERIOD => 15.625, -- Specify period of input clock
- CLKOUT_PHASE_SHIFT => "NONE", -- Specify phase shift of NONE, FIXED or VARIABLE
- CLK_FEEDBACK => "1X", -- Specify clock feedback of NONE, 1X or 2X
- DESKEW_ADJUST => "SYSTEM_SYNCHRONOUS", -- SOURCE_SYNCHRONOUS, SYSTEM_SYNCHRONOUS or
- -- an integer from 0 to 15
- DFS_FREQUENCY_MODE => "LOW", -- HIGH or LOW frequency mode for frequency synthesis
- DLL_FREQUENCY_MODE => "LOW", -- HIGH or LOW frequency mode for DLL
- DUTY_CYCLE_CORRECTION => TRUE, -- Duty cycle correction, TRUE or FALSE
- FACTORY_JF => X"8080", -- FACTORY JF Values
- PHASE_SHIFT => 0, -- Amount of fixed phase shift from -255 to 255
- STARTUP_WAIT => FALSE) -- Delay configuration DONE until DCM LOCK, TRUE/FALSE
- port map (
- CLK0 => dcm_cpu1, -- 0 degree DCM CLK ouptput
- CLK180 => open, -- 180 degree DCM CLK output
- CLK270 => open, -- 270 degree DCM CLK output
- CLK2X => dcm_cpu2, -- 2X DCM CLK output
- CLK2X180 => open, -- 2X, 180 degree DCM CLK out
- CLK90 => open, -- 90 degree DCM CLK output
- CLKDV => open, -- Divided DCM CLK out (CLKDV_DIVIDE)
- CLKFX => open, -- DCM CLK synthesis out (M/D)
- CLKFX180 => open, -- 180 degree CLK synthesis out
- LOCKED => locked_int(0), -- DCM LOCK status output
- PSDONE => open, -- Dynamic phase adjust done output
- STATUS => open, -- 8-bit DCM status bits output
- CLKFB => cpu_clk_int, -- DCM clock feedback
- CLKIN => cpu_clk_in, -- Clock input (from IBUFG, BUFG or DCM)
- PSCLK => low, -- Dynamic phase adjust clock input
- PSEN => low, -- Dynamic phase adjust enable input
- PSINCDEC => low, -- Dynamic phase adjust increment/decrement
- RST => areset); -- DCM asynchronous reset input
-
- cpu2_dcm:
- DCM generic map (
- CLKDV_DIVIDE => 2.0, -- Divide by: 1.5,2.0,2.5,3.0,3.5,4.0,4.5,5.0,5.5,6.0,6.5
- -- 7.0,7.5,8.0,9.0,10.0,11.0,12.0,13.0,14.0,15.0 or 16.0
- CLKFX_DIVIDE => 1, -- Can be any interger from 1 to 32
- CLKFX_MULTIPLY => 4, -- Can be any integer from 1 to 32
- CLKIN_DIVIDE_BY_2 => FALSE, -- TRUE/FALSE to enable CLKIN divide by two feature
- CLKIN_PERIOD => 7.8125, -- Specify period of input clock
- CLKOUT_PHASE_SHIFT => "NONE", -- Specify phase shift of NONE, FIXED or VARIABLE
- CLK_FEEDBACK => "1X", -- Specify clock feedback of NONE, 1X or 2X
- DESKEW_ADJUST => "SYSTEM_SYNCHRONOUS", -- SOURCE_SYNCHRONOUS, SYSTEM_SYNCHRONOUS or
- -- an integer from 0 to 15
- DFS_FREQUENCY_MODE => "LOW", -- HIGH or LOW frequency mode for frequency synthesis
- DLL_FREQUENCY_MODE => "LOW", -- HIGH or LOW frequency mode for DLL
- DUTY_CYCLE_CORRECTION => TRUE, -- Duty cycle correction, TRUE or FALSE
- FACTORY_JF => X"8080", -- FACTORY JF Values
- PHASE_SHIFT => 0, -- Amount of fixed phase shift from -255 to 255
- STARTUP_WAIT => FALSE) -- Delay configuration DONE until DCM LOCK, TRUE/FALSE
- port map (
- CLK0 => dcm_cpu2_dum, -- 0 degree DCM CLK ouptput
- CLK180 => open, -- 180 degree DCM CLK output
- CLK270 => open, -- 270 degree DCM CLK output
- CLK2X => dcm_cpu4, -- 2X DCM CLK output
- CLK2X180 => open, -- 2X, 180 degree DCM CLK out
- CLK90 => open, -- 90 degree DCM CLK output
- CLKDV => open, -- Divided DCM CLK out (CLKDV_DIVIDE)
- CLKFX => open, -- DCM CLK synthesis out (M/D)
- CLKFX180 => open, -- 180 degree CLK synthesis out
- LOCKED => locked_int(1), -- DCM LOCK status output
- PSDONE => open, -- Dynamic phase adjust done output
- STATUS => open, -- 8-bit DCM status bits output
- CLKFB => cpu_clk_2x_dum_int, -- DCM clock feedback
- CLKIN => cpu_clk_2x_int, -- Clock input (from IBUFG, BUFG or DCM)
- PSCLK => low, -- Dynamic phase adjust clock input
- PSEN => low, -- Dynamic phase adjust enable input
- PSINCDEC => low, -- Dynamic phase adjust increment/decrement
- RST => dcm2_reset); -- DCM asynchronous reset input
-
- ddr_read_dcm:
- DCM generic map (
- CLKDV_DIVIDE => 2.0, -- Divide by: 1.5,2.0,2.5,3.0,3.5,4.0,4.5,5.0,5.5,6.0,6.5
- -- 7.0,7.5,8.0,9.0,10.0,11.0,12.0,13.0,14.0,15.0 or 16.0
- CLKFX_DIVIDE => 1, -- Can be any interger from 1 to 32
- CLKFX_MULTIPLY => 4, -- Can be any integer from 1 to 32
- CLKIN_DIVIDE_BY_2 => FALSE, -- TRUE/FALSE to enable CLKIN divide by two feature
- CLKIN_PERIOD => 7.8125, -- Specify period of input clock
- CLKOUT_PHASE_SHIFT => "FIXED", -- Specify phase shift of NONE, FIXED or VARIABLE
--- CLKOUT_PHASE_SHIFT => "NONE", -- Specify phase shift of NONE, FIXED or VARIABLE
- CLK_FEEDBACK => "1X", -- Specify clock feedback of NONE, 1X or 2X
- DESKEW_ADJUST => "SYSTEM_SYNCHRONOUS", -- SOURCE_SYNCHRONOUS, SYSTEM_SYNCHRONOUS or
- -- an integer from 0 to 15
- DFS_FREQUENCY_MODE => "LOW", -- HIGH or LOW frequency mode for frequency synthesis
- DLL_FREQUENCY_MODE => "LOW", -- HIGH or LOW frequency mode for DLL
- DUTY_CYCLE_CORRECTION => TRUE, -- Duty cycle correction, TRUE or FALSE
- FACTORY_JF => X"8080", -- FACTORY JF Values
- PHASE_SHIFT => 103, -- Amount of fixed phase shift from -255 to 255
--- PHASE_SHIFT => 0, -- Amount of fixed phase shift from -255 to 255
- STARTUP_WAIT => FALSE) -- Delay configuration DONE until DCM LOCK, TRUE/FALSE
- port map (
- CLK0 => dcm_ddr2, -- 0 degree DCM CLK ouptput
- CLK180 => open, -- 180 degree DCM CLK output
- CLK270 => open, -- 270 degree DCM CLK output
- CLK2X => dcm_ddr2_2x, -- 2X DCM CLK output
- CLK2X180 => open, -- 2X, 180 degree DCM CLK out
- CLK90 => open, -- 90 degree DCM CLK output
- CLKDV => open, -- Divided DCM CLK out (CLKDV_DIVIDE)
- CLKFX => open, -- DCM CLK synthesis out (M/D)
- CLKFX180 => open, -- 180 degree CLK synthesis out
- LOCKED => locked_int(2), -- DCM LOCK status output
- PSDONE => open, -- Dynamic phase adjust done output
- STATUS => open, -- 8-bit DCM status bits output
- CLKFB => ddr_in_clk_int, -- DCM clock feedback
- CLKIN => sdr_clk_fb_in, -- Clock input (from IBUFG, BUFG or DCM)
- PSCLK => low, -- Dynamic phase adjust clock input
- PSEN => low, -- Dynamic phase adjust enable input
- PSINCDEC => low, -- Dynamic phase adjust increment/decrement
- RST => dcm3_reset); -- DCM asynchronous reset input
-
- cpu1:
- BUFG port map (
- I => dcm_cpu1,
- O => cpu_clk_int);
-
- cpu2:
- BUFG port map (
- I => dcm_cpu2,
- O => cpu_clk_2x_int);
-
- cpu2_dum:
- BUFG port map (
- I => dcm_cpu2_dum,
- O => cpu_clk_2x_dum_int);
-
- cpu4:
- BUFG port map (
- I => dcm_cpu4,
- O => cpu_clk_4x_int);
-
- ddr_clk:
- BUFG port map (
- I => dcm_ddr2,
- O => ddr_in_clk_int);
-
- ddr_clk_2x:
- BUFG port map (
- I => dcm_ddr2_2x,
- O => ddr_in_clk_2x_int);
-
+library IEEE;
+use IEEE.STD_LOGIC_1164.ALL;
+use IEEE.STD_LOGIC_UNSIGNED.ALL;
+
+library UNISIM;
+use UNISIM.vcomponents.all;
+
+entity clocks is
+ port ( areset : in std_logic;
+ cpu_clk_p : in std_logic;
+ sdr_clk_fb_p : in std_logic;
+ cpu_clk : out std_logic;
+ cpu_clk_2x : out std_logic;
+ cpu_clk_4x : out std_logic;
+ ddr_in_clk : out std_logic;
+ ddr_in_clk_2x : out std_logic;
+ locked : out std_logic_vector(2 downto 0));
+end clocks;
+
+architecture behave of clocks is
+
+signal low : std_logic;
+
+signal cpu_clk_in : std_logic;
+signal sdr_clk_fb_in : std_logic;
+
+signal dcm_cpu1 : std_logic;
+signal dcm_cpu2 : std_logic;
+signal dcm_cpu2_dum : std_logic;
+signal dcm_cpu4 : std_logic;
+signal dcm_ddr2 : std_logic;
+signal dcm_ddr2_2x : std_logic;
+
+signal cpu_clk_int : std_logic;
+signal cpu_clk_2x_int : std_logic;
+signal cpu_clk_2x_dum_int : std_logic;
+signal cpu_clk_4x_int : std_logic;
+signal ddr_in_clk_int : std_logic;
+signal ddr_in_clk_2x_int : std_logic;
+
+signal dcm1_locked_del : std_logic;
+signal dcm2_locked_del : std_logic;
+signal dcm2_reset : std_logic;
+signal dcm3_reset : std_logic;
+
+signal locked_int : std_logic_vector(2 downto 0);
+signal del_addr : std_logic_vector(3 downto 0);
+
+begin
+
+ low <= '0';
+ del_addr <= "1111";
+
+ cpu_clk <= cpu_clk_int;
+ cpu_clk_2x <= cpu_clk_2x_int;
+ cpu_clk_4x <= cpu_clk_4x_int;
+ ddr_in_clk <= ddr_in_clk_int;
+ ddr_in_clk_2x <= ddr_in_clk_2x_int;
+ locked <= locked_int;
+
+
+ CPU_IBUFG:
+ IBUFG port map (
+ O => cpu_clk_in,
+ I => cpu_clk_p);
+
+ SDR_FB_IBUFG:
+ IBUFG port map (
+ O => sdr_clk_fb_in,
+ I => sdr_clk_fb_p);
+
+ dcm2_rst:
+ SRL16 generic map (
+ INIT => X"0000")
+ port map (
+ Q => dcm1_locked_del,
+ A0 => del_addr(0),
+ A1 => del_addr(1),
+ A2 => del_addr(2),
+ A3 => del_addr(3),
+ CLK => cpu_clk_int,
+ D => locked_int(0));
+
+ dcm2_reset <= not(dcm1_locked_del);
+
+ dcm3_rst:
+ SRL16 generic map (
+ INIT => X"0000")
+ port map (
+ Q => dcm2_locked_del,
+ A0 => del_addr(0),
+ A1 => del_addr(1),
+ A2 => del_addr(2),
+ A3 => del_addr(3),
+ CLK => cpu_clk_int,
+ D => locked_int(1));
+
+ dcm3_reset <= not(dcm2_locked_del);
+
+ cpu1_dcm:
+ DCM generic map (
+ CLKDV_DIVIDE => 2.0, -- Divide by: 1.5,2.0,2.5,3.0,3.5,4.0,4.5,5.0,5.5,6.0,6.5
+ -- 7.0,7.5,8.0,9.0,10.0,11.0,12.0,13.0,14.0,15.0 or 16.0
+ CLKFX_DIVIDE => 1, -- Can be any interger from 1 to 32
+ CLKFX_MULTIPLY => 4, -- Can be any integer from 1 to 32
+ CLKIN_DIVIDE_BY_2 => FALSE, -- TRUE/FALSE to enable CLKIN divide by two feature
+ CLKIN_PERIOD => 15.625, -- Specify period of input clock
+ CLKOUT_PHASE_SHIFT => "NONE", -- Specify phase shift of NONE, FIXED or VARIABLE
+ CLK_FEEDBACK => "1X", -- Specify clock feedback of NONE, 1X or 2X
+ DESKEW_ADJUST => "SYSTEM_SYNCHRONOUS", -- SOURCE_SYNCHRONOUS, SYSTEM_SYNCHRONOUS or
+ -- an integer from 0 to 15
+ DFS_FREQUENCY_MODE => "LOW", -- HIGH or LOW frequency mode for frequency synthesis
+ DLL_FREQUENCY_MODE => "LOW", -- HIGH or LOW frequency mode for DLL
+ DUTY_CYCLE_CORRECTION => TRUE, -- Duty cycle correction, TRUE or FALSE
+ FACTORY_JF => X"8080", -- FACTORY JF Values
+ PHASE_SHIFT => 0, -- Amount of fixed phase shift from -255 to 255
+ STARTUP_WAIT => FALSE) -- Delay configuration DONE until DCM LOCK, TRUE/FALSE
+ port map (
+ CLK0 => dcm_cpu1, -- 0 degree DCM CLK ouptput
+ CLK180 => open, -- 180 degree DCM CLK output
+ CLK270 => open, -- 270 degree DCM CLK output
+ CLK2X => dcm_cpu2, -- 2X DCM CLK output
+ CLK2X180 => open, -- 2X, 180 degree DCM CLK out
+ CLK90 => open, -- 90 degree DCM CLK output
+ CLKDV => open, -- Divided DCM CLK out (CLKDV_DIVIDE)
+ CLKFX => open, -- DCM CLK synthesis out (M/D)
+ CLKFX180 => open, -- 180 degree CLK synthesis out
+ LOCKED => locked_int(0), -- DCM LOCK status output
+ PSDONE => open, -- Dynamic phase adjust done output
+ STATUS => open, -- 8-bit DCM status bits output
+ CLKFB => cpu_clk_int, -- DCM clock feedback
+ CLKIN => cpu_clk_in, -- Clock input (from IBUFG, BUFG or DCM)
+ PSCLK => low, -- Dynamic phase adjust clock input
+ PSEN => low, -- Dynamic phase adjust enable input
+ PSINCDEC => low, -- Dynamic phase adjust increment/decrement
+ RST => areset); -- DCM asynchronous reset input
+
+ cpu2_dcm:
+ DCM generic map (
+ CLKDV_DIVIDE => 2.0, -- Divide by: 1.5,2.0,2.5,3.0,3.5,4.0,4.5,5.0,5.5,6.0,6.5
+ -- 7.0,7.5,8.0,9.0,10.0,11.0,12.0,13.0,14.0,15.0 or 16.0
+ CLKFX_DIVIDE => 1, -- Can be any interger from 1 to 32
+ CLKFX_MULTIPLY => 4, -- Can be any integer from 1 to 32
+ CLKIN_DIVIDE_BY_2 => FALSE, -- TRUE/FALSE to enable CLKIN divide by two feature
+ CLKIN_PERIOD => 7.8125, -- Specify period of input clock
+ CLKOUT_PHASE_SHIFT => "NONE", -- Specify phase shift of NONE, FIXED or VARIABLE
+ CLK_FEEDBACK => "1X", -- Specify clock feedback of NONE, 1X or 2X
+ DESKEW_ADJUST => "SYSTEM_SYNCHRONOUS", -- SOURCE_SYNCHRONOUS, SYSTEM_SYNCHRONOUS or
+ -- an integer from 0 to 15
+ DFS_FREQUENCY_MODE => "LOW", -- HIGH or LOW frequency mode for frequency synthesis
+ DLL_FREQUENCY_MODE => "LOW", -- HIGH or LOW frequency mode for DLL
+ DUTY_CYCLE_CORRECTION => TRUE, -- Duty cycle correction, TRUE or FALSE
+ FACTORY_JF => X"8080", -- FACTORY JF Values
+ PHASE_SHIFT => 0, -- Amount of fixed phase shift from -255 to 255
+ STARTUP_WAIT => FALSE) -- Delay configuration DONE until DCM LOCK, TRUE/FALSE
+ port map (
+ CLK0 => dcm_cpu2_dum, -- 0 degree DCM CLK ouptput
+ CLK180 => open, -- 180 degree DCM CLK output
+ CLK270 => open, -- 270 degree DCM CLK output
+ CLK2X => dcm_cpu4, -- 2X DCM CLK output
+ CLK2X180 => open, -- 2X, 180 degree DCM CLK out
+ CLK90 => open, -- 90 degree DCM CLK output
+ CLKDV => open, -- Divided DCM CLK out (CLKDV_DIVIDE)
+ CLKFX => open, -- DCM CLK synthesis out (M/D)
+ CLKFX180 => open, -- 180 degree CLK synthesis out
+ LOCKED => locked_int(1), -- DCM LOCK status output
+ PSDONE => open, -- Dynamic phase adjust done output
+ STATUS => open, -- 8-bit DCM status bits output
+ CLKFB => cpu_clk_2x_dum_int, -- DCM clock feedback
+ CLKIN => cpu_clk_2x_int, -- Clock input (from IBUFG, BUFG or DCM)
+ PSCLK => low, -- Dynamic phase adjust clock input
+ PSEN => low, -- Dynamic phase adjust enable input
+ PSINCDEC => low, -- Dynamic phase adjust increment/decrement
+ RST => dcm2_reset); -- DCM asynchronous reset input
+
+ ddr_read_dcm:
+ DCM generic map (
+ CLKDV_DIVIDE => 2.0, -- Divide by: 1.5,2.0,2.5,3.0,3.5,4.0,4.5,5.0,5.5,6.0,6.5
+ -- 7.0,7.5,8.0,9.0,10.0,11.0,12.0,13.0,14.0,15.0 or 16.0
+ CLKFX_DIVIDE => 1, -- Can be any interger from 1 to 32
+ CLKFX_MULTIPLY => 4, -- Can be any integer from 1 to 32
+ CLKIN_DIVIDE_BY_2 => FALSE, -- TRUE/FALSE to enable CLKIN divide by two feature
+ CLKIN_PERIOD => 7.8125, -- Specify period of input clock
+ CLKOUT_PHASE_SHIFT => "FIXED", -- Specify phase shift of NONE, FIXED or VARIABLE
+-- CLKOUT_PHASE_SHIFT => "NONE", -- Specify phase shift of NONE, FIXED or VARIABLE
+ CLK_FEEDBACK => "1X", -- Specify clock feedback of NONE, 1X or 2X
+ DESKEW_ADJUST => "SYSTEM_SYNCHRONOUS", -- SOURCE_SYNCHRONOUS, SYSTEM_SYNCHRONOUS or
+ -- an integer from 0 to 15
+ DFS_FREQUENCY_MODE => "LOW", -- HIGH or LOW frequency mode for frequency synthesis
+ DLL_FREQUENCY_MODE => "LOW", -- HIGH or LOW frequency mode for DLL
+ DUTY_CYCLE_CORRECTION => TRUE, -- Duty cycle correction, TRUE or FALSE
+ FACTORY_JF => X"8080", -- FACTORY JF Values
+ PHASE_SHIFT => 103, -- Amount of fixed phase shift from -255 to 255
+-- PHASE_SHIFT => 0, -- Amount of fixed phase shift from -255 to 255
+ STARTUP_WAIT => FALSE) -- Delay configuration DONE until DCM LOCK, TRUE/FALSE
+ port map (
+ CLK0 => dcm_ddr2, -- 0 degree DCM CLK ouptput
+ CLK180 => open, -- 180 degree DCM CLK output
+ CLK270 => open, -- 270 degree DCM CLK output
+ CLK2X => dcm_ddr2_2x, -- 2X DCM CLK output
+ CLK2X180 => open, -- 2X, 180 degree DCM CLK out
+ CLK90 => open, -- 90 degree DCM CLK output
+ CLKDV => open, -- Divided DCM CLK out (CLKDV_DIVIDE)
+ CLKFX => open, -- DCM CLK synthesis out (M/D)
+ CLKFX180 => open, -- 180 degree CLK synthesis out
+ LOCKED => locked_int(2), -- DCM LOCK status output
+ PSDONE => open, -- Dynamic phase adjust done output
+ STATUS => open, -- 8-bit DCM status bits output
+ CLKFB => ddr_in_clk_int, -- DCM clock feedback
+ CLKIN => sdr_clk_fb_in, -- Clock input (from IBUFG, BUFG or DCM)
+ PSCLK => low, -- Dynamic phase adjust clock input
+ PSEN => low, -- Dynamic phase adjust enable input
+ PSINCDEC => low, -- Dynamic phase adjust increment/decrement
+ RST => dcm3_reset); -- DCM asynchronous reset input
+
+ cpu1:
+ BUFG port map (
+ I => dcm_cpu1,
+ O => cpu_clk_int);
+
+ cpu2:
+ BUFG port map (
+ I => dcm_cpu2,
+ O => cpu_clk_2x_int);
+
+ cpu2_dum:
+ BUFG port map (
+ I => dcm_cpu2_dum,
+ O => cpu_clk_2x_dum_int);
+
+ cpu4:
+ BUFG port map (
+ I => dcm_cpu4,
+ O => cpu_clk_4x_int);
+
+ ddr_clk:
+ BUFG port map (
+ I => dcm_ddr2,
+ O => ddr_in_clk_int);
+
+ ddr_clk_2x:
+ BUFG port map (
+ I => dcm_ddr2_2x,
+ O => ddr_in_clk_2x_int);
+
end behave; \ No newline at end of file
diff --git a/zpu/hdl/zpu4/src/io.vhd b/zpu/hdl/zpu4/src/io.vhd
index a0e494a..159df6f 100644
--- a/zpu/hdl/zpu4/src/io.vhd
+++ b/zpu/hdl/zpu4/src/io.vhd
@@ -1,112 +1,112 @@
-library ieee;
-use ieee.std_logic_1164.all;
-use ieee.numeric_std.all;
-
-use std.textio.all;
-
-library work;
-use work.zpu_config.all;
-use work.zpupkg.all;
-use work.txt_util.all;
-
-entity zpu_io is
- generic (
- log_file: string := "log.txt"
- );
- port(
- clk : in std_logic;
- areset : in std_logic;
- busy : out std_logic;
- writeEnable : in std_logic;
- readEnable : in std_logic;
- write : in std_logic_vector(wordSize-1 downto 0);
- read : out std_logic_vector(wordSize-1 downto 0);
- addr : in std_logic_vector(maxAddrBit downto minAddrBit)
- );
-end zpu_io;
-
-
-architecture behave of zpu_io is
-
-
-
-signal timer_read : std_logic_vector(7 downto 0);
---signal timer_write : std_logic_vector(7 downto 0);
-signal timer_we : std_logic;
-
-signal serving : std_logic;
-
-file l_file : TEXT open write_mode is log_file;
-constant lowAddrBits: std_logic_vector(minAddrBit-1 downto 0) := (others=>'0');
-constant tx_full: std_logic := '0';
-constant rx_empty: std_logic := '1';
-
-begin
-
-
- timerinst: timer port map (
- clk => clk,
- areset => areset,
- we => timer_we,
- din => write(7 downto 0),
- adr => addr(4 downto 2),
- dout => timer_read);
-
- busy <= writeEnable or readEnable;
- timer_we <= writeEnable and addr(12);
-
- process(areset, clk)
- variable taddr : std_logic_vector(maxAddrBit downto 0);
- begin
- taddr := (others => '0');
- taddr(maxAddrBit downto minAddrBit) := addr;
-
- if (areset = '1') then
--- timer_we <= '0';
- elsif (clk'event and clk = '1') then
--- timer_we <= '0';
- if writeEnable = '1' then
- -- external interface (fixed address)
- --<JK> extend compare to avoid waring messages
- if ("1" & addr & lowAddrBits)=x"80a000c" then
- report "Write to UART[0]" & " :0x" & hstr(write);
- -- Write to UART
- -- report "" & character'image(conv_integer(memBint)) severity note;
- print(l_file, character'val(to_integer(unsigned(write))));
- elsif addr(12)='1' then
- report "Write to TIMER" & " :0x" & hstr(write);
--- report "xxx" severity failure;
--- timer_we <= '1';
- else
- print(l_file, character'val(to_integer(unsigned(write))));
- report "Illegal IO write @" & "0x" & hstr(taddr) severity warning;
- end if;
-
- end if;
- read <= (others => '0');
- if (readEnable = '1') then
- --<JK> extend compare to avoid waring messages
- if ("1" & addr & lowAddrBits)=x"80a000c" then
- report "Read UART[0]";
- read(8) <= not tx_full; -- output fifo not full
- read(9) <= not rx_empty; -- receiver not empty
- elsif ("1" & addr & lowAddrBits)=x"80a0010" then
- report "Read UART[1]";
- read(8) <= not rx_empty; -- receiver not empty
- read(7 downto 0) <= (others => '0');
- elsif addr(12)='1' then
- report "Read TIMER";
- read(7 downto 0) <= timer_read;
- elsif addr(11)='1' then
- report "Read ZPU Freq";
- read(7 downto 0) <= ZPU_Frequency;
- else
- report "Illegal IO read @" & "0x" & hstr(taddr) severity warning;
- end if;
- end if;
- end if;
- end process;
-
-
-end behave;
-
+library ieee;
+use ieee.std_logic_1164.all;
+use ieee.numeric_std.all;
+
+use std.textio.all;
+
+library work;
+use work.zpu_config.all;
+use work.zpupkg.all;
+use work.txt_util.all;
+
+entity zpu_io is
+ generic (
+ log_file: string := "log.txt"
+ );
+ port(
+ clk : in std_logic;
+ areset : in std_logic;
+ busy : out std_logic;
+ writeEnable : in std_logic;
+ readEnable : in std_logic;
+ write : in std_logic_vector(wordSize-1 downto 0);
+ read : out std_logic_vector(wordSize-1 downto 0);
+ addr : in std_logic_vector(maxAddrBit downto minAddrBit)
+ );
+end zpu_io;
+
+
+architecture behave of zpu_io is
+
+
+
+signal timer_read : std_logic_vector(7 downto 0);
+--signal timer_write : std_logic_vector(7 downto 0);
+signal timer_we : std_logic;
+
+signal serving : std_logic;
+
+file l_file : TEXT open write_mode is log_file;
+constant lowAddrBits: std_logic_vector(minAddrBit-1 downto 0) := (others=>'0');
+constant tx_full: std_logic := '0';
+constant rx_empty: std_logic := '1';
+
+begin
+
+
+ timerinst: timer port map (
+ clk => clk,
+ areset => areset,
+ we => timer_we,
+ din => write(7 downto 0),
+ adr => addr(4 downto 2),
+ dout => timer_read);
+
+ busy <= writeEnable or readEnable;
+ timer_we <= writeEnable and addr(12);
+
+ process(areset, clk)
+ variable taddr : std_logic_vector(maxAddrBit downto 0);
+ begin
+ taddr := (others => '0');
+ taddr(maxAddrBit downto minAddrBit) := addr;
+
+ if (areset = '1') then
+-- timer_we <= '0';
+ elsif (clk'event and clk = '1') then
+-- timer_we <= '0';
+ if writeEnable = '1' then
+ -- external interface (fixed address)
+ --<JK> extend compare to avoid waring messages
+ if ("1" & addr & lowAddrBits)=x"80a000c" then
+ report "Write to UART[0]" & " :0x" & hstr(write);
+ -- Write to UART
+ -- report "" & character'image(conv_integer(memBint)) severity note;
+ print(l_file, character'val(to_integer(unsigned(write))));
+ elsif addr(12)='1' then
+ report "Write to TIMER" & " :0x" & hstr(write);
+-- report "xxx" severity failure;
+-- timer_we <= '1';
+ else
+ print(l_file, character'val(to_integer(unsigned(write))));
+ report "Illegal IO write @" & "0x" & hstr(taddr) severity warning;
+ end if;
+
+ end if;
+ read <= (others => '0');
+ if (readEnable = '1') then
+ --<JK> extend compare to avoid waring messages
+ if ("1" & addr & lowAddrBits)=x"80a000c" then
+ report "Read UART[0]";
+ read(8) <= not tx_full; -- output fifo not full
+ read(9) <= not rx_empty; -- receiver not empty
+ elsif ("1" & addr & lowAddrBits)=x"80a0010" then
+ report "Read UART[1]";
+ read(8) <= not rx_empty; -- receiver not empty
+ read(7 downto 0) <= (others => '0');
+ elsif addr(12)='1' then
+ report "Read TIMER";
+ read(7 downto 0) <= timer_read;
+ elsif addr(11)='1' then
+ report "Read ZPU Freq";
+ read(7 downto 0) <= ZPU_Frequency;
+ else
+ report "Illegal IO read @" & "0x" & hstr(taddr) severity warning;
+ end if;
+ end if;
+ end if;
+ end process;
+
+
+end behave;
+
diff --git a/zpu/hdl/zpu4/src/timer.vhd b/zpu/hdl/zpu4/src/timer.vhd
index be1dbb8..c60c172 100644
--- a/zpu/hdl/zpu4/src/timer.vhd
+++ b/zpu/hdl/zpu4/src/timer.vhd
@@ -1,61 +1,61 @@
-library ieee;
-use ieee.std_logic_1164.all;
-use ieee.numeric_std.all;
-
-entity timer is
- port(
- clk : in std_logic;
- areset : in std_logic;
- we : in std_logic;
- din : in std_logic_vector(7 downto 0);
- adr : in std_logic_vector(2 downto 0);
- dout : out std_logic_vector(7 downto 0));
-end timer;
-
-
-architecture behave of timer is
-
-signal sample : std_logic;
-signal reset : std_logic;
-
-
-signal cnt : unsigned(63 downto 0);
-signal cnt_smp : std_logic_vector(63 downto 0);
-
-begin
-
- reset <= '1' when (we = '1' and din(0) = '1') else '0';
- sample <= '1' when (we = '1' and din(1) = '1') else '0';
-
- process(clk, areset) -- Carry generation
- begin
- if areset = '1' then
- cnt <= (others => '0');
- cnt_smp <= (others => '0');
- elsif (clk'event and clk = '1') then
- cnt <= cnt + 1;
- if sample = '1' then
--- report "sampling" severity failure;
- cnt_smp <= std_logic_vector(cnt);
- end if;
- end if;
- end process;
-
-
- process(cnt_smp, adr)
- begin
- case adr is
- when "000" => dout <= cnt_smp(7 downto 0);
- when "001" => dout <= cnt_smp(15 downto 8);
- when "010" => dout <= cnt_smp(23 downto 16);
- when "011" => dout <= cnt_smp(31 downto 24);
- when "100" => dout <= cnt_smp(39 downto 32);
- when "101" => dout <= cnt_smp(47 downto 40);
- when "110" => dout <= cnt_smp(55 downto 48);
- when others => dout <= cnt_smp(63 downto 56);
- end case;
- end process;
-
-
-end behave;
-
+library ieee;
+use ieee.std_logic_1164.all;
+use ieee.numeric_std.all;
+
+entity timer is
+ port(
+ clk : in std_logic;
+ areset : in std_logic;
+ we : in std_logic;
+ din : in std_logic_vector(7 downto 0);
+ adr : in std_logic_vector(2 downto 0);
+ dout : out std_logic_vector(7 downto 0));
+end timer;
+
+
+architecture behave of timer is
+
+signal sample : std_logic;
+signal reset : std_logic;
+
+
+signal cnt : unsigned(63 downto 0);
+signal cnt_smp : std_logic_vector(63 downto 0);
+
+begin
+
+ reset <= '1' when (we = '1' and din(0) = '1') else '0';
+ sample <= '1' when (we = '1' and din(1) = '1') else '0';
+
+ process(clk, areset) -- Carry generation
+ begin
+ if areset = '1' then
+ cnt <= (others => '0');
+ cnt_smp <= (others => '0');
+ elsif (clk'event and clk = '1') then
+ cnt <= cnt + 1;
+ if sample = '1' then
+-- report "sampling" severity failure;
+ cnt_smp <= std_logic_vector(cnt);
+ end if;
+ end if;
+ end process;
+
+
+ process(cnt_smp, adr)
+ begin
+ case adr is
+ when "000" => dout <= cnt_smp(7 downto 0);
+ when "001" => dout <= cnt_smp(15 downto 8);
+ when "010" => dout <= cnt_smp(23 downto 16);
+ when "011" => dout <= cnt_smp(31 downto 24);
+ when "100" => dout <= cnt_smp(39 downto 32);
+ when "101" => dout <= cnt_smp(47 downto 40);
+ when "110" => dout <= cnt_smp(55 downto 48);
+ when others => dout <= cnt_smp(63 downto 56);
+ end case;
+ end process;
+
+
+end behave;
+
diff --git a/zpu/hdl/zpu4/src/trace.vhd b/zpu/hdl/zpu4/src/trace.vhd
index 2413970..00ac3a8 100644
--- a/zpu/hdl/zpu4/src/trace.vhd
+++ b/zpu/hdl/zpu4/src/trace.vhd
@@ -1,117 +1,117 @@
--- ZPU
---
--- Copyright 2004-2008 oharboe - Øyvind Harboe - oyvind.harboe@zylin.com
---
--- The FreeBSD license
---
--- Redistribution and use in source and binary forms, with or without
--- modification, are permitted provided that the following conditions
--- are met:
---
--- 1. Redistributions of source code must retain the above copyright
--- notice, this list of conditions and the following disclaimer.
--- 2. Redistributions in binary form must reproduce the above
--- copyright notice, this list of conditions and the following
--- disclaimer in the documentation and/or other materials
--- provided with the distribution.
---
--- THIS SOFTWARE IS PROVIDED BY THE ZPU PROJECT ``AS IS'' AND ANY
--- EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
--- THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
--- PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
--- ZPU PROJECT OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
--- INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
--- (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
--- OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
--- HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
--- STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
--- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
--- ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
---
--- The views and conclusions contained in the software and documentation
--- are those of the authors and should not be interpreted as representing
--- official policies, either expressed or implied, of the ZPU Project.
-
-library ieee;
-use ieee.std_logic_1164.all;
-use ieee.numeric_std.all;
-
-use std.textio.all;
-
-library work;
-use work.zpu_config.all;
-use work.zpupkg.all;
-use work.txt_util.all;
-
-
-entity trace is
- generic (
- log_file: string := "trace.txt"
- );
- port(
- clk : in std_logic;
- begin_inst : in std_logic;
- pc : in std_logic_vector(maxAddrBitIncIO downto 0);
- opcode : in std_logic_vector(7 downto 0);
- sp : in std_logic_vector(maxAddrBitIncIO downto 2);
- memA : in std_logic_vector(wordSize-1 downto 0);
- memB : in std_logic_vector(wordSize-1 downto 0);
- busy : in std_logic;
- intSp : in std_logic_vector(stack_bits-1 downto 0)
- );
-end trace;
-
-
-architecture behave of trace is
-
-
-file l_file : TEXT open write_mode is log_file;
-
-
-begin
-
-
--- write data and control information to a file
-
-receive_data: process
-
-variable l: line;
-variable t : std_logic_vector(wordSize-1 downto 0);
-variable t2 : std_logic_vector(maxAddrBitIncIO downto 0);
-variable counter : unsigned(63 downto 0);
-
-
-
-begin
-
- t:= (others => '0');
- t2:= (others => '0');
-
-counter := (others => '0');
- -- print header for the logfile
- print(l_file, "#pc,opcode,sp,top_of_stack ");
- print(l_file, "#----------");
- print(l_file, " ");
-
- wait until clk = '1';
- wait until clk = '0';
-
- while true loop
-
- counter := counter + 1;
- if begin_inst = '1' then
- t(maxAddrBitIncIO downto 2):=sp;
- t2:=pc;
- print(l_file, "0x" & hstr(t2) & " 0x" & hstr(opcode) & " 0x" & hstr(t) & " 0x" & hstr(memA) & " 0x" & hstr(memB) & " 0x" & hstr(intSp) & " 0x" & hstr(std_logic_vector(counter)));
- end if;
-
- wait until clk = '0';
-
- end loop;
-
- end process receive_data;
-
-
-
-end behave;
-
+-- ZPU
+--
+-- Copyright 2004-2008 oharboe - Øyvind Harboe - oyvind.harboe@zylin.com
+--
+-- The FreeBSD license
+--
+-- Redistribution and use in source and binary forms, with or without
+-- modification, are permitted provided that the following conditions
+-- are met:
+--
+-- 1. Redistributions of source code must retain the above copyright
+-- notice, this list of conditions and the following disclaimer.
+-- 2. Redistributions in binary form must reproduce the above
+-- copyright notice, this list of conditions and the following
+-- disclaimer in the documentation and/or other materials
+-- provided with the distribution.
+--
+-- THIS SOFTWARE IS PROVIDED BY THE ZPU PROJECT ``AS IS'' AND ANY
+-- EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+-- THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+-- PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+-- ZPU PROJECT OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+-- INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+-- (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+-- OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+-- HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+-- STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+-- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+-- ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+--
+-- The views and conclusions contained in the software and documentation
+-- are those of the authors and should not be interpreted as representing
+-- official policies, either expressed or implied, of the ZPU Project.
+
+library ieee;
+use ieee.std_logic_1164.all;
+use ieee.numeric_std.all;
+
+use std.textio.all;
+
+library work;
+use work.zpu_config.all;
+use work.zpupkg.all;
+use work.txt_util.all;
+
+
+entity trace is
+ generic (
+ log_file: string := "trace.txt"
+ );
+ port(
+ clk : in std_logic;
+ begin_inst : in std_logic;
+ pc : in std_logic_vector(maxAddrBitIncIO downto 0);
+ opcode : in std_logic_vector(7 downto 0);
+ sp : in std_logic_vector(maxAddrBitIncIO downto 2);
+ memA : in std_logic_vector(wordSize-1 downto 0);
+ memB : in std_logic_vector(wordSize-1 downto 0);
+ busy : in std_logic;
+ intSp : in std_logic_vector(stack_bits-1 downto 0)
+ );
+end trace;
+
+
+architecture behave of trace is
+
+
+file l_file : TEXT open write_mode is log_file;
+
+
+begin
+
+
+-- write data and control information to a file
+
+receive_data: process
+
+variable l: line;
+variable t : std_logic_vector(wordSize-1 downto 0);
+variable t2 : std_logic_vector(maxAddrBitIncIO downto 0);
+variable counter : unsigned(63 downto 0);
+
+
+
+begin
+
+ t:= (others => '0');
+ t2:= (others => '0');
+
+counter := (others => '0');
+ -- print header for the logfile
+ print(l_file, "#pc,opcode,sp,top_of_stack ");
+ print(l_file, "#----------");
+ print(l_file, " ");
+
+ wait until clk = '1';
+ wait until clk = '0';
+
+ while true loop
+
+ counter := counter + 1;
+ if begin_inst = '1' then
+ t(maxAddrBitIncIO downto 2):=sp;
+ t2:=pc;
+ print(l_file, "0x" & hstr(t2) & " 0x" & hstr(opcode) & " 0x" & hstr(t) & " 0x" & hstr(memA) & " 0x" & hstr(memB) & " 0x" & hstr(intSp) & " 0x" & hstr(std_logic_vector(counter)));
+ end if;
+
+ wait until clk = '0';
+
+ end loop;
+
+ end process receive_data;
+
+
+
+end behave;
+
diff --git a/zpu/hdl/zpu4/src/txt_util.vhd b/zpu/hdl/zpu4/src/txt_util.vhd
index 3d5297a..6432294 100644
--- a/zpu/hdl/zpu4/src/txt_util.vhd
+++ b/zpu/hdl/zpu4/src/txt_util.vhd
@@ -1,621 +1,621 @@
--- ZPU
---
--- Copyright 2004-2008 oharboe - Øyvind Harboe - oyvind.harboe@zylin.com
---
--- The FreeBSD license
---
--- Redistribution and use in source and binary forms, with or without
--- modification, are permitted provided that the following conditions
--- are met:
---
--- 1. Redistributions of source code must retain the above copyright
--- notice, this list of conditions and the following disclaimer.
--- 2. Redistributions in binary form must reproduce the above
--- copyright notice, this list of conditions and the following
--- disclaimer in the documentation and/or other materials
--- provided with the distribution.
---
--- THIS SOFTWARE IS PROVIDED BY THE ZPU PROJECT ``AS IS'' AND ANY
--- EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
--- THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
--- PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
--- ZPU PROJECT OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
--- INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
--- (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
--- OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
--- HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
--- STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
--- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
--- ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
---
--- The views and conclusions contained in the software and documentation
--- are those of the authors and should not be interpreted as representing
--- official policies, either expressed or implied, of the ZPU Project.
-
-library ieee;
-use ieee.std_logic_1164.all;
-use std.textio.all;
-
-library work;
-
-package txt_util is
-
- -- prints a message to the screen
- procedure print(text: string);
-
- -- prints the message when active
- -- useful for debug switches
- procedure print(active: boolean; text: string);
-
- -- converts std_logic into a character
- function chr(sl: std_logic) return character;
-
- -- converts std_logic into a string (1 to 1)
- function str(sl: std_logic) return string;
-
- -- converts std_logic_vector into a string (binary base)
- function str(slv: std_logic_vector) return string;
-
- -- converts boolean into a string
- function str(b: boolean) return string;
-
- -- converts an integer into a single character
- -- (can also be used for hex conversion and other bases)
- function chr(int: integer) return character;
-
- -- converts integer into string using specified base
- function str(int: integer; base: integer) return string;
-
- -- converts integer to string, using base 10
- function str(int: integer) return string;
-
- -- convert std_logic_vector into a string in hex format
- function hstr(slv: std_logic_vector) return string;
-
-
- -- functions to manipulate strings
- -----------------------------------
-
- -- convert a character to upper case
- function to_upper(c: character) return character;
-
- -- convert a character to lower case
- function to_lower(c: character) return character;
-
- -- convert a string to upper case
- function to_upper(s: string) return string;
-
- -- convert a string to lower case
- function to_lower(s: string) return string;
-
-
-
- -- functions to convert strings into other formats
- --------------------------------------------------
-
- -- converts a character into std_logic
- function to_std_logic(c: character) return std_logic;
-
- -- converts a string into std_logic_vector
- function to_std_logic_vector(s: string) return std_logic_vector;
-
-
-
- -- file I/O
- -----------
-
- -- read variable length string from input file
- procedure str_read(file in_file: TEXT;
- res_string: out string);
-
- -- print string to a file and start new line
- procedure print(file out_file: TEXT;
- new_string: in string);
-
- -- print character to a file and start new line
- procedure print(file out_file: TEXT;
- char: in character);
-
-end txt_util;
-
-
-
-
-package body txt_util is
-
-
-
-
- -- prints text to the screen
-
- procedure print(text: string) is
- variable msg_line: line;
- begin
- write(msg_line, text);
- writeline(output, msg_line);
- end print;
-
-
-
-
- -- prints text to the screen when active
-
- procedure print(active: boolean; text: string) is
- begin
- if active then
- print(text);
- end if;
- end print;
-
-
- -- converts std_logic into a character
-
- function chr(sl: std_logic) return character is
- variable c: character;
- begin
- case sl is
- when 'U' => c:= 'U';
- when 'X' => c:= 'X';
- when '0' => c:= '0';
- when '1' => c:= '1';
- when 'Z' => c:= 'Z';
- when 'W' => c:= 'W';
- when 'L' => c:= 'L';
- when 'H' => c:= 'H';
- when '-' => c:= '-';
- end case;
- return c;
- end chr;
-
-
-
- -- converts std_logic into a string (1 to 1)
-
- function str(sl: std_logic) return string is
- variable s: string(1 to 1);
- begin
- s(1) := chr(sl);
- return s;
- end str;
-
-
-
- -- converts std_logic_vector into a string (binary base)
- -- (this also takes care of the fact that the range of
- -- a string is natural while a std_logic_vector may
- -- have an integer range)
-
- function str(slv: std_logic_vector) return string is
- variable result : string (1 to slv'length);
- variable r : integer;
- begin
- r := 1;
- for i in slv'range loop
- result(r) := chr(slv(i));
- r := r + 1;
- end loop;
- return result;
- end str;
-
-
- function str(b: boolean) return string is
-
- begin
- if b then
- return "true";
- else
- return "false";
- end if;
- end str;
-
-
- -- converts an integer into a character
- -- for 0 to 9 the obvious mapping is used, higher
- -- values are mapped to the characters A-Z
- -- (this is usefull for systems with base > 10)
- -- (adapted from Steve Vogwell's posting in comp.lang.vhdl)
-
- function chr(int: integer) return character is
- variable c: character;
- begin
- case int is
- when 0 => c := '0';
- when 1 => c := '1';
- when 2 => c := '2';
- when 3 => c := '3';
- when 4 => c := '4';
- when 5 => c := '5';
- when 6 => c := '6';
- when 7 => c := '7';
- when 8 => c := '8';
- when 9 => c := '9';
- when 10 => c := 'A';
- when 11 => c := 'B';
- when 12 => c := 'C';
- when 13 => c := 'D';
- when 14 => c := 'E';
- when 15 => c := 'F';
- when 16 => c := 'G';
- when 17 => c := 'H';
- when 18 => c := 'I';
- when 19 => c := 'J';
- when 20 => c := 'K';
- when 21 => c := 'L';
- when 22 => c := 'M';
- when 23 => c := 'N';
- when 24 => c := 'O';
- when 25 => c := 'P';
- when 26 => c := 'Q';
- when 27 => c := 'R';
- when 28 => c := 'S';
- when 29 => c := 'T';
- when 30 => c := 'U';
- when 31 => c := 'V';
- when 32 => c := 'W';
- when 33 => c := 'X';
- when 34 => c := 'Y';
- when 35 => c := 'Z';
- when others => c := '?';
- end case;
- return c;
- end chr;
-
-
-
- -- convert integer to string using specified base
- -- (adapted from Steve Vogwell's posting in comp.lang.vhdl)
-
- function str(int: integer; base: integer) return string is
-
- variable temp: string(1 to 10);
- variable num: integer;
- variable abs_int: integer;
- variable len: integer := 1;
- variable power: integer := 1;
-
- begin
-
- -- bug fix for negative numbers
- abs_int := abs(int);
-
- num := abs_int;
-
- while num >= base loop -- Determine how many
- len := len + 1; -- characters required
- num := num / base; -- to represent the
- end loop ; -- number.
-
- for i in len downto 1 loop -- Convert the number to
- temp(i) := chr(abs_int/power mod base); -- a string starting
- power := power * base; -- with the right hand
- end loop ; -- side.
-
- -- return result and add sign if required
- if int < 0 then
- return '-'& temp(1 to len);
- else
- return temp(1 to len);
- end if;
-
- end str;
-
-
- -- convert integer to string, using base 10
- function str(int: integer) return string is
-
- begin
-
- return str(int, 10) ;
-
- end str;
-
-
-
- -- converts a std_logic_vector into a hex string.
- function hstr(slv: std_logic_vector) return string is
- variable hexlen: integer;
- variable longslv : std_logic_vector(67 downto 0) := (others => '0');
- variable hex : string(1 to 16);
- variable fourbit : std_logic_vector(3 downto 0);
- begin
- hexlen := (slv'left+1)/4;
- if (slv'left+1) mod 4 /= 0 then
- hexlen := hexlen + 1;
- end if;
- longslv(slv'left downto 0) := slv;
- for i in (hexlen -1) downto 0 loop
- fourbit := longslv(((i*4)+3) downto (i*4));
- case fourbit is
- when "0000" => hex(hexlen -I) := '0';
- when "0001" => hex(hexlen -I) := '1';
- when "0010" => hex(hexlen -I) := '2';
- when "0011" => hex(hexlen -I) := '3';
- when "0100" => hex(hexlen -I) := '4';
- when "0101" => hex(hexlen -I) := '5';
- when "0110" => hex(hexlen -I) := '6';
- when "0111" => hex(hexlen -I) := '7';
- when "1000" => hex(hexlen -I) := '8';
- when "1001" => hex(hexlen -I) := '9';
- when "1010" => hex(hexlen -I) := 'A';
- when "1011" => hex(hexlen -I) := 'B';
- when "1100" => hex(hexlen -I) := 'C';
- when "1101" => hex(hexlen -I) := 'D';
- when "1110" => hex(hexlen -I) := 'E';
- when "1111" => hex(hexlen -I) := 'F';
- when "ZZZZ" => hex(hexlen -I) := 'z';
- when "UUUU" => hex(hexlen -I) := 'u';
- when "XXXX" => hex(hexlen -I) := 'x';
- when others => hex(hexlen -I) := '?';
- end case;
- end loop;
- return hex(1 to hexlen);
- end hstr;
-
-
-
- -- functions to manipulate strings
- -----------------------------------
-
-
- -- convert a character to upper case
-
- function to_upper(c: character) return character is
-
- variable u: character;
-
- begin
-
- case c is
- when 'a' => u := 'A';
- when 'b' => u := 'B';
- when 'c' => u := 'C';
- when 'd' => u := 'D';
- when 'e' => u := 'E';
- when 'f' => u := 'F';
- when 'g' => u := 'G';
- when 'h' => u := 'H';
- when 'i' => u := 'I';
- when 'j' => u := 'J';
- when 'k' => u := 'K';
- when 'l' => u := 'L';
- when 'm' => u := 'M';
- when 'n' => u := 'N';
- when 'o' => u := 'O';
- when 'p' => u := 'P';
- when 'q' => u := 'Q';
- when 'r' => u := 'R';
- when 's' => u := 'S';
- when 't' => u := 'T';
- when 'u' => u := 'U';
- when 'v' => u := 'V';
- when 'w' => u := 'W';
- when 'x' => u := 'X';
- when 'y' => u := 'Y';
- when 'z' => u := 'Z';
- when others => u := c;
- end case;
-
- return u;
-
- end to_upper;
-
-
- -- convert a character to lower case
-
- function to_lower(c: character) return character is
-
- variable l: character;
-
- begin
-
- case c is
- when 'A' => l := 'a';
- when 'B' => l := 'b';
- when 'C' => l := 'c';
- when 'D' => l := 'd';
- when 'E' => l := 'e';
- when 'F' => l := 'f';
- when 'G' => l := 'g';
- when 'H' => l := 'h';
- when 'I' => l := 'i';
- when 'J' => l := 'j';
- when 'K' => l := 'k';
- when 'L' => l := 'l';
- when 'M' => l := 'm';
- when 'N' => l := 'n';
- when 'O' => l := 'o';
- when 'P' => l := 'p';
- when 'Q' => l := 'q';
- when 'R' => l := 'r';
- when 'S' => l := 's';
- when 'T' => l := 't';
- when 'U' => l := 'u';
- when 'V' => l := 'v';
- when 'W' => l := 'w';
- when 'X' => l := 'x';
- when 'Y' => l := 'y';
- when 'Z' => l := 'z';
- when others => l := c;
- end case;
-
- return l;
-
- end to_lower;
-
-
-
- -- convert a string to upper case
-
- function to_upper(s: string) return string is
-
- variable uppercase: string (s'range);
-
- begin
-
- for i in s'range loop
- uppercase(i):= to_upper(s(i));
- end loop;
- return uppercase;
-
- end to_upper;
-
-
-
- -- convert a string to lower case
-
- function to_lower(s: string) return string is
-
- variable lowercase: string (s'range);
-
- begin
-
- for i in s'range loop
- lowercase(i):= to_lower(s(i));
- end loop;
- return lowercase;
-
- end to_lower;
-
-
-
--- functions to convert strings into other types
-
-
--- converts a character into a std_logic
-
-function to_std_logic(c: character) return std_logic is
- variable sl: std_logic;
- begin
- case c is
- when 'U' =>
- sl := 'U';
- when 'X' =>
- sl := 'X';
- when '0' =>
- sl := '0';
- when '1' =>
- sl := '1';
- when 'Z' =>
- sl := 'Z';
- when 'W' =>
- sl := 'W';
- when 'L' =>
- sl := 'L';
- when 'H' =>
- sl := 'H';
- when '-' =>
- sl := '-';
- when others =>
- sl := 'X';
- end case;
- return sl;
- end to_std_logic;
-
-
--- converts a string into std_logic_vector
-
-function to_std_logic_vector(s: string) return std_logic_vector is
- variable slv: std_logic_vector(s'high-s'low downto 0);
- variable k: integer;
-begin
- k := s'high-s'low;
- for i in s'range loop
- slv(k) := to_std_logic(s(i));
- k := k - 1;
- end loop;
- return slv;
-end to_std_logic_vector;
-
-
-
-
-
-
-----------------
--- file I/O --
-----------------
-
-
-
--- read variable length string from input file
-
-procedure str_read(file in_file: TEXT;
- res_string: out string) is
-
- variable l: line;
- variable c: character;
- variable is_string: boolean;
-
- begin
-
- readline(in_file, l);
- -- clear the contents of the result string
- for i in res_string'range loop
- res_string(i) := ' ';
- end loop;
- -- read all characters of the line, up to the length
- -- of the results string
- for i in res_string'range loop
- read(l, c, is_string);
- res_string(i) := c;
- if not is_string then -- found end of line
- exit;
- end if;
- end loop;
-
-end str_read;
-
-
--- print string to a file
-procedure print(file out_file: TEXT;
- new_string: in string) is
-
- variable l: line;
-
- begin
-
- write(l, new_string);
- writeline(out_file, l);
-
-end print;
-
-
--- print character to a file and start new line
-procedure print(file out_file: TEXT;
- char: in character) is
-
- variable l: line;
-
- begin
-
- write(l, char);
- writeline(out_file, l);
-
-end print;
-
-
-
--- appends contents of a string to a file until line feed occurs
--- (LF is considered to be the end of the string)
-
-procedure str_write(file out_file: TEXT;
- new_string: in string) is
- begin
-
- for i in new_string'range loop
- print(out_file, new_string(i));
- if new_string(i) = LF then -- end of string
- exit;
- end if;
- end loop;
-
-end str_write;
-
-
-
-
-end txt_util;
-
-
-
-
+-- ZPU
+--
+-- Copyright 2004-2008 oharboe - Øyvind Harboe - oyvind.harboe@zylin.com
+--
+-- The FreeBSD license
+--
+-- Redistribution and use in source and binary forms, with or without
+-- modification, are permitted provided that the following conditions
+-- are met:
+--
+-- 1. Redistributions of source code must retain the above copyright
+-- notice, this list of conditions and the following disclaimer.
+-- 2. Redistributions in binary form must reproduce the above
+-- copyright notice, this list of conditions and the following
+-- disclaimer in the documentation and/or other materials
+-- provided with the distribution.
+--
+-- THIS SOFTWARE IS PROVIDED BY THE ZPU PROJECT ``AS IS'' AND ANY
+-- EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+-- THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+-- PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+-- ZPU PROJECT OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
+-- INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+-- (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+-- OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+-- HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+-- STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+-- ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
+-- ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+--
+-- The views and conclusions contained in the software and documentation
+-- are those of the authors and should not be interpreted as representing
+-- official policies, either expressed or implied, of the ZPU Project.
+
+library ieee;
+use ieee.std_logic_1164.all;
+use std.textio.all;
+
+library work;
+
+package txt_util is
+
+ -- prints a message to the screen
+ procedure print(text: string);
+
+ -- prints the message when active
+ -- useful for debug switches
+ procedure print(active: boolean; text: string);
+
+ -- converts std_logic into a character
+ function chr(sl: std_logic) return character;
+
+ -- converts std_logic into a string (1 to 1)
+ function str(sl: std_logic) return string;
+
+ -- converts std_logic_vector into a string (binary base)
+ function str(slv: std_logic_vector) return string;
+
+ -- converts boolean into a string
+ function str(b: boolean) return string;
+
+ -- converts an integer into a single character
+ -- (can also be used for hex conversion and other bases)
+ function chr(int: integer) return character;
+
+ -- converts integer into string using specified base
+ function str(int: integer; base: integer) return string;
+
+ -- converts integer to string, using base 10
+ function str(int: integer) return string;
+
+ -- convert std_logic_vector into a string in hex format
+ function hstr(slv: std_logic_vector) return string;
+
+
+ -- functions to manipulate strings
+ -----------------------------------
+
+ -- convert a character to upper case
+ function to_upper(c: character) return character;
+
+ -- convert a character to lower case
+ function to_lower(c: character) return character;
+
+ -- convert a string to upper case
+ function to_upper(s: string) return string;
+
+ -- convert a string to lower case
+ function to_lower(s: string) return string;
+
+
+
+ -- functions to convert strings into other formats
+ --------------------------------------------------
+
+ -- converts a character into std_logic
+ function to_std_logic(c: character) return std_logic;
+
+ -- converts a string into std_logic_vector
+ function to_std_logic_vector(s: string) return std_logic_vector;
+
+
+
+ -- file I/O
+ -----------
+
+ -- read variable length string from input file
+ procedure str_read(file in_file: TEXT;
+ res_string: out string);
+
+ -- print string to a file and start new line
+ procedure print(file out_file: TEXT;
+ new_string: in string);
+
+ -- print character to a file and start new line
+ procedure print(file out_file: TEXT;
+ char: in character);
+
+end txt_util;
+
+
+
+
+package body txt_util is
+
+
+
+
+ -- prints text to the screen
+
+ procedure print(text: string) is
+ variable msg_line: line;
+ begin
+ write(msg_line, text);
+ writeline(output, msg_line);
+ end print;
+
+
+
+
+ -- prints text to the screen when active
+
+ procedure print(active: boolean; text: string) is
+ begin
+ if active then
+ print(text);
+ end if;
+ end print;
+
+
+ -- converts std_logic into a character
+
+ function chr(sl: std_logic) return character is
+ variable c: character;
+ begin
+ case sl is
+ when 'U' => c:= 'U';
+ when 'X' => c:= 'X';
+ when '0' => c:= '0';
+ when '1' => c:= '1';
+ when 'Z' => c:= 'Z';
+ when 'W' => c:= 'W';
+ when 'L' => c:= 'L';
+ when 'H' => c:= 'H';
+ when '-' => c:= '-';
+ end case;
+ return c;
+ end chr;
+
+
+
+ -- converts std_logic into a string (1 to 1)
+
+ function str(sl: std_logic) return string is
+ variable s: string(1 to 1);
+ begin
+ s(1) := chr(sl);
+ return s;
+ end str;
+
+
+
+ -- converts std_logic_vector into a string (binary base)
+ -- (this also takes care of the fact that the range of
+ -- a string is natural while a std_logic_vector may
+ -- have an integer range)
+
+ function str(slv: std_logic_vector) return string is
+ variable result : string (1 to slv'length);
+ variable r : integer;
+ begin
+ r := 1;
+ for i in slv'range loop
+ result(r) := chr(slv(i));
+ r := r + 1;
+ end loop;
+ return result;
+ end str;
+
+
+ function str(b: boolean) return string is
+
+ begin
+ if b then
+ return "true";
+ else
+ return "false";
+ end if;
+ end str;
+
+
+ -- converts an integer into a character
+ -- for 0 to 9 the obvious mapping is used, higher
+ -- values are mapped to the characters A-Z
+ -- (this is usefull for systems with base > 10)
+ -- (adapted from Steve Vogwell's posting in comp.lang.vhdl)
+
+ function chr(int: integer) return character is
+ variable c: character;
+ begin
+ case int is
+ when 0 => c := '0';
+ when 1 => c := '1';
+ when 2 => c := '2';
+ when 3 => c := '3';
+ when 4 => c := '4';
+ when 5 => c := '5';
+ when 6 => c := '6';
+ when 7 => c := '7';
+ when 8 => c := '8';
+ when 9 => c := '9';
+ when 10 => c := 'A';
+ when 11 => c := 'B';
+ when 12 => c := 'C';
+ when 13 => c := 'D';
+ when 14 => c := 'E';
+ when 15 => c := 'F';
+ when 16 => c := 'G';
+ when 17 => c := 'H';
+ when 18 => c := 'I';
+ when 19 => c := 'J';
+ when 20 => c := 'K';
+ when 21 => c := 'L';
+ when 22 => c := 'M';
+ when 23 => c := 'N';
+ when 24 => c := 'O';
+ when 25 => c := 'P';
+ when 26 => c := 'Q';
+ when 27 => c := 'R';
+ when 28 => c := 'S';
+ when 29 => c := 'T';
+ when 30 => c := 'U';
+ when 31 => c := 'V';
+ when 32 => c := 'W';
+ when 33 => c := 'X';
+ when 34 => c := 'Y';
+ when 35 => c := 'Z';
+ when others => c := '?';
+ end case;
+ return c;
+ end chr;
+
+
+
+ -- convert integer to string using specified base
+ -- (adapted from Steve Vogwell's posting in comp.lang.vhdl)
+
+ function str(int: integer; base: integer) return string is
+
+ variable temp: string(1 to 10);
+ variable num: integer;
+ variable abs_int: integer;
+ variable len: integer := 1;
+ variable power: integer := 1;
+
+ begin
+
+ -- bug fix for negative numbers
+ abs_int := abs(int);
+
+ num := abs_int;
+
+ while num >= base loop -- Determine how many
+ len := len + 1; -- characters required
+ num := num / base; -- to represent the
+ end loop ; -- number.
+
+ for i in len downto 1 loop -- Convert the number to
+ temp(i) := chr(abs_int/power mod base); -- a string starting
+ power := power * base; -- with the right hand
+ end loop ; -- side.
+
+ -- return result and add sign if required
+ if int < 0 then
+ return '-'& temp(1 to len);
+ else
+ return temp(1 to len);
+ end if;
+
+ end str;
+
+
+ -- convert integer to string, using base 10
+ function str(int: integer) return string is
+
+ begin
+
+ return str(int, 10) ;
+
+ end str;
+
+
+
+ -- converts a std_logic_vector into a hex string.
+ function hstr(slv: std_logic_vector) return string is
+ variable hexlen: integer;
+ variable longslv : std_logic_vector(67 downto 0) := (others => '0');
+ variable hex : string(1 to 16);
+ variable fourbit : std_logic_vector(3 downto 0);
+ begin
+ hexlen := (slv'left+1)/4;
+ if (slv'left+1) mod 4 /= 0 then
+ hexlen := hexlen + 1;
+ end if;
+ longslv(slv'left downto 0) := slv;
+ for i in (hexlen -1) downto 0 loop
+ fourbit := longslv(((i*4)+3) downto (i*4));
+ case fourbit is
+ when "0000" => hex(hexlen -I) := '0';
+ when "0001" => hex(hexlen -I) := '1';
+ when "0010" => hex(hexlen -I) := '2';
+ when "0011" => hex(hexlen -I) := '3';
+ when "0100" => hex(hexlen -I) := '4';
+ when "0101" => hex(hexlen -I) := '5';
+ when "0110" => hex(hexlen -I) := '6';
+ when "0111" => hex(hexlen -I) := '7';
+ when "1000" => hex(hexlen -I) := '8';
+ when "1001" => hex(hexlen -I) := '9';
+ when "1010" => hex(hexlen -I) := 'A';
+ when "1011" => hex(hexlen -I) := 'B';
+ when "1100" => hex(hexlen -I) := 'C';
+ when "1101" => hex(hexlen -I) := 'D';
+ when "1110" => hex(hexlen -I) := 'E';
+ when "1111" => hex(hexlen -I) := 'F';
+ when "ZZZZ" => hex(hexlen -I) := 'z';
+ when "UUUU" => hex(hexlen -I) := 'u';
+ when "XXXX" => hex(hexlen -I) := 'x';
+ when others => hex(hexlen -I) := '?';
+ end case;
+ end loop;
+ return hex(1 to hexlen);
+ end hstr;
+
+
+
+ -- functions to manipulate strings
+ -----------------------------------
+
+
+ -- convert a character to upper case
+
+ function to_upper(c: character) return character is
+
+ variable u: character;
+
+ begin
+
+ case c is
+ when 'a' => u := 'A';
+ when 'b' => u := 'B';
+ when 'c' => u := 'C';
+ when 'd' => u := 'D';
+ when 'e' => u := 'E';
+ when 'f' => u := 'F';
+ when 'g' => u := 'G';
+ when 'h' => u := 'H';
+ when 'i' => u := 'I';
+ when 'j' => u := 'J';
+ when 'k' => u := 'K';
+ when 'l' => u := 'L';
+ when 'm' => u := 'M';
+ when 'n' => u := 'N';
+ when 'o' => u := 'O';
+ when 'p' => u := 'P';
+ when 'q' => u := 'Q';
+ when 'r' => u := 'R';
+ when 's' => u := 'S';
+ when 't' => u := 'T';
+ when 'u' => u := 'U';
+ when 'v' => u := 'V';
+ when 'w' => u := 'W';
+ when 'x' => u := 'X';
+ when 'y' => u := 'Y';
+ when 'z' => u := 'Z';
+ when others => u := c;
+ end case;
+
+ return u;
+
+ end to_upper;
+
+
+ -- convert a character to lower case
+
+ function to_lower(c: character) return character is
+
+ variable l: character;
+
+ begin
+
+ case c is
+ when 'A' => l := 'a';
+ when 'B' => l := 'b';
+ when 'C' => l := 'c';
+ when 'D' => l := 'd';
+ when 'E' => l := 'e';
+ when 'F' => l := 'f';
+ when 'G' => l := 'g';
+ when 'H' => l := 'h';
+ when 'I' => l := 'i';
+ when 'J' => l := 'j';
+ when 'K' => l := 'k';
+ when 'L' => l := 'l';
+ when 'M' => l := 'm';
+ when 'N' => l := 'n';
+ when 'O' => l := 'o';
+ when 'P' => l := 'p';
+ when 'Q' => l := 'q';
+ when 'R' => l := 'r';
+ when 'S' => l := 's';
+ when 'T' => l := 't';
+ when 'U' => l := 'u';
+ when 'V' => l := 'v';
+ when 'W' => l := 'w';
+ when 'X' => l := 'x';
+ when 'Y' => l := 'y';
+ when 'Z' => l := 'z';
+ when others => l := c;
+ end case;
+
+ return l;
+
+ end to_lower;
+
+
+
+ -- convert a string to upper case
+
+ function to_upper(s: string) return string is
+
+ variable uppercase: string (s'range);
+
+ begin
+
+ for i in s'range loop
+ uppercase(i):= to_upper(s(i));
+ end loop;
+ return uppercase;
+
+ end to_upper;
+
+
+
+ -- convert a string to lower case
+
+ function to_lower(s: string) return string is
+
+ variable lowercase: string (s'range);
+
+ begin
+
+ for i in s'range loop
+ lowercase(i):= to_lower(s(i));
+ end loop;
+ return lowercase;
+
+ end to_lower;
+
+
+
+-- functions to convert strings into other types
+
+
+-- converts a character into a std_logic
+
+function to_std_logic(c: character) return std_logic is
+ variable sl: std_logic;
+ begin
+ case c is
+ when 'U' =>
+ sl := 'U';
+ when 'X' =>
+ sl := 'X';
+ when '0' =>
+ sl := '0';
+ when '1' =>
+ sl := '1';
+ when 'Z' =>
+ sl := 'Z';
+ when 'W' =>
+ sl := 'W';
+ when 'L' =>
+ sl := 'L';
+ when 'H' =>
+ sl := 'H';
+ when '-' =>
+ sl := '-';
+ when others =>
+ sl := 'X';
+ end case;
+ return sl;
+ end to_std_logic;
+
+
+-- converts a string into std_logic_vector
+
+function to_std_logic_vector(s: string) return std_logic_vector is
+ variable slv: std_logic_vector(s'high-s'low downto 0);
+ variable k: integer;
+begin
+ k := s'high-s'low;
+ for i in s'range loop
+ slv(k) := to_std_logic(s(i));
+ k := k - 1;
+ end loop;
+ return slv;
+end to_std_logic_vector;
+
+
+
+
+
+
+----------------
+-- file I/O --
+----------------
+
+
+
+-- read variable length string from input file
+
+procedure str_read(file in_file: TEXT;
+ res_string: out string) is
+
+ variable l: line;
+ variable c: character;
+ variable is_string: boolean;
+
+ begin
+
+ readline(in_file, l);
+ -- clear the contents of the result string
+ for i in res_string'range loop
+ res_string(i) := ' ';
+ end loop;
+ -- read all characters of the line, up to the length
+ -- of the results string
+ for i in res_string'range loop
+ read(l, c, is_string);
+ res_string(i) := c;
+ if not is_string then -- found end of line
+ exit;
+ end if;
+ end loop;
+
+end str_read;
+
+
+-- print string to a file
+procedure print(file out_file: TEXT;
+ new_string: in string) is
+
+ variable l: line;
+
+ begin
+
+ write(l, new_string);
+ writeline(out_file, l);
+
+end print;
+
+
+-- print character to a file and start new line
+procedure print(file out_file: TEXT;
+ char: in character) is
+
+ variable l: line;
+
+ begin
+
+ write(l, char);
+ writeline(out_file, l);
+
+end print;
+
+
+
+-- appends contents of a string to a file until line feed occurs
+-- (LF is considered to be the end of the string)
+
+procedure str_write(file out_file: TEXT;
+ new_string: in string) is
+ begin
+
+ for i in new_string'range loop
+ print(out_file, new_string(i));
+ if new_string(i) = LF then -- end of string
+ exit;
+ end if;
+ end loop;
+
+end str_write;
+
+
+
+
+end txt_util;
+
+
+
+
diff --git a/zpu/hdl/zpu4/src/zpuio.vhd b/zpu/hdl/zpu4/src/zpuio.vhd
index 09a1ddd..2c7fd41 100644
--- a/zpu/hdl/zpu4/src/zpuio.vhd
+++ b/zpu/hdl/zpu4/src/zpuio.vhd
@@ -1,232 +1,232 @@
-library IEEE;
-use IEEE.STD_LOGIC_1164.ALL;
-use IEEE.STD_LOGIC_UNSIGNED.ALL;
-
-library work;
-use work.zpu_config.all;
-use work.zpupkg.all;
-
-entity zpuio is
- port ( areset : in std_logic;
- cpu_clk : in std_logic;
- clk_status : in std_logic_vector(2 downto 0);
- cpu_din : in std_logic_vector(15 downto 0);
- cpu_a : in std_logic_vector(20 downto 0);
- cpu_we : in std_logic_vector(1 downto 0);
- cpu_re : in std_logic;
- cpu_dout : inout std_logic_vector(15 downto 0));
-end zpuio;
-
-architecture behave of zpuio is
-
-signal timer_read : std_logic_vector(7 downto 0);
---signal timer_write : std_logic_vector(7 downto 0);
-signal timer_we : std_logic;
-
-
-signal io_busy : std_logic;
-signal io_read : std_logic_vector(7 downto 0);
---signal io_write : std_logic_vector(7 downto 0);
-signal io_addr : std_logic_vector(maxAddrBit downto minAddrBit);
-signal io_writeEnable : std_logic;
-signal Enable : std_logic;
-
-signal din : std_logic_vector(7 downto 0);
-signal dout : std_logic_vector(7 downto 0);
-signal adr : std_logic_vector(15 downto 0);
-signal break : std_logic;
-signal we : std_logic;
-signal re : std_logic;
-
-
--- uart forwarding...
-
-signal uartTXPending : std_logic;
-signal uartTXCleared : std_logic;
-signal uartData : std_logic_vector(7 downto 0);
-
-signal readingTimer : std_logic;
-
-
-
-
-signal mem_busy : std_logic;
-signal mem_read : std_logic_vector(wordSize-1 downto 0);
-signal mem_write : std_logic_vector(wordSize-1 downto 0);
-signal mem_addr : std_logic_vector(maxAddrBitIncIO downto 0);
-signal mem_writeEnable : std_logic;
-signal mem_readEnable : std_logic;
-signal mem_writeMask: std_logic_vector(wordBytes-1 downto 0);
-
-signal dram_mem_busy : std_logic;
-signal dram_mem_read : std_logic_vector(wordSize-1 downto 0);
-signal dram_mem_write : std_logic_vector(wordSize-1 downto 0);
-signal dram_mem_writeEnable : std_logic;
-signal dram_mem_readEnable : std_logic;
-signal dram_mem_writeMask: std_logic_vector(wordBytes-1 downto 0);
-
-
-
---signal io_mem_read : std_logic_vector(7 downto 0);
---signal io_mem_writeEnable : std_logic;
---signal io_mem_readEnable : std_logic;
-signal io_readEnable : std_logic;
-
-
-signal dram_read : std_logic;
-
-
-
-begin
-
- io_addr <= mem_addr(maxAddrBit downto minAddrBit);
-
- timerinst: timer port map (
- clk => cpu_clk,
- areset => areset,
- we => timer_we,
- din => mem_write(7 downto 0),
- adr => io_addr(4 downto 2),
- dout => timer_read);
-
- zpu: zpu_core port map (
- clk => cpu_clk ,
- areset => areset,
- in_mem_busy => mem_busy,
- mem_read => mem_read,
- mem_write => mem_write,
- out_mem_addr => mem_addr,
- out_mem_writeEnable => mem_writeEnable,
- out_mem_readEnable => mem_readEnable,
- mem_writeMask => mem_writeMask,
- interrupt => '0',
- break => break);
-
-
-ram_imp: dram port map (
- clk => cpu_clk ,
- areset => areset,
- mem_busy => dram_mem_busy,
- mem_read => dram_mem_read,
- mem_write => mem_write,
- mem_addr => mem_addr(maxAddrBit downto 0),
- mem_writeEnable => dram_mem_writeEnable,
- mem_readEnable => dram_mem_readEnable,
- mem_writeMask => mem_writeMask);
-
-
-
- fauxUart:
- process(cpu_clk, areset)
- begin
- if areset = '1' then
- io_busy <= '0';
- uartTXPending <= '0';
- timer_we <= '0';
- io_busy <= '0';
- uartData <= x"58"; -- 'X'
- readingTimer <= '0';
- elsif (cpu_clk'event and cpu_clk = '1') then
- timer_we <= '0';
- io_busy <= '0';
- if uartTXCleared = '1' then
- uartTXPending <= '0';
- end if;
-
- if io_writeEnable = '1' then
- if io_addr=x"2028003" then
- -- Write to UART
- uartData <= mem_write(7 downto 0);
- uartTXPending <= '1';
- io_busy <= '1';
- elsif io_addr(12)='1' then
- timer_we <= '1';
- io_busy <= '1';
- else
--- report "Illegal IO write" severity failure;
- end if;
- end if;
- if (io_readEnable = '1') then
- if io_addr=x"2028003" then
- io_read <= (0=>'1', -- recieve empty
- 1 => uartTXPending, -- tx full
- others => '0');
- io_busy <= '1';
- elsif io_addr(12)='1' then
- readingTimer <= '1';
- io_busy <= '1';
- elsif io_addr(11)='1' then
- io_read <= ZPU_Frequency;
- io_busy <= '1';
- else
--- report "Illegal IO read" severity failure;
- end if;
-
- else
- if (readingTimer = '1') then
- readingTimer <= '0';
- io_read <= timer_read;
- io_busy <= '0';
- else
- io_read <= (others => '1');
- end if;
- end if;
- end if;
- end process;
-
-
- forwardUARTOutputToARM:
- process(cpu_clk, areset)
- begin
- if areset = '1' then
- uartTXCleared <= '0';
- elsif (cpu_clk = '1' and cpu_clk'event) then
- if cpu_we(0) = '1' and cpu_a(3 downto 1) = "000" then
- uartTXCleared <= cpu_din(0);
- else
- uartTXCleared <= uartTXCleared;
- end if;
- end if;
- end process;
-
- cpu_dout(7 downto 0) <= uartData when (cpu_re = '1' and cpu_a(3 downto 1) = "001") else (others => 'Z');
- cpu_dout <= (0 => uartTXPending, others => '0') when (cpu_re = '1' and cpu_a(3 downto 1) = "000") else (others => 'Z');
-
- dram_mem_writeEnable <= mem_writeEnable and not mem_addr(ioBit);
- dram_mem_readEnable <= mem_readEnable and not mem_addr(ioBit);
- io_writeEnable <= mem_writeEnable and mem_addr(ioBit);
--- io_readEnable <= mem_readEnable and mem_addr(ioBit);
- mem_busy <= io_busy or dram_mem_busy or dram_read or io_readEnable;
-
- -- Memory reads either come from IO or DRAM. We need to pick the right one.
- memorycontrol:
- process(cpu_clk, areset)
- begin
- if areset = '1' then
- dram_read <= '0';
- io_readEnable <= '0';
-
-
- elsif (cpu_clk'event and cpu_clk = '1') then
- mem_read <= (others => '0');
- if mem_addr(ioBit)='0' and mem_readEnable='1' then
- dram_read <= '1';
- end if;
- if dram_read='1' and dram_mem_busy='0' then
- dram_read <= '0';
- mem_read <= dram_mem_read;
- end if;
-
- if mem_addr(ioBit)='1' and mem_readEnable='1' then
- io_readEnable <= '1';
- end if;
- if io_readEnable='1' and io_busy='0' then
- io_readEnable <= '0';
- mem_read(7 downto 0) <= io_read;
- end if;
-
- end if;
- end process;
-
-
-end behave;
+library IEEE;
+use IEEE.STD_LOGIC_1164.ALL;
+use IEEE.STD_LOGIC_UNSIGNED.ALL;
+
+library work;
+use work.zpu_config.all;
+use work.zpupkg.all;
+
+entity zpuio is
+ port ( areset : in std_logic;
+ cpu_clk : in std_logic;
+ clk_status : in std_logic_vector(2 downto 0);
+ cpu_din : in std_logic_vector(15 downto 0);
+ cpu_a : in std_logic_vector(20 downto 0);
+ cpu_we : in std_logic_vector(1 downto 0);
+ cpu_re : in std_logic;
+ cpu_dout : inout std_logic_vector(15 downto 0));
+end zpuio;
+
+architecture behave of zpuio is
+
+signal timer_read : std_logic_vector(7 downto 0);
+--signal timer_write : std_logic_vector(7 downto 0);
+signal timer_we : std_logic;
+
+
+signal io_busy : std_logic;
+signal io_read : std_logic_vector(7 downto 0);
+--signal io_write : std_logic_vector(7 downto 0);
+signal io_addr : std_logic_vector(maxAddrBit downto minAddrBit);
+signal io_writeEnable : std_logic;
+signal Enable : std_logic;
+
+signal din : std_logic_vector(7 downto 0);
+signal dout : std_logic_vector(7 downto 0);
+signal adr : std_logic_vector(15 downto 0);
+signal break : std_logic;
+signal we : std_logic;
+signal re : std_logic;
+
+
+-- uart forwarding...
+
+signal uartTXPending : std_logic;
+signal uartTXCleared : std_logic;
+signal uartData : std_logic_vector(7 downto 0);
+
+signal readingTimer : std_logic;
+
+
+
+
+signal mem_busy : std_logic;
+signal mem_read : std_logic_vector(wordSize-1 downto 0);
+signal mem_write : std_logic_vector(wordSize-1 downto 0);
+signal mem_addr : std_logic_vector(maxAddrBitIncIO downto 0);
+signal mem_writeEnable : std_logic;
+signal mem_readEnable : std_logic;
+signal mem_writeMask: std_logic_vector(wordBytes-1 downto 0);
+
+signal dram_mem_busy : std_logic;
+signal dram_mem_read : std_logic_vector(wordSize-1 downto 0);
+signal dram_mem_write : std_logic_vector(wordSize-1 downto 0);
+signal dram_mem_writeEnable : std_logic;
+signal dram_mem_readEnable : std_logic;
+signal dram_mem_writeMask: std_logic_vector(wordBytes-1 downto 0);
+
+
+
+--signal io_mem_read : std_logic_vector(7 downto 0);
+--signal io_mem_writeEnable : std_logic;
+--signal io_mem_readEnable : std_logic;
+signal io_readEnable : std_logic;
+
+
+signal dram_read : std_logic;
+
+
+
+begin
+
+ io_addr <= mem_addr(maxAddrBit downto minAddrBit);
+
+ timerinst: timer port map (
+ clk => cpu_clk,
+ areset => areset,
+ we => timer_we,
+ din => mem_write(7 downto 0),
+ adr => io_addr(4 downto 2),
+ dout => timer_read);
+
+ zpu: zpu_core port map (
+ clk => cpu_clk ,
+ areset => areset,
+ in_mem_busy => mem_busy,
+ mem_read => mem_read,
+ mem_write => mem_write,
+ out_mem_addr => mem_addr,
+ out_mem_writeEnable => mem_writeEnable,
+ out_mem_readEnable => mem_readEnable,
+ mem_writeMask => mem_writeMask,
+ interrupt => '0',
+ break => break);
+
+
+ram_imp: dram port map (
+ clk => cpu_clk ,
+ areset => areset,
+ mem_busy => dram_mem_busy,
+ mem_read => dram_mem_read,
+ mem_write => mem_write,
+ mem_addr => mem_addr(maxAddrBit downto 0),
+ mem_writeEnable => dram_mem_writeEnable,
+ mem_readEnable => dram_mem_readEnable,
+ mem_writeMask => mem_writeMask);
+
+
+
+ fauxUart:
+ process(cpu_clk, areset)
+ begin
+ if areset = '1' then
+ io_busy <= '0';
+ uartTXPending <= '0';
+ timer_we <= '0';
+ io_busy <= '0';
+ uartData <= x"58"; -- 'X'
+ readingTimer <= '0';
+ elsif (cpu_clk'event and cpu_clk = '1') then
+ timer_we <= '0';
+ io_busy <= '0';
+ if uartTXCleared = '1' then
+ uartTXPending <= '0';
+ end if;
+
+ if io_writeEnable = '1' then
+ if io_addr=x"2028003" then
+ -- Write to UART
+ uartData <= mem_write(7 downto 0);
+ uartTXPending <= '1';
+ io_busy <= '1';
+ elsif io_addr(12)='1' then
+ timer_we <= '1';
+ io_busy <= '1';
+ else
+-- report "Illegal IO write" severity failure;
+ end if;
+ end if;
+ if (io_readEnable = '1') then
+ if io_addr=x"2028003" then
+ io_read <= (0=>'1', -- recieve empty
+ 1 => uartTXPending, -- tx full
+ others => '0');
+ io_busy <= '1';
+ elsif io_addr(12)='1' then
+ readingTimer <= '1';
+ io_busy <= '1';
+ elsif io_addr(11)='1' then
+ io_read <= ZPU_Frequency;
+ io_busy <= '1';
+ else
+-- report "Illegal IO read" severity failure;
+ end if;
+
+ else
+ if (readingTimer = '1') then
+ readingTimer <= '0';
+ io_read <= timer_read;
+ io_busy <= '0';
+ else
+ io_read <= (others => '1');
+ end if;
+ end if;
+ end if;
+ end process;
+
+
+ forwardUARTOutputToARM:
+ process(cpu_clk, areset)
+ begin
+ if areset = '1' then
+ uartTXCleared <= '0';
+ elsif (cpu_clk = '1' and cpu_clk'event) then
+ if cpu_we(0) = '1' and cpu_a(3 downto 1) = "000" then
+ uartTXCleared <= cpu_din(0);
+ else
+ uartTXCleared <= uartTXCleared;
+ end if;
+ end if;
+ end process;
+
+ cpu_dout(7 downto 0) <= uartData when (cpu_re = '1' and cpu_a(3 downto 1) = "001") else (others => 'Z');
+ cpu_dout <= (0 => uartTXPending, others => '0') when (cpu_re = '1' and cpu_a(3 downto 1) = "000") else (others => 'Z');
+
+ dram_mem_writeEnable <= mem_writeEnable and not mem_addr(ioBit);
+ dram_mem_readEnable <= mem_readEnable and not mem_addr(ioBit);
+ io_writeEnable <= mem_writeEnable and mem_addr(ioBit);
+-- io_readEnable <= mem_readEnable and mem_addr(ioBit);
+ mem_busy <= io_busy or dram_mem_busy or dram_read or io_readEnable;
+
+ -- Memory reads either come from IO or DRAM. We need to pick the right one.
+ memorycontrol:
+ process(cpu_clk, areset)
+ begin
+ if areset = '1' then
+ dram_read <= '0';
+ io_readEnable <= '0';
+
+
+ elsif (cpu_clk'event and cpu_clk = '1') then
+ mem_read <= (others => '0');
+ if mem_addr(ioBit)='0' and mem_readEnable='1' then
+ dram_read <= '1';
+ end if;
+ if dram_read='1' and dram_mem_busy='0' then
+ dram_read <= '0';
+ mem_read <= dram_mem_read;
+ end if;
+
+ if mem_addr(ioBit)='1' and mem_readEnable='1' then
+ io_readEnable <= '1';
+ end if;
+ if io_readEnable='1' and io_busy='0' then
+ io_readEnable <= '0';
+ mem_read(7 downto 0) <= io_read;
+ end if;
+
+ end if;
+ end process;
+
+
+end behave;
diff --git a/zpu/hdl/zy2000/timer.vhd b/zpu/hdl/zy2000/timer.vhd
index bff82f2..735d55c 100644
--- a/zpu/hdl/zy2000/timer.vhd
+++ b/zpu/hdl/zy2000/timer.vhd
@@ -1,137 +1,137 @@
-library ieee;
-use ieee.std_logic_1164.all;
-use IEEE.STD_LOGIC_UNSIGNED.ALL;
-
-entity timer is
- port(
- clk : in std_logic;
- areset : in std_logic;
- sample : in std_logic;
- reset : in std_logic;
- counter : out std_logic_vector(63 downto 0));
-end timer;
-
-
-architecture behave of timer is
-
-signal c : std_logic_vector(1 to 7);
-
-signal cnt : std_logic_vector(63 downto 0);
-signal cnt_smp : std_logic_vector(63 downto 0);
-
-begin
-
- counter <= cnt_smp;
-
- process(clk, areset) -- Carry generation
- begin
- if areset = '1' then
- c <= "0000000";
- elsif (clk'event and clk = '1') then
- if reset = '1' then
- c <= "0000000";
- else
- if cnt(7 downto 0) = "11111110" then
- c(1) <= '1';
- else
- c(1) <= '0';
- end if;
- if cnt(15 downto 8) = "11111111" then
- c(2) <= '1';
- else
- c(2) <= '0';
- end if;
- if cnt(23 downto 16) = "11111111" and c(2) = '1' then
- c(3) <= '1';
- else
- c(3) <= '0';
- end if;
- if cnt(31 downto 24) = "11111111" and c(3) = '1' then
- c(4) <= '1';
- else
- c(4) <= '0';
- end if;
- if cnt(39 downto 32) = "11111111" and c(4) = '1' then
- c(5) <= '1';
- else
- c(5) <= '0';
- end if;
- if cnt(47 downto 40) = "11111111" and c(5) = '1' then
- c(6) <= '1';
- else
- c(6) <= '0';
- end if;
- if cnt(55 downto 48) = "11111111" and c(6) = '1' then
- c(7) <= '1';
- else
- c(7) <= '0';
- end if;
- end if;
- end if;
- end process;
-
- process(clk, areset)
- begin
- if areset = '1' then
- cnt <= (others=>'0');
- elsif (clk'event and clk = '1') then
- if reset = '1' then
- cnt <= (others=>'0');
- else
- cnt(7 downto 0) <= cnt(7 downto 0) + '1';
- if c(1) = '1' then
- cnt(15 downto 8) <= cnt(15 downto 8) + '1';
- else
- cnt(15 downto 8) <= cnt(15 downto 8);
- end if;
- if c(2) = '1' and c(1) = '1' then
- cnt(23 downto 16) <= cnt(23 downto 16) + '1';
- else
- cnt(23 downto 16) <= cnt(23 downto 16);
- end if;
- if c(3) = '1' and c(1) = '1' then
- cnt(31 downto 24) <= cnt(31 downto 24) + '1';
- else
- cnt(31 downto 24) <= cnt(31 downto 24);
- end if;
- if c(4) = '1' and c(1) = '1' then
- cnt(39 downto 32) <= cnt(39 downto 32) + '1';
- else
- cnt(39 downto 32) <= cnt(39 downto 32);
- end if;
- if c(5) = '1' and c(1) = '1' then
- cnt(47 downto 40) <= cnt(47 downto 40) + '1';
- else
- cnt(47 downto 40) <= cnt(47 downto 40);
- end if;
- if c(6) = '1' and c(1) = '1' then
- cnt(55 downto 48) <= cnt(55 downto 48) + '1';
- else
- cnt(55 downto 48) <= cnt(55 downto 48);
- end if;
- if c(7) = '1' and c(1) = '1' then
- cnt(63 downto 56) <= cnt(63 downto 56) + '1';
- else
- cnt(63 downto 56) <= cnt(63 downto 56);
- end if;
- end if;
- end if;
- end process;
-
- process(clk, areset)
- begin
- if areset = '1' then
- cnt_smp <= (others=>'0');
- elsif (clk'event and clk = '1') then
- if reset = '1' then
- cnt_smp <= (others=>'0');
- elsif sample = '1' then
- cnt_smp <= cnt;
- else
- cnt_smp <= cnt_smp;
- end if;
- end if;
- end process;
-
-end behave;
-
+library ieee;
+use ieee.std_logic_1164.all;
+use IEEE.STD_LOGIC_UNSIGNED.ALL;
+
+entity timer is
+ port(
+ clk : in std_logic;
+ areset : in std_logic;
+ sample : in std_logic;
+ reset : in std_logic;
+ counter : out std_logic_vector(63 downto 0));
+end timer;
+
+
+architecture behave of timer is
+
+signal c : std_logic_vector(1 to 7);
+
+signal cnt : std_logic_vector(63 downto 0);
+signal cnt_smp : std_logic_vector(63 downto 0);
+
+begin
+
+ counter <= cnt_smp;
+
+ process(clk, areset) -- Carry generation
+ begin
+ if areset = '1' then
+ c <= "0000000";
+ elsif (clk'event and clk = '1') then
+ if reset = '1' then
+ c <= "0000000";
+ else
+ if cnt(7 downto 0) = "11111110" then
+ c(1) <= '1';
+ else
+ c(1) <= '0';
+ end if;
+ if cnt(15 downto 8) = "11111111" then
+ c(2) <= '1';
+ else
+ c(2) <= '0';
+ end if;
+ if cnt(23 downto 16) = "11111111" and c(2) = '1' then
+ c(3) <= '1';
+ else
+ c(3) <= '0';
+ end if;
+ if cnt(31 downto 24) = "11111111" and c(3) = '1' then
+ c(4) <= '1';
+ else
+ c(4) <= '0';
+ end if;
+ if cnt(39 downto 32) = "11111111" and c(4) = '1' then
+ c(5) <= '1';
+ else
+ c(5) <= '0';
+ end if;
+ if cnt(47 downto 40) = "11111111" and c(5) = '1' then
+ c(6) <= '1';
+ else
+ c(6) <= '0';
+ end if;
+ if cnt(55 downto 48) = "11111111" and c(6) = '1' then
+ c(7) <= '1';
+ else
+ c(7) <= '0';
+ end if;
+ end if;
+ end if;
+ end process;
+
+ process(clk, areset)
+ begin
+ if areset = '1' then
+ cnt <= (others=>'0');
+ elsif (clk'event and clk = '1') then
+ if reset = '1' then
+ cnt <= (others=>'0');
+ else
+ cnt(7 downto 0) <= cnt(7 downto 0) + '1';
+ if c(1) = '1' then
+ cnt(15 downto 8) <= cnt(15 downto 8) + '1';
+ else
+ cnt(15 downto 8) <= cnt(15 downto 8);
+ end if;
+ if c(2) = '1' and c(1) = '1' then
+ cnt(23 downto 16) <= cnt(23 downto 16) + '1';
+ else
+ cnt(23 downto 16) <= cnt(23 downto 16);
+ end if;
+ if c(3) = '1' and c(1) = '1' then
+ cnt(31 downto 24) <= cnt(31 downto 24) + '1';
+ else
+ cnt(31 downto 24) <= cnt(31 downto 24);
+ end if;
+ if c(4) = '1' and c(1) = '1' then
+ cnt(39 downto 32) <= cnt(39 downto 32) + '1';
+ else
+ cnt(39 downto 32) <= cnt(39 downto 32);
+ end if;
+ if c(5) = '1' and c(1) = '1' then
+ cnt(47 downto 40) <= cnt(47 downto 40) + '1';
+ else
+ cnt(47 downto 40) <= cnt(47 downto 40);
+ end if;
+ if c(6) = '1' and c(1) = '1' then
+ cnt(55 downto 48) <= cnt(55 downto 48) + '1';
+ else
+ cnt(55 downto 48) <= cnt(55 downto 48);
+ end if;
+ if c(7) = '1' and c(1) = '1' then
+ cnt(63 downto 56) <= cnt(63 downto 56) + '1';
+ else
+ cnt(63 downto 56) <= cnt(63 downto 56);
+ end if;
+ end if;
+ end if;
+ end process;
+
+ process(clk, areset)
+ begin
+ if areset = '1' then
+ cnt_smp <= (others=>'0');
+ elsif (clk'event and clk = '1') then
+ if reset = '1' then
+ cnt_smp <= (others=>'0');
+ elsif sample = '1' then
+ cnt_smp <= cnt;
+ else
+ cnt_smp <= cnt_smp;
+ end if;
+ end if;
+ end process;
+
+end behave;
+
diff --git a/zpu/hdl/zy2000/trace.vhd b/zpu/hdl/zy2000/trace.vhd
index bc5279f..ec6be57 100644
--- a/zpu/hdl/zy2000/trace.vhd
+++ b/zpu/hdl/zy2000/trace.vhd
@@ -1,84 +1,84 @@
-library ieee;
-use ieee.std_logic_1164.all;
---use IEEE.STD_LOGIC_ARITH.ALL;
-use IEEE.STD_LOGIC_UNSIGNED.ALL;
-
-use std.textio.all;
-
-library work;
-use work.zpu_config.all;
-use work.zpupkg.all;
-use work.txt_util.all;
-
-
-entity trace is
- generic (
- log_file: string := "trace.txt"
- );
- port(
- clk : in std_logic;
- begin_inst : in std_logic;
- pc : in std_logic_vector(maxAddrBitIncIO downto 0);
- opcode : in std_logic_vector(7 downto 0);
- sp : in std_logic_vector(maxAddrBitIncIO downto 2);
- memA : in std_logic_vector(wordSize-1 downto 0);
- memB : in std_logic_vector(wordSize-1 downto 0);
- busy : in std_logic;
- intSp : in std_logic_vector(stack_bits-1 downto 0)
- );
-end trace;
-
-
-architecture behave of trace is
-
-
-file l_file : TEXT open write_mode is log_file;
-
-
-begin
-
-
--- write data and control information to a file
-
-receive_data: process
-
-variable l: line;
-variable t : std_logic_vector(wordSize-1 downto 0);
-variable t2 : std_logic_vector(maxAddrBitIncIO downto 0);
-variable counter : std_logic_vector(63 downto 0);
-
-
-
-begin
-
- t:= (others => '0');
- t2:= (others => '0');
-
-counter := (others => '0');
- -- print header for the logfile
- print(l_file, "#pc,opcode,sp,top_of_stack ");
- print(l_file, "#----------");
- print(l_file, " ");
-
- wait until clk = '1';
- wait until clk = '0';
-
- while true loop
-
- counter := counter + 1;
- if begin_inst = '1' then
- t(maxAddrBitIncIO downto 2):=sp;
- t2:=pc;
- print(l_file, "0x" & hstr(t2) & " 0x" & hstr(opcode) & " 0x" & hstr(t) & " 0x" & hstr(memA) & " 0x" & hstr(memB) & " 0x" & hstr(intSp) & " 0x" & hstr(counter));
- end if;
-
- wait until clk = '0';
-
- end loop;
-
- end process receive_data;
-
-
-
-end behave;
-
+library ieee;
+use ieee.std_logic_1164.all;
+--use IEEE.STD_LOGIC_ARITH.ALL;
+use IEEE.STD_LOGIC_UNSIGNED.ALL;
+
+use std.textio.all;
+
+library work;
+use work.zpu_config.all;
+use work.zpupkg.all;
+use work.txt_util.all;
+
+
+entity trace is
+ generic (
+ log_file: string := "trace.txt"
+ );
+ port(
+ clk : in std_logic;
+ begin_inst : in std_logic;
+ pc : in std_logic_vector(maxAddrBitIncIO downto 0);
+ opcode : in std_logic_vector(7 downto 0);
+ sp : in std_logic_vector(maxAddrBitIncIO downto 2);
+ memA : in std_logic_vector(wordSize-1 downto 0);
+ memB : in std_logic_vector(wordSize-1 downto 0);
+ busy : in std_logic;
+ intSp : in std_logic_vector(stack_bits-1 downto 0)
+ );
+end trace;
+
+
+architecture behave of trace is
+
+
+file l_file : TEXT open write_mode is log_file;
+
+
+begin
+
+
+-- write data and control information to a file
+
+receive_data: process
+
+variable l: line;
+variable t : std_logic_vector(wordSize-1 downto 0);
+variable t2 : std_logic_vector(maxAddrBitIncIO downto 0);
+variable counter : std_logic_vector(63 downto 0);
+
+
+
+begin
+
+ t:= (others => '0');
+ t2:= (others => '0');
+
+counter := (others => '0');
+ -- print header for the logfile
+ print(l_file, "#pc,opcode,sp,top_of_stack ");
+ print(l_file, "#----------");
+ print(l_file, " ");
+
+ wait until clk = '1';
+ wait until clk = '0';
+
+ while true loop
+
+ counter := counter + 1;
+ if begin_inst = '1' then
+ t(maxAddrBitIncIO downto 2):=sp;
+ t2:=pc;
+ print(l_file, "0x" & hstr(t2) & " 0x" & hstr(opcode) & " 0x" & hstr(t) & " 0x" & hstr(memA) & " 0x" & hstr(memB) & " 0x" & hstr(intSp) & " 0x" & hstr(counter));
+ end if;
+
+ wait until clk = '0';
+
+ end loop;
+
+ end process receive_data;
+
+
+
+end behave;
+
diff --git a/zpu/hdl/zy2000/txt_util.vhd b/zpu/hdl/zy2000/txt_util.vhd
index d3bf01a..40d39b9 100644
--- a/zpu/hdl/zy2000/txt_util.vhd
+++ b/zpu/hdl/zy2000/txt_util.vhd
@@ -1,587 +1,587 @@
-library ieee;
-use ieee.std_logic_1164.all;
-use std.textio.all;
-
-library work;
-
-package txt_util is
-
- -- prints a message to the screen
- procedure print(text: string);
-
- -- prints the message when active
- -- useful for debug switches
- procedure print(active: boolean; text: string);
-
- -- converts std_logic into a character
- function chr(sl: std_logic) return character;
-
- -- converts std_logic into a string (1 to 1)
- function str(sl: std_logic) return string;
-
- -- converts std_logic_vector into a string (binary base)
- function str(slv: std_logic_vector) return string;
-
- -- converts boolean into a string
- function str(b: boolean) return string;
-
- -- converts an integer into a single character
- -- (can also be used for hex conversion and other bases)
- function chr(int: integer) return character;
-
- -- converts integer into string using specified base
- function str(int: integer; base: integer) return string;
-
- -- converts integer to string, using base 10
- function str(int: integer) return string;
-
- -- convert std_logic_vector into a string in hex format
- function hstr(slv: std_logic_vector) return string;
-
-
- -- functions to manipulate strings
- -----------------------------------
-
- -- convert a character to upper case
- function to_upper(c: character) return character;
-
- -- convert a character to lower case
- function to_lower(c: character) return character;
-
- -- convert a string to upper case
- function to_upper(s: string) return string;
-
- -- convert a string to lower case
- function to_lower(s: string) return string;
-
-
-
- -- functions to convert strings into other formats
- --------------------------------------------------
-
- -- converts a character into std_logic
- function to_std_logic(c: character) return std_logic;
-
- -- converts a string into std_logic_vector
- function to_std_logic_vector(s: string) return std_logic_vector;
-
-
-
- -- file I/O
- -----------
-
- -- read variable length string from input file
- procedure str_read(file in_file: TEXT;
- res_string: out string);
-
- -- print string to a file and start new line
- procedure print(file out_file: TEXT;
- new_string: in string);
-
- -- print character to a file and start new line
- procedure print(file out_file: TEXT;
- char: in character);
-
-end txt_util;
-
-
-
-
-package body txt_util is
-
-
-
-
- -- prints text to the screen
-
- procedure print(text: string) is
- variable msg_line: line;
- begin
- write(msg_line, text);
- writeline(output, msg_line);
- end print;
-
-
-
-
- -- prints text to the screen when active
-
- procedure print(active: boolean; text: string) is
- begin
- if active then
- print(text);
- end if;
- end print;
-
-
- -- converts std_logic into a character
-
- function chr(sl: std_logic) return character is
- variable c: character;
- begin
- case sl is
- when 'U' => c:= 'U';
- when 'X' => c:= 'X';
- when '0' => c:= '0';
- when '1' => c:= '1';
- when 'Z' => c:= 'Z';
- when 'W' => c:= 'W';
- when 'L' => c:= 'L';
- when 'H' => c:= 'H';
- when '-' => c:= '-';
- end case;
- return c;
- end chr;
-
-
-
- -- converts std_logic into a string (1 to 1)
-
- function str(sl: std_logic) return string is
- variable s: string(1 to 1);
- begin
- s(1) := chr(sl);
- return s;
- end str;
-
-
-
- -- converts std_logic_vector into a string (binary base)
- -- (this also takes care of the fact that the range of
- -- a string is natural while a std_logic_vector may
- -- have an integer range)
-
- function str(slv: std_logic_vector) return string is
- variable result : string (1 to slv'length);
- variable r : integer;
- begin
- r := 1;
- for i in slv'range loop
- result(r) := chr(slv(i));
- r := r + 1;
- end loop;
- return result;
- end str;
-
-
- function str(b: boolean) return string is
-
- begin
- if b then
- return "true";
- else
- return "false";
- end if;
- end str;
-
-
- -- converts an integer into a character
- -- for 0 to 9 the obvious mapping is used, higher
- -- values are mapped to the characters A-Z
- -- (this is usefull for systems with base > 10)
- -- (adapted from Steve Vogwell's posting in comp.lang.vhdl)
-
- function chr(int: integer) return character is
- variable c: character;
- begin
- case int is
- when 0 => c := '0';
- when 1 => c := '1';
- when 2 => c := '2';
- when 3 => c := '3';
- when 4 => c := '4';
- when 5 => c := '5';
- when 6 => c := '6';
- when 7 => c := '7';
- when 8 => c := '8';
- when 9 => c := '9';
- when 10 => c := 'A';
- when 11 => c := 'B';
- when 12 => c := 'C';
- when 13 => c := 'D';
- when 14 => c := 'E';
- when 15 => c := 'F';
- when 16 => c := 'G';
- when 17 => c := 'H';
- when 18 => c := 'I';
- when 19 => c := 'J';
- when 20 => c := 'K';
- when 21 => c := 'L';
- when 22 => c := 'M';
- when 23 => c := 'N';
- when 24 => c := 'O';
- when 25 => c := 'P';
- when 26 => c := 'Q';
- when 27 => c := 'R';
- when 28 => c := 'S';
- when 29 => c := 'T';
- when 30 => c := 'U';
- when 31 => c := 'V';
- when 32 => c := 'W';
- when 33 => c := 'X';
- when 34 => c := 'Y';
- when 35 => c := 'Z';
- when others => c := '?';
- end case;
- return c;
- end chr;
-
-
-
- -- convert integer to string using specified base
- -- (adapted from Steve Vogwell's posting in comp.lang.vhdl)
-
- function str(int: integer; base: integer) return string is
-
- variable temp: string(1 to 10);
- variable num: integer;
- variable abs_int: integer;
- variable len: integer := 1;
- variable power: integer := 1;
-
- begin
-
- -- bug fix for negative numbers
- abs_int := abs(int);
-
- num := abs_int;
-
- while num >= base loop -- Determine how many
- len := len + 1; -- characters required
- num := num / base; -- to represent the
- end loop ; -- number.
-
- for i in len downto 1 loop -- Convert the number to
- temp(i) := chr(abs_int/power mod base); -- a string starting
- power := power * base; -- with the right hand
- end loop ; -- side.
-
- -- return result and add sign if required
- if int < 0 then
- return '-'& temp(1 to len);
- else
- return temp(1 to len);
- end if;
-
- end str;
-
-
- -- convert integer to string, using base 10
- function str(int: integer) return string is
-
- begin
-
- return str(int, 10) ;
-
- end str;
-
-
-
- -- converts a std_logic_vector into a hex string.
- function hstr(slv: std_logic_vector) return string is
- variable hexlen: integer;
- variable longslv : std_logic_vector(67 downto 0) := (others => '0');
- variable hex : string(1 to 16);
- variable fourbit : std_logic_vector(3 downto 0);
- begin
- hexlen := (slv'left+1)/4;
- if (slv'left+1) mod 4 /= 0 then
- hexlen := hexlen + 1;
- end if;
- longslv(slv'left downto 0) := slv;
- for i in (hexlen -1) downto 0 loop
- fourbit := longslv(((i*4)+3) downto (i*4));
- case fourbit is
- when "0000" => hex(hexlen -I) := '0';
- when "0001" => hex(hexlen -I) := '1';
- when "0010" => hex(hexlen -I) := '2';
- when "0011" => hex(hexlen -I) := '3';
- when "0100" => hex(hexlen -I) := '4';
- when "0101" => hex(hexlen -I) := '5';
- when "0110" => hex(hexlen -I) := '6';
- when "0111" => hex(hexlen -I) := '7';
- when "1000" => hex(hexlen -I) := '8';
- when "1001" => hex(hexlen -I) := '9';
- when "1010" => hex(hexlen -I) := 'A';
- when "1011" => hex(hexlen -I) := 'B';
- when "1100" => hex(hexlen -I) := 'C';
- when "1101" => hex(hexlen -I) := 'D';
- when "1110" => hex(hexlen -I) := 'E';
- when "1111" => hex(hexlen -I) := 'F';
- when "ZZZZ" => hex(hexlen -I) := 'z';
- when "UUUU" => hex(hexlen -I) := 'u';
- when "XXXX" => hex(hexlen -I) := 'x';
- when others => hex(hexlen -I) := '?';
- end case;
- end loop;
- return hex(1 to hexlen);
- end hstr;
-
-
-
- -- functions to manipulate strings
- -----------------------------------
-
-
- -- convert a character to upper case
-
- function to_upper(c: character) return character is
-
- variable u: character;
-
- begin
-
- case c is
- when 'a' => u := 'A';
- when 'b' => u := 'B';
- when 'c' => u := 'C';
- when 'd' => u := 'D';
- when 'e' => u := 'E';
- when 'f' => u := 'F';
- when 'g' => u := 'G';
- when 'h' => u := 'H';
- when 'i' => u := 'I';
- when 'j' => u := 'J';
- when 'k' => u := 'K';
- when 'l' => u := 'L';
- when 'm' => u := 'M';
- when 'n' => u := 'N';
- when 'o' => u := 'O';
- when 'p' => u := 'P';
- when 'q' => u := 'Q';
- when 'r' => u := 'R';
- when 's' => u := 'S';
- when 't' => u := 'T';
- when 'u' => u := 'U';
- when 'v' => u := 'V';
- when 'w' => u := 'W';
- when 'x' => u := 'X';
- when 'y' => u := 'Y';
- when 'z' => u := 'Z';
- when others => u := c;
- end case;
-
- return u;
-
- end to_upper;
-
-
- -- convert a character to lower case
-
- function to_lower(c: character) return character is
-
- variable l: character;
-
- begin
-
- case c is
- when 'A' => l := 'a';
- when 'B' => l := 'b';
- when 'C' => l := 'c';
- when 'D' => l := 'd';
- when 'E' => l := 'e';
- when 'F' => l := 'f';
- when 'G' => l := 'g';
- when 'H' => l := 'h';
- when 'I' => l := 'i';
- when 'J' => l := 'j';
- when 'K' => l := 'k';
- when 'L' => l := 'l';
- when 'M' => l := 'm';
- when 'N' => l := 'n';
- when 'O' => l := 'o';
- when 'P' => l := 'p';
- when 'Q' => l := 'q';
- when 'R' => l := 'r';
- when 'S' => l := 's';
- when 'T' => l := 't';
- when 'U' => l := 'u';
- when 'V' => l := 'v';
- when 'W' => l := 'w';
- when 'X' => l := 'x';
- when 'Y' => l := 'y';
- when 'Z' => l := 'z';
- when others => l := c;
- end case;
-
- return l;
-
- end to_lower;
-
-
-
- -- convert a string to upper case
-
- function to_upper(s: string) return string is
-
- variable uppercase: string (s'range);
-
- begin
-
- for i in s'range loop
- uppercase(i):= to_upper(s(i));
- end loop;
- return uppercase;
-
- end to_upper;
-
-
-
- -- convert a string to lower case
-
- function to_lower(s: string) return string is
-
- variable lowercase: string (s'range);
-
- begin
-
- for i in s'range loop
- lowercase(i):= to_lower(s(i));
- end loop;
- return lowercase;
-
- end to_lower;
-
-
-
--- functions to convert strings into other types
-
-
--- converts a character into a std_logic
-
-function to_std_logic(c: character) return std_logic is
- variable sl: std_logic;
- begin
- case c is
- when 'U' =>
- sl := 'U';
- when 'X' =>
- sl := 'X';
- when '0' =>
- sl := '0';
- when '1' =>
- sl := '1';
- when 'Z' =>
- sl := 'Z';
- when 'W' =>
- sl := 'W';
- when 'L' =>
- sl := 'L';
- when 'H' =>
- sl := 'H';
- when '-' =>
- sl := '-';
- when others =>
- sl := 'X';
- end case;
- return sl;
- end to_std_logic;
-
-
--- converts a string into std_logic_vector
-
-function to_std_logic_vector(s: string) return std_logic_vector is
- variable slv: std_logic_vector(s'high-s'low downto 0);
- variable k: integer;
-begin
- k := s'high-s'low;
- for i in s'range loop
- slv(k) := to_std_logic(s(i));
- k := k - 1;
- end loop;
- return slv;
-end to_std_logic_vector;
-
-
-
-
-
-
-----------------
--- file I/O --
-----------------
-
-
-
--- read variable length string from input file
-
-procedure str_read(file in_file: TEXT;
- res_string: out string) is
-
- variable l: line;
- variable c: character;
- variable is_string: boolean;
-
- begin
-
- readline(in_file, l);
- -- clear the contents of the result string
- for i in res_string'range loop
- res_string(i) := ' ';
- end loop;
- -- read all characters of the line, up to the length
- -- of the results string
- for i in res_string'range loop
- read(l, c, is_string);
- res_string(i) := c;
- if not is_string then -- found end of line
- exit;
- end if;
- end loop;
-
-end str_read;
-
-
--- print string to a file
-procedure print(file out_file: TEXT;
- new_string: in string) is
-
- variable l: line;
-
- begin
-
- write(l, new_string);
- writeline(out_file, l);
-
-end print;
-
-
--- print character to a file and start new line
-procedure print(file out_file: TEXT;
- char: in character) is
-
- variable l: line;
-
- begin
-
- write(l, char);
- writeline(out_file, l);
-
-end print;
-
-
-
--- appends contents of a string to a file until line feed occurs
--- (LF is considered to be the end of the string)
-
-procedure str_write(file out_file: TEXT;
- new_string: in string) is
- begin
-
- for i in new_string'range loop
- print(out_file, new_string(i));
- if new_string(i) = LF then -- end of string
- exit;
- end if;
- end loop;
-
-end str_write;
-
-
-
-
-end txt_util;
-
-
-
-
+library ieee;
+use ieee.std_logic_1164.all;
+use std.textio.all;
+
+library work;
+
+package txt_util is
+
+ -- prints a message to the screen
+ procedure print(text: string);
+
+ -- prints the message when active
+ -- useful for debug switches
+ procedure print(active: boolean; text: string);
+
+ -- converts std_logic into a character
+ function chr(sl: std_logic) return character;
+
+ -- converts std_logic into a string (1 to 1)
+ function str(sl: std_logic) return string;
+
+ -- converts std_logic_vector into a string (binary base)
+ function str(slv: std_logic_vector) return string;
+
+ -- converts boolean into a string
+ function str(b: boolean) return string;
+
+ -- converts an integer into a single character
+ -- (can also be used for hex conversion and other bases)
+ function chr(int: integer) return character;
+
+ -- converts integer into string using specified base
+ function str(int: integer; base: integer) return string;
+
+ -- converts integer to string, using base 10
+ function str(int: integer) return string;
+
+ -- convert std_logic_vector into a string in hex format
+ function hstr(slv: std_logic_vector) return string;
+
+
+ -- functions to manipulate strings
+ -----------------------------------
+
+ -- convert a character to upper case
+ function to_upper(c: character) return character;
+
+ -- convert a character to lower case
+ function to_lower(c: character) return character;
+
+ -- convert a string to upper case
+ function to_upper(s: string) return string;
+
+ -- convert a string to lower case
+ function to_lower(s: string) return string;
+
+
+
+ -- functions to convert strings into other formats
+ --------------------------------------------------
+
+ -- converts a character into std_logic
+ function to_std_logic(c: character) return std_logic;
+
+ -- converts a string into std_logic_vector
+ function to_std_logic_vector(s: string) return std_logic_vector;
+
+
+
+ -- file I/O
+ -----------
+
+ -- read variable length string from input file
+ procedure str_read(file in_file: TEXT;
+ res_string: out string);
+
+ -- print string to a file and start new line
+ procedure print(file out_file: TEXT;
+ new_string: in string);
+
+ -- print character to a file and start new line
+ procedure print(file out_file: TEXT;
+ char: in character);
+
+end txt_util;
+
+
+
+
+package body txt_util is
+
+
+
+
+ -- prints text to the screen
+
+ procedure print(text: string) is
+ variable msg_line: line;
+ begin
+ write(msg_line, text);
+ writeline(output, msg_line);
+ end print;
+
+
+
+
+ -- prints text to the screen when active
+
+ procedure print(active: boolean; text: string) is
+ begin
+ if active then
+ print(text);
+ end if;
+ end print;
+
+
+ -- converts std_logic into a character
+
+ function chr(sl: std_logic) return character is
+ variable c: character;
+ begin
+ case sl is
+ when 'U' => c:= 'U';
+ when 'X' => c:= 'X';
+ when '0' => c:= '0';
+ when '1' => c:= '1';
+ when 'Z' => c:= 'Z';
+ when 'W' => c:= 'W';
+ when 'L' => c:= 'L';
+ when 'H' => c:= 'H';
+ when '-' => c:= '-';
+ end case;
+ return c;
+ end chr;
+
+
+
+ -- converts std_logic into a string (1 to 1)
+
+ function str(sl: std_logic) return string is
+ variable s: string(1 to 1);
+ begin
+ s(1) := chr(sl);
+ return s;
+ end str;
+
+
+
+ -- converts std_logic_vector into a string (binary base)
+ -- (this also takes care of the fact that the range of
+ -- a string is natural while a std_logic_vector may
+ -- have an integer range)
+
+ function str(slv: std_logic_vector) return string is
+ variable result : string (1 to slv'length);
+ variable r : integer;
+ begin
+ r := 1;
+ for i in slv'range loop
+ result(r) := chr(slv(i));
+ r := r + 1;
+ end loop;
+ return result;
+ end str;
+
+
+ function str(b: boolean) return string is
+
+ begin
+ if b then
+ return "true";
+ else
+ return "false";
+ end if;
+ end str;
+
+
+ -- converts an integer into a character
+ -- for 0 to 9 the obvious mapping is used, higher
+ -- values are mapped to the characters A-Z
+ -- (this is usefull for systems with base > 10)
+ -- (adapted from Steve Vogwell's posting in comp.lang.vhdl)
+
+ function chr(int: integer) return character is
+ variable c: character;
+ begin
+ case int is
+ when 0 => c := '0';
+ when 1 => c := '1';
+ when 2 => c := '2';
+ when 3 => c := '3';
+ when 4 => c := '4';
+ when 5 => c := '5';
+ when 6 => c := '6';
+ when 7 => c := '7';
+ when 8 => c := '8';
+ when 9 => c := '9';
+ when 10 => c := 'A';
+ when 11 => c := 'B';
+ when 12 => c := 'C';
+ when 13 => c := 'D';
+ when 14 => c := 'E';
+ when 15 => c := 'F';
+ when 16 => c := 'G';
+ when 17 => c := 'H';
+ when 18 => c := 'I';
+ when 19 => c := 'J';
+ when 20 => c := 'K';
+ when 21 => c := 'L';
+ when 22 => c := 'M';
+ when 23 => c := 'N';
+ when 24 => c := 'O';
+ when 25 => c := 'P';
+ when 26 => c := 'Q';
+ when 27 => c := 'R';
+ when 28 => c := 'S';
+ when 29 => c := 'T';
+ when 30 => c := 'U';
+ when 31 => c := 'V';
+ when 32 => c := 'W';
+ when 33 => c := 'X';
+ when 34 => c := 'Y';
+ when 35 => c := 'Z';
+ when others => c := '?';
+ end case;
+ return c;
+ end chr;
+
+
+
+ -- convert integer to string using specified base
+ -- (adapted from Steve Vogwell's posting in comp.lang.vhdl)
+
+ function str(int: integer; base: integer) return string is
+
+ variable temp: string(1 to 10);
+ variable num: integer;
+ variable abs_int: integer;
+ variable len: integer := 1;
+ variable power: integer := 1;
+
+ begin
+
+ -- bug fix for negative numbers
+ abs_int := abs(int);
+
+ num := abs_int;
+
+ while num >= base loop -- Determine how many
+ len := len + 1; -- characters required
+ num := num / base; -- to represent the
+ end loop ; -- number.
+
+ for i in len downto 1 loop -- Convert the number to
+ temp(i) := chr(abs_int/power mod base); -- a string starting
+ power := power * base; -- with the right hand
+ end loop ; -- side.
+
+ -- return result and add sign if required
+ if int < 0 then
+ return '-'& temp(1 to len);
+ else
+ return temp(1 to len);
+ end if;
+
+ end str;
+
+
+ -- convert integer to string, using base 10
+ function str(int: integer) return string is
+
+ begin
+
+ return str(int, 10) ;
+
+ end str;
+
+
+
+ -- converts a std_logic_vector into a hex string.
+ function hstr(slv: std_logic_vector) return string is
+ variable hexlen: integer;
+ variable longslv : std_logic_vector(67 downto 0) := (others => '0');
+ variable hex : string(1 to 16);
+ variable fourbit : std_logic_vector(3 downto 0);
+ begin
+ hexlen := (slv'left+1)/4;
+ if (slv'left+1) mod 4 /= 0 then
+ hexlen := hexlen + 1;
+ end if;
+ longslv(slv'left downto 0) := slv;
+ for i in (hexlen -1) downto 0 loop
+ fourbit := longslv(((i*4)+3) downto (i*4));
+ case fourbit is
+ when "0000" => hex(hexlen -I) := '0';
+ when "0001" => hex(hexlen -I) := '1';
+ when "0010" => hex(hexlen -I) := '2';
+ when "0011" => hex(hexlen -I) := '3';
+ when "0100" => hex(hexlen -I) := '4';
+ when "0101" => hex(hexlen -I) := '5';
+ when "0110" => hex(hexlen -I) := '6';
+ when "0111" => hex(hexlen -I) := '7';
+ when "1000" => hex(hexlen -I) := '8';
+ when "1001" => hex(hexlen -I) := '9';
+ when "1010" => hex(hexlen -I) := 'A';
+ when "1011" => hex(hexlen -I) := 'B';
+ when "1100" => hex(hexlen -I) := 'C';
+ when "1101" => hex(hexlen -I) := 'D';
+ when "1110" => hex(hexlen -I) := 'E';
+ when "1111" => hex(hexlen -I) := 'F';
+ when "ZZZZ" => hex(hexlen -I) := 'z';
+ when "UUUU" => hex(hexlen -I) := 'u';
+ when "XXXX" => hex(hexlen -I) := 'x';
+ when others => hex(hexlen -I) := '?';
+ end case;
+ end loop;
+ return hex(1 to hexlen);
+ end hstr;
+
+
+
+ -- functions to manipulate strings
+ -----------------------------------
+
+
+ -- convert a character to upper case
+
+ function to_upper(c: character) return character is
+
+ variable u: character;
+
+ begin
+
+ case c is
+ when 'a' => u := 'A';
+ when 'b' => u := 'B';
+ when 'c' => u := 'C';
+ when 'd' => u := 'D';
+ when 'e' => u := 'E';
+ when 'f' => u := 'F';
+ when 'g' => u := 'G';
+ when 'h' => u := 'H';
+ when 'i' => u := 'I';
+ when 'j' => u := 'J';
+ when 'k' => u := 'K';
+ when 'l' => u := 'L';
+ when 'm' => u := 'M';
+ when 'n' => u := 'N';
+ when 'o' => u := 'O';
+ when 'p' => u := 'P';
+ when 'q' => u := 'Q';
+ when 'r' => u := 'R';
+ when 's' => u := 'S';
+ when 't' => u := 'T';
+ when 'u' => u := 'U';
+ when 'v' => u := 'V';
+ when 'w' => u := 'W';
+ when 'x' => u := 'X';
+ when 'y' => u := 'Y';
+ when 'z' => u := 'Z';
+ when others => u := c;
+ end case;
+
+ return u;
+
+ end to_upper;
+
+
+ -- convert a character to lower case
+
+ function to_lower(c: character) return character is
+
+ variable l: character;
+
+ begin
+
+ case c is
+ when 'A' => l := 'a';
+ when 'B' => l := 'b';
+ when 'C' => l := 'c';
+ when 'D' => l := 'd';
+ when 'E' => l := 'e';
+ when 'F' => l := 'f';
+ when 'G' => l := 'g';
+ when 'H' => l := 'h';
+ when 'I' => l := 'i';
+ when 'J' => l := 'j';
+ when 'K' => l := 'k';
+ when 'L' => l := 'l';
+ when 'M' => l := 'm';
+ when 'N' => l := 'n';
+ when 'O' => l := 'o';
+ when 'P' => l := 'p';
+ when 'Q' => l := 'q';
+ when 'R' => l := 'r';
+ when 'S' => l := 's';
+ when 'T' => l := 't';
+ when 'U' => l := 'u';
+ when 'V' => l := 'v';
+ when 'W' => l := 'w';
+ when 'X' => l := 'x';
+ when 'Y' => l := 'y';
+ when 'Z' => l := 'z';
+ when others => l := c;
+ end case;
+
+ return l;
+
+ end to_lower;
+
+
+
+ -- convert a string to upper case
+
+ function to_upper(s: string) return string is
+
+ variable uppercase: string (s'range);
+
+ begin
+
+ for i in s'range loop
+ uppercase(i):= to_upper(s(i));
+ end loop;
+ return uppercase;
+
+ end to_upper;
+
+
+
+ -- convert a string to lower case
+
+ function to_lower(s: string) return string is
+
+ variable lowercase: string (s'range);
+
+ begin
+
+ for i in s'range loop
+ lowercase(i):= to_lower(s(i));
+ end loop;
+ return lowercase;
+
+ end to_lower;
+
+
+
+-- functions to convert strings into other types
+
+
+-- converts a character into a std_logic
+
+function to_std_logic(c: character) return std_logic is
+ variable sl: std_logic;
+ begin
+ case c is
+ when 'U' =>
+ sl := 'U';
+ when 'X' =>
+ sl := 'X';
+ when '0' =>
+ sl := '0';
+ when '1' =>
+ sl := '1';
+ when 'Z' =>
+ sl := 'Z';
+ when 'W' =>
+ sl := 'W';
+ when 'L' =>
+ sl := 'L';
+ when 'H' =>
+ sl := 'H';
+ when '-' =>
+ sl := '-';
+ when others =>
+ sl := 'X';
+ end case;
+ return sl;
+ end to_std_logic;
+
+
+-- converts a string into std_logic_vector
+
+function to_std_logic_vector(s: string) return std_logic_vector is
+ variable slv: std_logic_vector(s'high-s'low downto 0);
+ variable k: integer;
+begin
+ k := s'high-s'low;
+ for i in s'range loop
+ slv(k) := to_std_logic(s(i));
+ k := k - 1;
+ end loop;
+ return slv;
+end to_std_logic_vector;
+
+
+
+
+
+
+----------------
+-- file I/O --
+----------------
+
+
+
+-- read variable length string from input file
+
+procedure str_read(file in_file: TEXT;
+ res_string: out string) is
+
+ variable l: line;
+ variable c: character;
+ variable is_string: boolean;
+
+ begin
+
+ readline(in_file, l);
+ -- clear the contents of the result string
+ for i in res_string'range loop
+ res_string(i) := ' ';
+ end loop;
+ -- read all characters of the line, up to the length
+ -- of the results string
+ for i in res_string'range loop
+ read(l, c, is_string);
+ res_string(i) := c;
+ if not is_string then -- found end of line
+ exit;
+ end if;
+ end loop;
+
+end str_read;
+
+
+-- print string to a file
+procedure print(file out_file: TEXT;
+ new_string: in string) is
+
+ variable l: line;
+
+ begin
+
+ write(l, new_string);
+ writeline(out_file, l);
+
+end print;
+
+
+-- print character to a file and start new line
+procedure print(file out_file: TEXT;
+ char: in character) is
+
+ variable l: line;
+
+ begin
+
+ write(l, char);
+ writeline(out_file, l);
+
+end print;
+
+
+
+-- appends contents of a string to a file until line feed occurs
+-- (LF is considered to be the end of the string)
+
+procedure str_write(file out_file: TEXT;
+ new_string: in string) is
+ begin
+
+ for i in new_string'range loop
+ print(out_file, new_string(i));
+ if new_string(i) = LF then -- end of string
+ exit;
+ end if;
+ end loop;
+
+end str_write;
+
+
+
+
+end txt_util;
+
+
+
+
diff --git a/zpu/hdl/zy2000/zpu_config.vhd b/zpu/hdl/zy2000/zpu_config.vhd
index 61949c5..c0df294 100644
--- a/zpu/hdl/zy2000/zpu_config.vhd
+++ b/zpu/hdl/zy2000/zpu_config.vhd
@@ -1,20 +1,20 @@
-library ieee;
-use ieee.std_logic_1164.all;
-use ieee.std_logic_unsigned.all;
-
-package zpu_config is
- -- generate trace output or not.
- constant Generate_Trace : boolean := false;
- constant wordPower : integer := 5;
- -- during simulation, set this to '0' to get matching trace.txt
- constant DontCareValue : std_logic := '0';
- -- Clock frequency in MHz.
- constant ZPU_Frequency : std_logic_vector(7 downto 0) := x"40";
- -- This is the msb address bit. bytes=2^(maxAddrBitIncIO+1)
- constant maxAddrBitIncIO : integer := 27;
-
- -- start byte address of stack.
- -- point to top of RAM - 2*words
- constant spStart : std_logic_vector(maxAddrBitIncIO downto 0) := x"1fffff8";
-
-end zpu_config;
+library ieee;
+use ieee.std_logic_1164.all;
+use ieee.std_logic_unsigned.all;
+
+package zpu_config is
+ -- generate trace output or not.
+ constant Generate_Trace : boolean := false;
+ constant wordPower : integer := 5;
+ -- during simulation, set this to '0' to get matching trace.txt
+ constant DontCareValue : std_logic := '0';
+ -- Clock frequency in MHz.
+ constant ZPU_Frequency : std_logic_vector(7 downto 0) := x"40";
+ -- This is the msb address bit. bytes=2^(maxAddrBitIncIO+1)
+ constant maxAddrBitIncIO : integer := 27;
+
+ -- start byte address of stack.
+ -- point to top of RAM - 2*words
+ constant spStart : std_logic_vector(maxAddrBitIncIO downto 0) := x"1fffff8";
+
+end zpu_config;
diff --git a/zpu/hdl/zy2000/zpu_config_fast.vhd b/zpu/hdl/zy2000/zpu_config_fast.vhd
index 61949c5..c0df294 100644
--- a/zpu/hdl/zy2000/zpu_config_fast.vhd
+++ b/zpu/hdl/zy2000/zpu_config_fast.vhd
@@ -1,20 +1,20 @@
-library ieee;
-use ieee.std_logic_1164.all;
-use ieee.std_logic_unsigned.all;
-
-package zpu_config is
- -- generate trace output or not.
- constant Generate_Trace : boolean := false;
- constant wordPower : integer := 5;
- -- during simulation, set this to '0' to get matching trace.txt
- constant DontCareValue : std_logic := '0';
- -- Clock frequency in MHz.
- constant ZPU_Frequency : std_logic_vector(7 downto 0) := x"40";
- -- This is the msb address bit. bytes=2^(maxAddrBitIncIO+1)
- constant maxAddrBitIncIO : integer := 27;
-
- -- start byte address of stack.
- -- point to top of RAM - 2*words
- constant spStart : std_logic_vector(maxAddrBitIncIO downto 0) := x"1fffff8";
-
-end zpu_config;
+library ieee;
+use ieee.std_logic_1164.all;
+use ieee.std_logic_unsigned.all;
+
+package zpu_config is
+ -- generate trace output or not.
+ constant Generate_Trace : boolean := false;
+ constant wordPower : integer := 5;
+ -- during simulation, set this to '0' to get matching trace.txt
+ constant DontCareValue : std_logic := '0';
+ -- Clock frequency in MHz.
+ constant ZPU_Frequency : std_logic_vector(7 downto 0) := x"40";
+ -- This is the msb address bit. bytes=2^(maxAddrBitIncIO+1)
+ constant maxAddrBitIncIO : integer := 27;
+
+ -- start byte address of stack.
+ -- point to top of RAM - 2*words
+ constant spStart : std_logic_vector(maxAddrBitIncIO downto 0) := x"1fffff8";
+
+end zpu_config;
diff --git a/zpu/hdl/zy2000/zpupkg.vhd b/zpu/hdl/zy2000/zpupkg.vhd
index 1a01563..a7e6cf1 100644
--- a/zpu/hdl/zy2000/zpupkg.vhd
+++ b/zpu/hdl/zy2000/zpupkg.vhd
@@ -1,168 +1,168 @@
-library IEEE;
-use IEEE.STD_LOGIC_1164.all;
-use IEEE.STD_LOGIC_ARITH.all;
-
-library work;
-use work.zpu_config.all;
-
-package zpupkg is
-
- -- This bit is set for read/writes to IO
- -- FIX!!! eventually this should be set to wordSize-1 so as to
- -- to make the address of IO independent of amount of memory
- -- reserved for CPU. Requires trivial tweaks in toolchain/runtime
- -- libraries.
-
- constant byteBits : integer := wordPower-3; -- # of bits in a word that addresses bytes
- constant maxAddrBit : integer := maxAddrBitIncIO-1;
- constant ioBit : integer := maxAddrBit+1;
- constant wordSize : integer := 2**wordPower;
- constant wordBytes : integer := wordSize/8;
- constant minAddrBit : integer := byteBits;
- -- configurable internal stack size. Probably going to be 16 after toolchain is done
- constant stack_bits : integer := 5;
- constant stack_size : integer := 2**stack_bits;
-
- component dualport_ram is
- port (clk : in std_logic;
- memAWriteEnable : in std_logic;
- memAAddr : in std_logic_vector(maxAddrBit downto minAddrBit);
- memAWrite : in std_logic_vector(wordSize-1 downto 0);
- memARead : out std_logic_vector(wordSize-1 downto 0);
- memBWriteEnable : in std_logic;
- memBAddr : in std_logic_vector(maxAddrBit downto minAddrBit);
- memBWrite : in std_logic_vector(wordSize-1 downto 0);
- memBRead : out std_logic_vector(wordSize-1 downto 0));
- end component;
-
- component dram is
- port (clk : in std_logic;
- areset : in std_logic;
- mem_writeEnable : in std_logic;
- mem_readEnable : in std_logic;
- mem_addr : in std_logic_vector(maxAddrBit downto 0);
- mem_write : in std_logic_vector(wordSize-1 downto 0);
- mem_read : out std_logic_vector(wordSize-1 downto 0);
- mem_busy : out std_logic;
- mem_writeMask : in std_logic_vector(wordBytes-1 downto 0));
- end component;
-
-
- component trace is
- port(
- clk : in std_logic;
- begin_inst : in std_logic;
- pc : in std_logic_vector(maxAddrBitIncIO downto 0);
- opcode : in std_logic_vector(7 downto 0);
- sp : in std_logic_vector(maxAddrBitIncIO downto minAddrBit);
- memA : in std_logic_vector(wordSize-1 downto 0);
- memB : in std_logic_vector(wordSize-1 downto 0);
- busy : in std_logic;
- intSp : in std_logic_vector(stack_bits-1 downto 0)
- );
- end component;
-
- component zpu_core is
- port ( clk : in std_logic;
- areset : in std_logic;
- enable : in std_logic;
- mem_req : out std_logic;
- mem_we : out std_logic;
- mem_ack : in std_logic;
- mem_read : in std_logic_vector(wordSize-1 downto 0);
- mem_write : out std_logic_vector(wordSize-1 downto 0);
- out_mem_addr : out std_logic_vector(maxAddrBitIncIO downto 0);
- mem_writeMask: out std_logic_vector(wordBytes-1 downto 0);
- interrupt : in std_logic;
- break : out std_logic;
- zpu_status : out std_logic_vector(63 downto 0));
- end component;
-
-
-
- component timer is
- port(
- clk : in std_logic;
- areset : in std_logic;
- sample : in std_logic;
- reset : in std_logic;
- counter : out std_logic_vector(63 downto 0));
- end component;
-
- component zpuio is
- port ( areset : in std_logic;
- cpu_clk : in std_logic;
- clk_status : in std_logic_vector(2 downto 0);
- cpu_din : in std_logic_vector(15 downto 0);
- cpu_a : in std_logic_vector(20 downto 0);
- cpu_we : in std_logic_vector(1 downto 0);
- cpu_re : in std_logic;
- cpu_dout : inout std_logic_vector(15 downto 0));
- end component;
-
-
-
-
- -- opcode decode constants
- constant OpCode_Im : std_logic_vector(7 downto 7) := "1";
- constant OpCode_StoreSP : std_logic_vector(7 downto 5) := "010";
- constant OpCode_LoadSP : std_logic_vector(7 downto 5) := "011";
- constant OpCode_Emulate : std_logic_vector(7 downto 5) := "001";
- constant OpCode_AddSP : std_logic_vector(7 downto 4) := "0001";
- constant OpCode_Short : std_logic_vector(7 downto 4) := "0000";
-
- constant OpCode_Break : std_logic_vector(3 downto 0) := "0000";
- constant OpCode_Shiftleft: std_logic_vector(3 downto 0) := "0001";
- constant OpCode_PushSP : std_logic_vector(3 downto 0) := "0010";
- constant OpCode_PushInt : std_logic_vector(3 downto 0) := "0011";
-
- constant OpCode_PopPC : std_logic_vector(3 downto 0) := "0100";
- constant OpCode_Add : std_logic_vector(3 downto 0) := "0101";
- constant OpCode_And : std_logic_vector(3 downto 0) := "0110";
- constant OpCode_Or : std_logic_vector(3 downto 0) := "0111";
-
- constant OpCode_Load : std_logic_vector(3 downto 0) := "1000";
- constant OpCode_Not : std_logic_vector(3 downto 0) := "1001";
- constant OpCode_Flip : std_logic_vector(3 downto 0) := "1010";
- constant OpCode_Nop : std_logic_vector(3 downto 0) := "1011";
-
- constant OpCode_Store : std_logic_vector(3 downto 0) := "1100";
- constant OpCode_PopSP : std_logic_vector(3 downto 0) := "1101";
- constant OpCode_Compare : std_logic_vector(3 downto 0) := "1110";
- constant OpCode_PopInt : std_logic_vector(3 downto 0) := "1111";
-
- constant OpCode_Lessthan : std_logic_vector(5 downto 0) := conv_std_logic_vector(36, 6);
- constant OpCode_Lessthanorequal : std_logic_vector(5 downto 0) := conv_std_logic_vector(37, 6);
- constant OpCode_Ulessthan : std_logic_vector(5 downto 0) := conv_std_logic_vector(38, 6);
- constant OpCode_Ulessthanorequal : std_logic_vector(5 downto 0) := conv_std_logic_vector(39, 6);
-
- constant OpCode_Swap : std_logic_vector(5 downto 0) := conv_std_logic_vector(40, 6);
- constant OpCode_Mult : std_logic_vector(5 downto 0) := conv_std_logic_vector(41, 6);
-
- constant OpCode_Lshiftright : std_logic_vector(5 downto 0) := conv_std_logic_vector(42, 6);
- constant OpCode_Ashiftleft : std_logic_vector(5 downto 0) := conv_std_logic_vector(43, 6);
- constant OpCode_Ashiftright : std_logic_vector(5 downto 0) := conv_std_logic_vector(44, 6);
- constant OpCode_Call : std_logic_vector(5 downto 0) := conv_std_logic_vector(45, 6);
-
- constant OpCode_Eq : std_logic_vector(5 downto 0) := conv_std_logic_vector(46, 6);
- constant OpCode_Neq : std_logic_vector(5 downto 0) := conv_std_logic_vector(47, 6);
-
- constant OpCode_Sub : std_logic_vector(5 downto 0) := conv_std_logic_vector(49, 6);
- constant OpCode_Loadb : std_logic_vector(5 downto 0) := conv_std_logic_vector(51, 6);
- constant OpCode_Storeb : std_logic_vector(5 downto 0) := conv_std_logic_vector(52, 6);
-
- constant OpCode_Eqbranch : std_logic_vector(5 downto 0) := conv_std_logic_vector(55, 6);
- constant OpCode_Neqbranch : std_logic_vector(5 downto 0) := conv_std_logic_vector(56, 6);
- constant OpCode_Poppcrel : std_logic_vector(5 downto 0) := conv_std_logic_vector(57, 6);
-
- constant OpCode_Pushspadd : std_logic_vector(5 downto 0) := conv_std_logic_vector(61, 6);
- constant OpCode_Mult16x16 : std_logic_vector(5 downto 0) := conv_std_logic_vector(62, 6);
- constant OpCode_Callpcrel : std_logic_vector(5 downto 0) := conv_std_logic_vector(63, 6);
-
-
-
- constant OpCode_Size : integer := 8;
-
-
-
-end zpupkg;
+library IEEE;
+use IEEE.STD_LOGIC_1164.all;
+use IEEE.STD_LOGIC_ARITH.all;
+
+library work;
+use work.zpu_config.all;
+
+package zpupkg is
+
+ -- This bit is set for read/writes to IO
+ -- FIX!!! eventually this should be set to wordSize-1 so as to
+ -- to make the address of IO independent of amount of memory
+ -- reserved for CPU. Requires trivial tweaks in toolchain/runtime
+ -- libraries.
+
+ constant byteBits : integer := wordPower-3; -- # of bits in a word that addresses bytes
+ constant maxAddrBit : integer := maxAddrBitIncIO-1;
+ constant ioBit : integer := maxAddrBit+1;
+ constant wordSize : integer := 2**wordPower;
+ constant wordBytes : integer := wordSize/8;
+ constant minAddrBit : integer := byteBits;
+ -- configurable internal stack size. Probably going to be 16 after toolchain is done
+ constant stack_bits : integer := 5;
+ constant stack_size : integer := 2**stack_bits;
+
+ component dualport_ram is
+ port (clk : in std_logic;
+ memAWriteEnable : in std_logic;
+ memAAddr : in std_logic_vector(maxAddrBit downto minAddrBit);
+ memAWrite : in std_logic_vector(wordSize-1 downto 0);
+ memARead : out std_logic_vector(wordSize-1 downto 0);
+ memBWriteEnable : in std_logic;
+ memBAddr : in std_logic_vector(maxAddrBit downto minAddrBit);
+ memBWrite : in std_logic_vector(wordSize-1 downto 0);
+ memBRead : out std_logic_vector(wordSize-1 downto 0));
+ end component;
+
+ component dram is
+ port (clk : in std_logic;
+ areset : in std_logic;
+ mem_writeEnable : in std_logic;
+ mem_readEnable : in std_logic;
+ mem_addr : in std_logic_vector(maxAddrBit downto 0);
+ mem_write : in std_logic_vector(wordSize-1 downto 0);
+ mem_read : out std_logic_vector(wordSize-1 downto 0);
+ mem_busy : out std_logic;
+ mem_writeMask : in std_logic_vector(wordBytes-1 downto 0));
+ end component;
+
+
+ component trace is
+ port(
+ clk : in std_logic;
+ begin_inst : in std_logic;
+ pc : in std_logic_vector(maxAddrBitIncIO downto 0);
+ opcode : in std_logic_vector(7 downto 0);
+ sp : in std_logic_vector(maxAddrBitIncIO downto minAddrBit);
+ memA : in std_logic_vector(wordSize-1 downto 0);
+ memB : in std_logic_vector(wordSize-1 downto 0);
+ busy : in std_logic;
+ intSp : in std_logic_vector(stack_bits-1 downto 0)
+ );
+ end component;
+
+ component zpu_core is
+ port ( clk : in std_logic;
+ areset : in std_logic;
+ enable : in std_logic;
+ mem_req : out std_logic;
+ mem_we : out std_logic;
+ mem_ack : in std_logic;
+ mem_read : in std_logic_vector(wordSize-1 downto 0);
+ mem_write : out std_logic_vector(wordSize-1 downto 0);
+ out_mem_addr : out std_logic_vector(maxAddrBitIncIO downto 0);
+ mem_writeMask: out std_logic_vector(wordBytes-1 downto 0);
+ interrupt : in std_logic;
+ break : out std_logic;
+ zpu_status : out std_logic_vector(63 downto 0));
+ end component;
+
+
+
+ component timer is
+ port(
+ clk : in std_logic;
+ areset : in std_logic;
+ sample : in std_logic;
+ reset : in std_logic;
+ counter : out std_logic_vector(63 downto 0));
+ end component;
+
+ component zpuio is
+ port ( areset : in std_logic;
+ cpu_clk : in std_logic;
+ clk_status : in std_logic_vector(2 downto 0);
+ cpu_din : in std_logic_vector(15 downto 0);
+ cpu_a : in std_logic_vector(20 downto 0);
+ cpu_we : in std_logic_vector(1 downto 0);
+ cpu_re : in std_logic;
+ cpu_dout : inout std_logic_vector(15 downto 0));
+ end component;
+
+
+
+
+ -- opcode decode constants
+ constant OpCode_Im : std_logic_vector(7 downto 7) := "1";
+ constant OpCode_StoreSP : std_logic_vector(7 downto 5) := "010";
+ constant OpCode_LoadSP : std_logic_vector(7 downto 5) := "011";
+ constant OpCode_Emulate : std_logic_vector(7 downto 5) := "001";
+ constant OpCode_AddSP : std_logic_vector(7 downto 4) := "0001";
+ constant OpCode_Short : std_logic_vector(7 downto 4) := "0000";
+
+ constant OpCode_Break : std_logic_vector(3 downto 0) := "0000";
+ constant OpCode_Shiftleft: std_logic_vector(3 downto 0) := "0001";
+ constant OpCode_PushSP : std_logic_vector(3 downto 0) := "0010";
+ constant OpCode_PushInt : std_logic_vector(3 downto 0) := "0011";
+
+ constant OpCode_PopPC : std_logic_vector(3 downto 0) := "0100";
+ constant OpCode_Add : std_logic_vector(3 downto 0) := "0101";
+ constant OpCode_And : std_logic_vector(3 downto 0) := "0110";
+ constant OpCode_Or : std_logic_vector(3 downto 0) := "0111";
+
+ constant OpCode_Load : std_logic_vector(3 downto 0) := "1000";
+ constant OpCode_Not : std_logic_vector(3 downto 0) := "1001";
+ constant OpCode_Flip : std_logic_vector(3 downto 0) := "1010";
+ constant OpCode_Nop : std_logic_vector(3 downto 0) := "1011";
+
+ constant OpCode_Store : std_logic_vector(3 downto 0) := "1100";
+ constant OpCode_PopSP : std_logic_vector(3 downto 0) := "1101";
+ constant OpCode_Compare : std_logic_vector(3 downto 0) := "1110";
+ constant OpCode_PopInt : std_logic_vector(3 downto 0) := "1111";
+
+ constant OpCode_Lessthan : std_logic_vector(5 downto 0) := conv_std_logic_vector(36, 6);
+ constant OpCode_Lessthanorequal : std_logic_vector(5 downto 0) := conv_std_logic_vector(37, 6);
+ constant OpCode_Ulessthan : std_logic_vector(5 downto 0) := conv_std_logic_vector(38, 6);
+ constant OpCode_Ulessthanorequal : std_logic_vector(5 downto 0) := conv_std_logic_vector(39, 6);
+
+ constant OpCode_Swap : std_logic_vector(5 downto 0) := conv_std_logic_vector(40, 6);
+ constant OpCode_Mult : std_logic_vector(5 downto 0) := conv_std_logic_vector(41, 6);
+
+ constant OpCode_Lshiftright : std_logic_vector(5 downto 0) := conv_std_logic_vector(42, 6);
+ constant OpCode_Ashiftleft : std_logic_vector(5 downto 0) := conv_std_logic_vector(43, 6);
+ constant OpCode_Ashiftright : std_logic_vector(5 downto 0) := conv_std_logic_vector(44, 6);
+ constant OpCode_Call : std_logic_vector(5 downto 0) := conv_std_logic_vector(45, 6);
+
+ constant OpCode_Eq : std_logic_vector(5 downto 0) := conv_std_logic_vector(46, 6);
+ constant OpCode_Neq : std_logic_vector(5 downto 0) := conv_std_logic_vector(47, 6);
+
+ constant OpCode_Sub : std_logic_vector(5 downto 0) := conv_std_logic_vector(49, 6);
+ constant OpCode_Loadb : std_logic_vector(5 downto 0) := conv_std_logic_vector(51, 6);
+ constant OpCode_Storeb : std_logic_vector(5 downto 0) := conv_std_logic_vector(52, 6);
+
+ constant OpCode_Eqbranch : std_logic_vector(5 downto 0) := conv_std_logic_vector(55, 6);
+ constant OpCode_Neqbranch : std_logic_vector(5 downto 0) := conv_std_logic_vector(56, 6);
+ constant OpCode_Poppcrel : std_logic_vector(5 downto 0) := conv_std_logic_vector(57, 6);
+
+ constant OpCode_Pushspadd : std_logic_vector(5 downto 0) := conv_std_logic_vector(61, 6);
+ constant OpCode_Mult16x16 : std_logic_vector(5 downto 0) := conv_std_logic_vector(62, 6);
+ constant OpCode_Callpcrel : std_logic_vector(5 downto 0) := conv_std_logic_vector(63, 6);
+
+
+
+ constant OpCode_Size : integer := 8;
+
+
+
+end zpupkg;
OpenPOWER on IntegriCloud