diff --git a/.gitignore b/.gitignore index c66e81b..f183c53 100644 --- a/.gitignore +++ b/.gitignore @@ -5,6 +5,7 @@ del2 del3 del4 del5 +Chip_Designer # Windows image file caches Thumbs.db @@ -103,4 +104,7 @@ libraries/ZPUino_1.zip libraries/audio libraries -2.0-v1.zip libraries/AVR_Wishbone_Bridge.zip libraries/AVR_Wishbone_Bridge.zip -*.zip \ No newline at end of file +*.zip +hdmi-generic-old/smallfs/image.jpg +*.7z +libraries/Wishbone_Sump_LA/mt48lc16m16a2.vhd \ No newline at end of file diff --git a/00.Papilio_Schematic_Library/Libraries/ZPUino_1/PSL_Papilio_DUO_LX9/papilio_duo.ucf b/00.Papilio_Schematic_Library/Libraries/ZPUino_1/PSL_Papilio_DUO_LX9/papilio_duo.ucf index 35a7b53..8f497bd 100644 --- a/00.Papilio_Schematic_Library/Libraries/ZPUino_1/PSL_Papilio_DUO_LX9/papilio_duo.ucf +++ b/00.Papilio_Schematic_Library/Libraries/ZPUino_1/PSL_Papilio_DUO_LX9/papilio_duo.ucf @@ -37,6 +37,7 @@ NET ext_pins_out(25) LOC="P141" | IOSTANDARD=LVTTL | DRIVE=8 | SLEW=FAST; NET RXD LOC="P46" | IOSTANDARD=LVTTL | DRIVE=8 | SLEW=FAST; # RX NET ext_pins_in(2) LOC="P46" | IOSTANDARD=LVTTL | DRIVE=8 | SLEW=FAST; # RX +# Arduino Pinouts NET Arduino_0 LOC="P116" | IOSTANDARD=LVTTL; # A0 NET Arduino_1 LOC="P117" | IOSTANDARD=LVTTL; # A1 NET Arduino_2 LOC="P118" | IOSTANDARD=LVTTL; # A2 @@ -78,22 +79,81 @@ NET Arduino_48 LOC="P55" | IOSTANDARD=LVTTL; NET Arduino_50 LOC="P50" | IOSTANDARD=LVTTL; # C14 NET Arduino_52 LOC="P47" | IOSTANDARD=LVTTL; # C15 -NET Arduino_23 LOC="P98" | IOSTANDARD=LVTTL ; -NET Arduino_25 LOC="P95" | IOSTANDARD=LVTTL ; -NET Arduino_27 LOC="P92" | IOSTANDARD=LVTTL ; -NET Arduino_29 LOC="P87" | IOSTANDARD=LVTTL ; -NET Arduino_31 LOC="P84" | IOSTANDARD=LVTTL ; -NET Arduino_33 LOC="P82" | IOSTANDARD=LVTTL ; -NET Arduino_35 LOC="P80" | IOSTANDARD=LVTTL ; -NET Arduino_37 LOC="P78" | IOSTANDARD=LVTTL ; -NET Arduino_39 LOC="P74" | IOSTANDARD=LVTTL ; -NET Arduino_41 LOC="P66" | IOSTANDARD=LVTTL ; -NET Arduino_43 LOC="P61" | IOSTANDARD=LVTTL ; -NET Arduino_45 LOC="P58" | IOSTANDARD=LVTTL ; -NET Arduino_47 LOC="P56" | IOSTANDARD=LVTTL ; -NET Arduino_49 LOC="P51" | IOSTANDARD=LVTTL ; -NET Arduino_51 LOC="P48" | IOSTANDARD=LVTTL ; -NET Arduino_53 LOC="P39" | IOSTANDARD=LVTTL ; +NET Arduino_23 LOC="P98" | IOSTANDARD=LVTTL ; # D15 +NET Arduino_25 LOC="P95" | IOSTANDARD=LVTTL ; # D14 +NET Arduino_27 LOC="P92" | IOSTANDARD=LVTTL ; # D13 +NET Arduino_29 LOC="P87" | IOSTANDARD=LVTTL ; # D12 +NET Arduino_31 LOC="P84" | IOSTANDARD=LVTTL ; # D11 +NET Arduino_33 LOC="P82" | IOSTANDARD=LVTTL ; # D10 +NET Arduino_35 LOC="P80" | IOSTANDARD=LVTTL ; # D9 +NET Arduino_37 LOC="P78" | IOSTANDARD=LVTTL ; # D8 +NET Arduino_39 LOC="P74" | IOSTANDARD=LVTTL ; # D7 +NET Arduino_41 LOC="P66" | IOSTANDARD=LVTTL ; # D6 +NET Arduino_43 LOC="P61" | IOSTANDARD=LVTTL ; # D5 +NET Arduino_45 LOC="P58" | IOSTANDARD=LVTTL ; # D4 +NET Arduino_47 LOC="P56" | IOSTANDARD=LVTTL ; # D3 +NET Arduino_49 LOC="P51" | IOSTANDARD=LVTTL ; # D2 +NET Arduino_51 LOC="P48" | IOSTANDARD=LVTTL ; # D1 +NET Arduino_53 LOC="P39" | IOSTANDARD=LVTTL ; # D0 + +# Wing Bus Pinouts +NET WA(0) LOC="P116" | IOSTANDARD=LVTTL; # A0 +NET WA(1) LOC="P117" | IOSTANDARD=LVTTL; # A1 +NET WA(2) LOC="P118" | IOSTANDARD=LVTTL; # A2 +NET WA(3) LOC="P119" | IOSTANDARD=LVTTL; # A3 +NET WA(4) LOC="P120" | IOSTANDARD=LVTTL; # A4 +NET WA(5) LOC="P121" | IOSTANDARD=LVTTL; # A5 +NET WA(6) LOC="P123" | IOSTANDARD=LVTTL; # A6 +NET WA(7) LOC="P124" | IOSTANDARD=LVTTL; # A7 +NET WA(8) LOC="P126" | IOSTANDARD=LVTTL; # A8 +NET WA(9) LOC="P127" | IOSTANDARD=LVTTL; # A9 +NET WA(10) LOC="P131" | IOSTANDARD=LVTTL; # A10 +NET WA(11) LOC="P132" | IOSTANDARD=LVTTL; # A11 +NET WA(12) LOC="P133" | IOSTANDARD=LVTTL; # A12 +NET WA(13) LOC="P134" | IOSTANDARD=LVTTL; # A13 + +NET WB(7) LOC="P115" | IOSTANDARD=LVTTL; # B7 +NET WB(6) LOC="P114" | IOSTANDARD=LVTTL; # B6 +NET WB(5) LOC="P112" | IOSTANDARD=LVTTL; # B5 +NET WB(4) LOC="P111" | IOSTANDARD=LVTTL; # B4 +NET WB(3) LOC="P105" | IOSTANDARD=LVTTL; # B3 +NET WB(2) LOC="P102" | IOSTANDARD=LVTTL; # B2 +NET WB(1) LOC="P101" | IOSTANDARD=LVTTL; # B1 +NET WB(0) LOC="P100" | IOSTANDARD=LVTTL; # B0 + +NET WC(0) LOC="P99" | IOSTANDARD=LVTTL; # C0 +NET WC(1) LOC="P97" | IOSTANDARD=LVTTL; # C1 +NET WC(2) LOC="P93" | IOSTANDARD=LVTTL; # C2 +NET WC(3) LOC="P88" | IOSTANDARD=LVTTL; # C3 +NET WC(4) LOC="P85" | IOSTANDARD=LVTTL; # C4 +NET WC(5) LOC="P83" | IOSTANDARD=LVTTL; # C5 +NET WC(6) LOC="P81" | IOSTANDARD=LVTTL; # C6 +NET WC(7) LOC="P79" | IOSTANDARD=LVTTL; # C7 +NET WC(8) LOC="P75" | IOSTANDARD=LVTTL; # C8 +NET WC(9) LOC="P67" | IOSTANDARD=LVTTL; # C9 +NET WC(10) LOC="P62" | IOSTANDARD=LVTTL; # C10 +NET WC(11) LOC="P59" | IOSTANDARD=LVTTL; # C11 +NET WC(12) LOC="P57" | IOSTANDARD=LVTTL; # C12 +NET WC(13) LOC="P55" | IOSTANDARD=LVTTL; # C13 +NET WC(14) LOC="P50" | IOSTANDARD=LVTTL; # C14 +NET WC(15) LOC="P47" | IOSTANDARD=LVTTL; # C15 + +NET WD(15) LOC="P98" | IOSTANDARD=LVTTL ; # D15 +NET WD(14) LOC="P95" | IOSTANDARD=LVTTL ; # D14 +NET WD(13) LOC="P92" | IOSTANDARD=LVTTL ; # D13 +NET WD(12) LOC="P87" | IOSTANDARD=LVTTL ; # D12 +NET WD(11) LOC="P84" | IOSTANDARD=LVTTL ; # D11 +NET WD(10) LOC="P82" | IOSTANDARD=LVTTL ; # D10 +NET WD(9) LOC="P80" | IOSTANDARD=LVTTL ; # D9 +NET WD(8) LOC="P78" | IOSTANDARD=LVTTL ; # D8 +NET WD(7) LOC="P74" | IOSTANDARD=LVTTL ; # D7 +NET WD(6) LOC="P66" | IOSTANDARD=LVTTL ; # D6 +NET WD(5) LOC="P61" | IOSTANDARD=LVTTL ; # D5 +NET WD(4) LOC="P58" | IOSTANDARD=LVTTL ; # D4 +NET WD(3) LOC="P56" | IOSTANDARD=LVTTL ; # D3 +NET WD(2) LOC="P51" | IOSTANDARD=LVTTL ; # D2 +NET WD(1) LOC="P48" | IOSTANDARD=LVTTL ; # D1 +NET WD(0) LOC="P39" | IOSTANDARD=LVTTL ; # D0 # SRAM @@ -159,6 +219,11 @@ NET "ext_pins_inout<4>" LOC = "P21" | IOSTANDARD=LVTTL | SLEW=FAST ; NET "ext_pins_inout<5>" LOC = "P22" | IOSTANDARD=LVTTL | SLEW=FAST ; NET "ext_pins_inout<6>" LOC = "P23" | IOSTANDARD=LVTTL | SLEW=FAST ; NET "ext_pins_inout<7>" LOC = "P24" | IOSTANDARD=LVTTL | SLEW=FAST ; +# AVR Wishbone bridge +NET "ext_pins_inout<8>" LOC = "P131" | IOSTANDARD=LVTTL | SLEW=FAST ; +NET "ext_pins_inout<9>" LOC = "P134" | IOSTANDARD=LVTTL | SLEW=FAST ; +NET "ext_pins_inout<10>" LOC = "P132" | IOSTANDARD=LVTTL | SLEW=FAST ; +NET "ext_pins_inout<11>" LOC = "P133" | IOSTANDARD=LVTTL | SLEW=FAST ; # Control lines NET "sram_ce" LOC = "P12" | IOSTANDARD=LVTTL | SLEW=FAST; diff --git a/00.Papilio_Schematic_Library/Libraries/ZPUino_1/PSL_Papilio_One_250K/papilio_one.ucf b/00.Papilio_Schematic_Library/Libraries/ZPUino_1/PSL_Papilio_One_250K/papilio_one.ucf index de0908a..33d86a3 100644 --- a/00.Papilio_Schematic_Library/Libraries/ZPUino_1/PSL_Papilio_One_250K/papilio_one.ucf +++ b/00.Papilio_Schematic_Library/Libraries/ZPUino_1/PSL_Papilio_One_250K/papilio_one.ucf @@ -9,7 +9,7 @@ ## ################################################################################## -#NET "*" IOSTANDARD = LVCMOS33; +NET "*" IOSTANDARD = LVCMOS33; # Crystal Clock - use 32MHz onboard oscillator NET "clk" LOC = "P89" | IOSTANDARD = LVCMOS33; @@ -71,11 +71,65 @@ NET "WING_CH5" LOC = "P15" | IOSTANDARD = LVCMOS33 | SLEW = FAST | DRIVE = 8 ; # NET "WING_CH6" LOC = "P16" | IOSTANDARD = LVCMOS33 | SLEW = FAST | DRIVE = 8 ; #C14 NET "WING_CH7" LOC = "P17" | IOSTANDARD = LVCMOS33 | SLEW = FAST | DRIVE = 8 ; #C15 +# Wing1 Column A Bus +NET "WA(0)" LOC = "P18" | IOSTANDARD = LVCMOS33 | SLEW = FAST | DRIVE = 8 ; #A0 +NET "WA(1)" LOC = "P23" | IOSTANDARD = LVCMOS33 | SLEW = FAST | DRIVE = 8 ; #A1 +NET "WA(2)" LOC = "P26" | IOSTANDARD = LVCMOS33 | SLEW = FAST | DRIVE = 8 ; #A2 +NET "WA(3)" LOC = "P33" | IOSTANDARD = LVCMOS33 | SLEW = FAST | DRIVE = 8 ; #A3 +NET "WA(4)" LOC = "P35" | IOSTANDARD = LVCMOS33 | SLEW = FAST | DRIVE = 8 ; #A4 +NET "WA(5)" LOC = "P40" | IOSTANDARD = LVCMOS33 | SLEW = FAST | DRIVE = 8 ; #A5 +NET "WA(6)" LOC = "P53" | IOSTANDARD = LVCMOS33 | SLEW = FAST | DRIVE = 8 ; #A6 +NET "WA(7)" LOC = "P57" | IOSTANDARD = LVCMOS33 | SLEW = FAST | DRIVE = 8 ; #A7 +NET "WA(8)" LOC = "P60" | IOSTANDARD = LVCMOS33 | SLEW = FAST | DRIVE = 8 ; #A8 +NET "WA(9)" LOC = "P62" | IOSTANDARD = LVCMOS33 | SLEW = FAST | DRIVE = 8 ; #A9 +NET "WA(10)" LOC = "P65" | IOSTANDARD = LVCMOS33 | SLEW = FAST | DRIVE = 8 ; #A10 +NET "WA(11)" LOC = "P67" | IOSTANDARD = LVCMOS33 | SLEW = FAST | DRIVE = 8 ; #A11 +NET "WA(12)" LOC = "P70" | IOSTANDARD = LVCMOS33 | SLEW = FAST | DRIVE = 8 ; #A12 +NET "WA(13)" LOC = "P79" | IOSTANDARD = LVCMOS33 | SLEW = FAST | DRIVE = 8 ; #A13 +NET "WA(14)" LOC = "P84" | IOSTANDARD = LVCMOS33 | SLEW = FAST | DRIVE = 8 ; #A14 +NET "WA(15)" LOC = "P86" | IOSTANDARD = LVCMOS33 | SLEW = FAST | DRIVE = 8 ; #A15 + +# Wing1 Column B Bus +NET "WB(0)" LOC = "P85" | IOSTANDARD = LVCMOS33 | SLEW = FAST | DRIVE = 8 ; #B0 +NET "WB(1)" LOC = "P83" | IOSTANDARD = LVCMOS33 | SLEW = FAST | DRIVE = 8 ; #B1 +NET "WB(2)" LOC = "P78" | IOSTANDARD = LVCMOS33 | SLEW = FAST | DRIVE = 8 ; #B2 +NET "WB(3)" LOC = "P71" | IOSTANDARD = LVCMOS33 | SLEW = FAST | DRIVE = 8 ; #B3 +NET "WB(4)" LOC = "P68" | IOSTANDARD = LVCMOS33 | SLEW = FAST | DRIVE = 8 ; #B4 +NET "WB(5)" LOC = "P66" | IOSTANDARD = LVCMOS33 | SLEW = FAST | DRIVE = 8 ; #B5 +NET "WB(6)" LOC = "P63" | IOSTANDARD = LVCMOS33 | SLEW = FAST | DRIVE = 8 ; #B6 +NET "WB(7)" LOC = "P61" | IOSTANDARD = LVCMOS33 | SLEW = FAST | DRIVE = 8 ; #B7 +NET "WB(8)" LOC = "P58" | IOSTANDARD = LVCMOS33 | SLEW = FAST | DRIVE = 8 ; #B8 +NET "WB(9)" LOC = "P54" | IOSTANDARD = LVCMOS33 | SLEW = FAST | DRIVE = 8 ; #B9 +NET "WB(10)" LOC = "P41" | IOSTANDARD = LVCMOS33 | SLEW = FAST | DRIVE = 8 ; #B10 +NET "WB(11)" LOC = "P36" | IOSTANDARD = LVCMOS33 | SLEW = FAST | DRIVE = 8 ; #B11 +NET "WB(12)" LOC = "P34" | IOSTANDARD = LVCMOS33 | SLEW = FAST | DRIVE = 8 ; #B12 +NET "WB(13)" LOC = "P32" | IOSTANDARD = LVCMOS33 | SLEW = FAST | DRIVE = 8 ; #B13 +NET "WB(14)" LOC = "P25" | IOSTANDARD = LVCMOS33 | SLEW = FAST | DRIVE = 8 ; #B14 +NET "WB(15)" LOC = "P22" | IOSTANDARD = LVCMOS33 | SLEW = FAST | DRIVE = 8 ; #B15 + +# Wing2 Column A Bus +NET "WC(0)" LOC = "P91" | IOSTANDARD = LVCMOS33 | SLEW = FAST | DRIVE = 8 ; #C0 +NET "WC(1)" LOC = "P92" | IOSTANDARD = LVCMOS33 | SLEW = FAST | DRIVE = 8 ; #C1 +NET "WC(2)" LOC = "P94" | IOSTANDARD = LVCMOS33 | SLEW = FAST | DRIVE = 8 ; #C2 +NET "WC(3)" LOC = "P95" | IOSTANDARD = LVCMOS33 | SLEW = FAST | DRIVE = 8 ; #C3 +NET "WC(4)" LOC = "P98" | IOSTANDARD = LVCMOS33 | SLEW = FAST | DRIVE = 8 ; #C4 +NET "WC(5)" LOC = "P2" | IOSTANDARD = LVCMOS33 | SLEW = FAST | DRIVE = 8 ; #C5 +NET "WC(6)" LOC = "P3" | IOSTANDARD = LVCMOS33 | SLEW = FAST | DRIVE = 8 ; #C6 +NET "WC(7)" LOC = "P4" | IOSTANDARD = LVCMOS33 | SLEW = FAST | DRIVE = 8 ; #C7 +NET "WC(8)" LOC = "P5" | IOSTANDARD = LVCMOS33 | SLEW = FAST | DRIVE = 8 ; #C8 +NET "WC(9)" LOC = "P9" | IOSTANDARD = LVCMOS33 | SLEW = FAST | DRIVE = 8 ; #C9 +NET "WC(10)" LOC = "P10" | IOSTANDARD = LVCMOS33 | SLEW = FAST | DRIVE = 8 ; #C10 +NET "WC(11)" LOC = "P11" | IOSTANDARD = LVCMOS33 | SLEW = FAST | DRIVE = 8 ; #C11 +NET "WC(12)" LOC = "P12" | IOSTANDARD = LVCMOS33 | SLEW = FAST | DRIVE = 8 ; #C12 +NET "WC(13)" LOC = "P15" | IOSTANDARD = LVCMOS33 | SLEW = FAST | DRIVE = 8 ; #C13 +NET "WC(14)" LOC = "P16" | IOSTANDARD = LVCMOS33 | SLEW = FAST | DRIVE = 8 ; #C14 +NET "WC(15)" LOC = "P17" | IOSTANDARD = LVCMOS33 | SLEW = FAST | DRIVE = 8 ; #C15 + # RS232 -NET "rxd" LOC = "P88" | IOSTANDARD = LVTTL ; -NET "ext_pins_in(2)" LOC = "P88" | IOSTANDARD = LVTTL ; -NET "txd" LOC = "P90" | IOSTANDARD = LVTTL | DRIVE = 8 | SLEW = FAST ; -NET "ext_pins_out(3)" LOC = "P90" | IOSTANDARD = LVTTL | DRIVE = 8 | SLEW = FAST ; +NET "rxd" LOC = "P88" | IOSTANDARD = LVCMOS33 ; +NET "ext_pins_in(2)" LOC = "P88" | IOSTANDARD = LVCMOS33 ; +NET "txd" LOC = "P90" | IOSTANDARD = LVCMOS33 | DRIVE = 8 | SLEW = FAST ; +NET "ext_pins_out(3)" LOC = "P90" | IOSTANDARD = LVCMOS33 | DRIVE = 8 | SLEW = FAST ; # SPI flash NET "SPI_CS" LOC = "P24" | IOSTANDARD = LVCMOS33 | SLEW = SLOW | DRIVE = 8; diff --git a/00.Papilio_Schematic_Library/Libraries/ZPUino_1/PSL_Papilio_One_500K/papilio_one.ucf b/00.Papilio_Schematic_Library/Libraries/ZPUino_1/PSL_Papilio_One_500K/papilio_one.ucf index 4f9b3eb..33d86a3 100644 --- a/00.Papilio_Schematic_Library/Libraries/ZPUino_1/PSL_Papilio_One_500K/papilio_one.ucf +++ b/00.Papilio_Schematic_Library/Libraries/ZPUino_1/PSL_Papilio_One_500K/papilio_one.ucf @@ -71,6 +71,60 @@ NET "WING_CH5" LOC = "P15" | IOSTANDARD = LVCMOS33 | SLEW = FAST | DRIVE = 8 ; # NET "WING_CH6" LOC = "P16" | IOSTANDARD = LVCMOS33 | SLEW = FAST | DRIVE = 8 ; #C14 NET "WING_CH7" LOC = "P17" | IOSTANDARD = LVCMOS33 | SLEW = FAST | DRIVE = 8 ; #C15 +# Wing1 Column A Bus +NET "WA(0)" LOC = "P18" | IOSTANDARD = LVCMOS33 | SLEW = FAST | DRIVE = 8 ; #A0 +NET "WA(1)" LOC = "P23" | IOSTANDARD = LVCMOS33 | SLEW = FAST | DRIVE = 8 ; #A1 +NET "WA(2)" LOC = "P26" | IOSTANDARD = LVCMOS33 | SLEW = FAST | DRIVE = 8 ; #A2 +NET "WA(3)" LOC = "P33" | IOSTANDARD = LVCMOS33 | SLEW = FAST | DRIVE = 8 ; #A3 +NET "WA(4)" LOC = "P35" | IOSTANDARD = LVCMOS33 | SLEW = FAST | DRIVE = 8 ; #A4 +NET "WA(5)" LOC = "P40" | IOSTANDARD = LVCMOS33 | SLEW = FAST | DRIVE = 8 ; #A5 +NET "WA(6)" LOC = "P53" | IOSTANDARD = LVCMOS33 | SLEW = FAST | DRIVE = 8 ; #A6 +NET "WA(7)" LOC = "P57" | IOSTANDARD = LVCMOS33 | SLEW = FAST | DRIVE = 8 ; #A7 +NET "WA(8)" LOC = "P60" | IOSTANDARD = LVCMOS33 | SLEW = FAST | DRIVE = 8 ; #A8 +NET "WA(9)" LOC = "P62" | IOSTANDARD = LVCMOS33 | SLEW = FAST | DRIVE = 8 ; #A9 +NET "WA(10)" LOC = "P65" | IOSTANDARD = LVCMOS33 | SLEW = FAST | DRIVE = 8 ; #A10 +NET "WA(11)" LOC = "P67" | IOSTANDARD = LVCMOS33 | SLEW = FAST | DRIVE = 8 ; #A11 +NET "WA(12)" LOC = "P70" | IOSTANDARD = LVCMOS33 | SLEW = FAST | DRIVE = 8 ; #A12 +NET "WA(13)" LOC = "P79" | IOSTANDARD = LVCMOS33 | SLEW = FAST | DRIVE = 8 ; #A13 +NET "WA(14)" LOC = "P84" | IOSTANDARD = LVCMOS33 | SLEW = FAST | DRIVE = 8 ; #A14 +NET "WA(15)" LOC = "P86" | IOSTANDARD = LVCMOS33 | SLEW = FAST | DRIVE = 8 ; #A15 + +# Wing1 Column B Bus +NET "WB(0)" LOC = "P85" | IOSTANDARD = LVCMOS33 | SLEW = FAST | DRIVE = 8 ; #B0 +NET "WB(1)" LOC = "P83" | IOSTANDARD = LVCMOS33 | SLEW = FAST | DRIVE = 8 ; #B1 +NET "WB(2)" LOC = "P78" | IOSTANDARD = LVCMOS33 | SLEW = FAST | DRIVE = 8 ; #B2 +NET "WB(3)" LOC = "P71" | IOSTANDARD = LVCMOS33 | SLEW = FAST | DRIVE = 8 ; #B3 +NET "WB(4)" LOC = "P68" | IOSTANDARD = LVCMOS33 | SLEW = FAST | DRIVE = 8 ; #B4 +NET "WB(5)" LOC = "P66" | IOSTANDARD = LVCMOS33 | SLEW = FAST | DRIVE = 8 ; #B5 +NET "WB(6)" LOC = "P63" | IOSTANDARD = LVCMOS33 | SLEW = FAST | DRIVE = 8 ; #B6 +NET "WB(7)" LOC = "P61" | IOSTANDARD = LVCMOS33 | SLEW = FAST | DRIVE = 8 ; #B7 +NET "WB(8)" LOC = "P58" | IOSTANDARD = LVCMOS33 | SLEW = FAST | DRIVE = 8 ; #B8 +NET "WB(9)" LOC = "P54" | IOSTANDARD = LVCMOS33 | SLEW = FAST | DRIVE = 8 ; #B9 +NET "WB(10)" LOC = "P41" | IOSTANDARD = LVCMOS33 | SLEW = FAST | DRIVE = 8 ; #B10 +NET "WB(11)" LOC = "P36" | IOSTANDARD = LVCMOS33 | SLEW = FAST | DRIVE = 8 ; #B11 +NET "WB(12)" LOC = "P34" | IOSTANDARD = LVCMOS33 | SLEW = FAST | DRIVE = 8 ; #B12 +NET "WB(13)" LOC = "P32" | IOSTANDARD = LVCMOS33 | SLEW = FAST | DRIVE = 8 ; #B13 +NET "WB(14)" LOC = "P25" | IOSTANDARD = LVCMOS33 | SLEW = FAST | DRIVE = 8 ; #B14 +NET "WB(15)" LOC = "P22" | IOSTANDARD = LVCMOS33 | SLEW = FAST | DRIVE = 8 ; #B15 + +# Wing2 Column A Bus +NET "WC(0)" LOC = "P91" | IOSTANDARD = LVCMOS33 | SLEW = FAST | DRIVE = 8 ; #C0 +NET "WC(1)" LOC = "P92" | IOSTANDARD = LVCMOS33 | SLEW = FAST | DRIVE = 8 ; #C1 +NET "WC(2)" LOC = "P94" | IOSTANDARD = LVCMOS33 | SLEW = FAST | DRIVE = 8 ; #C2 +NET "WC(3)" LOC = "P95" | IOSTANDARD = LVCMOS33 | SLEW = FAST | DRIVE = 8 ; #C3 +NET "WC(4)" LOC = "P98" | IOSTANDARD = LVCMOS33 | SLEW = FAST | DRIVE = 8 ; #C4 +NET "WC(5)" LOC = "P2" | IOSTANDARD = LVCMOS33 | SLEW = FAST | DRIVE = 8 ; #C5 +NET "WC(6)" LOC = "P3" | IOSTANDARD = LVCMOS33 | SLEW = FAST | DRIVE = 8 ; #C6 +NET "WC(7)" LOC = "P4" | IOSTANDARD = LVCMOS33 | SLEW = FAST | DRIVE = 8 ; #C7 +NET "WC(8)" LOC = "P5" | IOSTANDARD = LVCMOS33 | SLEW = FAST | DRIVE = 8 ; #C8 +NET "WC(9)" LOC = "P9" | IOSTANDARD = LVCMOS33 | SLEW = FAST | DRIVE = 8 ; #C9 +NET "WC(10)" LOC = "P10" | IOSTANDARD = LVCMOS33 | SLEW = FAST | DRIVE = 8 ; #C10 +NET "WC(11)" LOC = "P11" | IOSTANDARD = LVCMOS33 | SLEW = FAST | DRIVE = 8 ; #C11 +NET "WC(12)" LOC = "P12" | IOSTANDARD = LVCMOS33 | SLEW = FAST | DRIVE = 8 ; #C12 +NET "WC(13)" LOC = "P15" | IOSTANDARD = LVCMOS33 | SLEW = FAST | DRIVE = 8 ; #C13 +NET "WC(14)" LOC = "P16" | IOSTANDARD = LVCMOS33 | SLEW = FAST | DRIVE = 8 ; #C14 +NET "WC(15)" LOC = "P17" | IOSTANDARD = LVCMOS33 | SLEW = FAST | DRIVE = 8 ; #C15 + # RS232 NET "rxd" LOC = "P88" | IOSTANDARD = LVCMOS33 ; NET "ext_pins_in(2)" LOC = "P88" | IOSTANDARD = LVCMOS33 ; diff --git a/00.Papilio_Schematic_Library/Libraries/ZPUino_1/PSL_Papilio_Pro_LX9/papilio_pro.ucf b/00.Papilio_Schematic_Library/Libraries/ZPUino_1/PSL_Papilio_Pro_LX9/papilio_pro.ucf index 4407105..c790453 100644 --- a/00.Papilio_Schematic_Library/Libraries/ZPUino_1/PSL_Papilio_Pro_LX9/papilio_pro.ucf +++ b/00.Papilio_Schematic_Library/Libraries/ZPUino_1/PSL_Papilio_Pro_LX9/papilio_pro.ucf @@ -36,6 +36,8 @@ NET TXD LOC="P105" | IOSTANDARD=LVTTL | DRIVE=8 | SLEW=FAST; NET ext_pins_out(3) LOC="P105" | IOSTANDARD=LVTTL | DRIVE=8 | SLEW=FAST; # TX NET RXD LOC="P101" | IOSTANDARD=LVTTL | DRIVE=8 | SLEW=FAST; # RX NET ext_pins_in(2) LOC="P101" | IOSTANDARD=LVTTL | DRIVE=8 | SLEW=FAST; # RX + +#Individual Wing Pins NET WING_AL0 LOC="P48" | IOSTANDARD=LVTTL | SLEW = FAST | DRIVE = 8; # A0 NET WING_AL1 LOC="P51" | IOSTANDARD=LVTTL | SLEW = FAST | DRIVE = 8; # A1 NET WING_AL2 LOC="P56" | IOSTANDARD=LVTTL | SLEW = FAST | DRIVE = 8; # A2 @@ -85,6 +87,58 @@ NET WING_CH5 LOC="P132" | IOSTANDARD=LVTTL | SLEW = FAST | DRIVE = 8; NET WING_CH6 LOC="P133" | IOSTANDARD=LVTTL | SLEW = FAST | DRIVE = 8; # C14 NET WING_CH7 LOC="P134" | IOSTANDARD=LVTTL | SLEW = FAST | DRIVE = 8; # C15 +#Wing Pins in bus +NET WA(0) LOC="P48" | IOSTANDARD=LVTTL | SLEW = FAST | DRIVE = 8; # A0 +NET WA(1) LOC="P51" | IOSTANDARD=LVTTL | SLEW = FAST | DRIVE = 8; # A1 +NET WA(2) LOC="P56" | IOSTANDARD=LVTTL | SLEW = FAST | DRIVE = 8; # A2 +NET WA(3) LOC="P58" | IOSTANDARD=LVTTL | SLEW = FAST | DRIVE = 8; # A3 +NET WA(4) LOC="P61" | IOSTANDARD=LVTTL | SLEW = FAST | DRIVE = 8; # A4 +NET WA(5) LOC="P66" | IOSTANDARD=LVTTL | SLEW = FAST | DRIVE = 8; # A5 +NET WA(6) LOC="P67" | IOSTANDARD=LVTTL | SLEW = FAST | DRIVE = 8; # A6 +NET WA(7) LOC="P75" | IOSTANDARD=LVTTL | SLEW = FAST | DRIVE = 8; # A7 +NET WA(8) LOC="P79" | IOSTANDARD=LVTTL | SLEW = FAST | DRIVE = 8; # A8 +NET WA(9) LOC="P81" | IOSTANDARD=LVTTL | SLEW = FAST | DRIVE = 8; # A9 +NET WA(10) LOC="P83" | IOSTANDARD=LVTTL | SLEW = FAST | DRIVE = 8; # A10 +NET WA(11) LOC="P85" | IOSTANDARD=LVTTL | SLEW = FAST | DRIVE = 8; # A11 +NET WA(12) LOC="P88" | IOSTANDARD=LVTTL | SLEW = FAST | DRIVE = 8; # A12 +NET WA(13) LOC="P93" | IOSTANDARD=LVTTL | SLEW = FAST | DRIVE = 8; # A13 +NET WA(14) LOC="P98" | IOSTANDARD=LVTTL | SLEW = FAST | DRIVE = 8; # A14 +NET WA(15) LOC="P100" | IOSTANDARD=LVTTL | SLEW = FAST | DRIVE = 8; # A15 + +NET WB(0) LOC="P99" | IOSTANDARD=LVTTL | SLEW = FAST | DRIVE = 8; # B0 +NET WB(1) LOC="P97" | IOSTANDARD=LVTTL | SLEW = FAST | DRIVE = 8; # B1 +NET WB(2) LOC="P92" | IOSTANDARD=LVTTL | SLEW = FAST | DRIVE = 8; # B2 +NET WB(3) LOC="P87" | IOSTANDARD=LVTTL | SLEW = FAST | DRIVE = 8; # B3 +NET WB(4) LOC="P84" | IOSTANDARD=LVTTL | SLEW = FAST | DRIVE = 8; # B4 +NET WB(5) LOC="P82" | IOSTANDARD=LVTTL | SLEW = FAST | DRIVE = 8; # B5 +NET WB(6) LOC="P80" | IOSTANDARD=LVTTL | SLEW = FAST | DRIVE = 8; # B6 +NET WB(7) LOC="P78" | IOSTANDARD=LVTTL | SLEW = FAST | DRIVE = 8; # B7 +NET WB(8) LOC="P74" | IOSTANDARD=LVTTL | SLEW = FAST | DRIVE = 8; # B8 +NET WB(9) LOC="P95" | IOSTANDARD=LVTTL | SLEW = FAST | DRIVE = 8; # B9 +NET WB(10) LOC="P62" | IOSTANDARD=LVTTL | SLEW = FAST | DRIVE = 8; # B10 +NET WB(11) LOC="P59" | IOSTANDARD=LVTTL | SLEW = FAST | DRIVE = 8; # B11 +NET WB(12) LOC="P57" | IOSTANDARD=LVTTL | SLEW = FAST | DRIVE = 8; # B12 +NET WB(13) LOC="P55" | IOSTANDARD=LVTTL | SLEW = FAST | DRIVE = 8; # B13 +NET WB(14) LOC="P50" | IOSTANDARD=LVTTL | SLEW = FAST | DRIVE = 8; # B14 +NET WB(15) LOC="P47" | IOSTANDARD=LVTTL | SLEW = FAST | DRIVE = 8; # B15 + +NET WC(0) LOC="P114" | IOSTANDARD=LVTTL | SLEW = FAST | DRIVE = 8; # C0 +NET WC(1) LOC="P115" | IOSTANDARD=LVTTL | SLEW = FAST | DRIVE = 8; # C1 +NET WC(2) LOC="P116" | IOSTANDARD=LVTTL | SLEW = FAST | DRIVE = 8; # C2 +NET WC(3) LOC="P117" | IOSTANDARD=LVTTL | SLEW = FAST | DRIVE = 8; # C3 +NET WC(4) LOC="P118" | IOSTANDARD=LVTTL | SLEW = FAST | DRIVE = 8; # C4 +NET WC(5) LOC="P119" | IOSTANDARD=LVTTL | SLEW = FAST | DRIVE = 8; # C5 +NET WC(6) LOC="P120" | IOSTANDARD=LVTTL | SLEW = FAST | DRIVE = 8; # C6 +NET WC(7) LOC="P121" | IOSTANDARD=LVTTL | SLEW = FAST | DRIVE = 8; # C7 +NET WC(8) LOC="P123" | IOSTANDARD=LVTTL | SLEW = FAST | DRIVE = 8; # C8 +NET WC(9) LOC="P124" | IOSTANDARD=LVTTL | SLEW = FAST | DRIVE = 8; # C9 +NET WC(10) LOC="P126" | IOSTANDARD=LVTTL | SLEW = FAST | DRIVE = 8; # C10 +NET WC(11) LOC="P127" | IOSTANDARD=LVTTL | SLEW = FAST | DRIVE = 8; # C11 +NET WC(12) LOC="P131" | IOSTANDARD=LVTTL | SLEW = FAST | DRIVE = 8; # C12 +NET WC(13) LOC="P132" | IOSTANDARD=LVTTL | SLEW = FAST | DRIVE = 8; # C13 +NET WC(14) LOC="P133" | IOSTANDARD=LVTTL | SLEW = FAST | DRIVE = 8; # C14 +NET WC(15) LOC="P134" | IOSTANDARD=LVTTL | SLEW = FAST | DRIVE = 8; # C15 + NET DRAM_ADDR(0) LOC="P140" | IOSTANDARD=LVTTL | SLEW=FAST; # ADDR0 NET DRAM_ADDR(1) LOC="P139" | IOSTANDARD=LVTTL | SLEW=FAST; # ADDR1 NET DRAM_ADDR(2) LOC="P138" | IOSTANDARD=LVTTL | SLEW=FAST; # ADDR2 diff --git a/AVR_to_ZPUino_Communications/AVR_to_ZPUino_Communications.ino b/AVR_to_ZPUino_Communications/AVR_to_ZPUino_Communications.ino new file mode 100644 index 0000000..717a8d2 --- /dev/null +++ b/AVR_to_ZPUino_Communications/AVR_to_ZPUino_Communications.ino @@ -0,0 +1,41 @@ +/* + Gadget Factory - AVR to ZPUino Communications + An example of how to communicate between the AVR microcontroller and the ZPUino Soft Processor over the Wishbone bus. + To learn more about using DesignLab please visit http://learn.gadgetfactory.net + + Tutorials: + http://gadgetfactory.net/learn/2015/05/25/papilio-duo-avr-to-zpuino-communication-over-wishbone/ + + Related library documentation: + + Hardware: + + Special Notes: + + created 2014 + by Jack Gassett + http://www.gadgetfactory.net + + This example code is in the public domain. + */ +#include "AVR_Wishbone_Bridge.h" +#include "SPI.h" + +void setup() { + // put your setup code here, to run once: + Serial.begin(9600); + #if defined(ARDUINO_ARCH_AVR) //Only the AVR needs to start SPI for the AVR to Wishbone bridge. The ZPUino can write directly to Wishbone peripherals. + SPI.begin(); + #endif + +} + +void loop() { + for(int i=0;i<256;i++) { + #if defined(ARDUINO_ARCH_AVR) //In this example only the AVR is going to write to the Wishbone peripheral. + REGISTER(IO_SLOT(9),0) = i; + #endif + Serial.println(REGISTER(IO_SLOT(9),0)); //Both the AVR and ZPUino will read from the shared Wishbone peripheral. + delay(20); + } +} diff --git a/Gameduino/4.Demo/asteroids/circuit/DUO_LX9/Papilio_DUO_LX9.ut b/AVR_to_ZPUino_Communications/circuit/DUO_LX9/Papilio_DUO_LX9.ut similarity index 100% rename from Gameduino/4.Demo/asteroids/circuit/DUO_LX9/Papilio_DUO_LX9.ut rename to AVR_to_ZPUino_Communications/circuit/DUO_LX9/Papilio_DUO_LX9.ut diff --git a/AVR_to_ZPUino_Communications/circuit/DUO_LX9/papilio_duo_lx9.bit b/AVR_to_ZPUino_Communications/circuit/DUO_LX9/papilio_duo_lx9.bit new file mode 100644 index 0000000..1af249e Binary files /dev/null and b/AVR_to_ZPUino_Communications/circuit/DUO_LX9/papilio_duo_lx9.bit differ diff --git a/WiiChuck/circuit/PSL_Papilio_DUO_LX9.xise b/AVR_to_ZPUino_Communications/circuit/PSL_Papilio_DUO_LX9.xise similarity index 96% rename from WiiChuck/circuit/PSL_Papilio_DUO_LX9.xise rename to AVR_to_ZPUino_Communications/circuit/PSL_Papilio_DUO_LX9.xise index 3b551f7..0ceffee 100644 --- a/WiiChuck/circuit/PSL_Papilio_DUO_LX9.xise +++ b/AVR_to_ZPUino_Communications/circuit/PSL_Papilio_DUO_LX9.xise @@ -310,6 +310,11 @@ + + + + + @@ -404,7 +409,7 @@ - + @@ -424,7 +429,7 @@ - + @@ -437,6 +442,44 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -498,7 +541,7 @@ - + @@ -513,7 +556,7 @@ - + @@ -526,11 +569,11 @@ - + - + @@ -576,11 +619,6 @@ - - - - - @@ -593,7 +631,7 @@ - + @@ -628,17 +666,17 @@ - + - + - + @@ -654,11 +692,6 @@ - - - - - @@ -719,6 +752,11 @@ + + + + + @@ -736,7 +774,7 @@ - + @@ -756,15 +794,15 @@ - + - + - + @@ -779,7 +817,7 @@ - + @@ -1130,9 +1168,7 @@ - - - + diff --git a/libraries/AVR_Wishbone_Bridge/circuit/Papilio_DUO_LX9.sch b/AVR_to_ZPUino_Communications/circuit/Papilio_DUO_LX9.sch similarity index 71% rename from libraries/AVR_Wishbone_Bridge/circuit/Papilio_DUO_LX9.sch rename to AVR_to_ZPUino_Communications/circuit/Papilio_DUO_LX9.sch index cfcddb3..533ed93 100644 --- a/libraries/AVR_Wishbone_Bridge/circuit/Papilio_DUO_LX9.sch +++ b/AVR_to_ZPUino_Communications/circuit/Papilio_DUO_LX9.sch @@ -6,24 +6,6 @@ - - - - - - - - - - - - - - - - - - @@ -85,18 +67,29 @@ - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + @@ -144,6 +137,14 @@ + + + + + + + + 2014-11-10T23:31:50 @@ -266,8 +267,8 @@ - - 2015-1-2T17:35:23 + + 2015-2-12T19:27:37 @@ -275,87 +276,42 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 2000-1-1T10:10:10 - - - - - - - - - - - - - - - - - - - - - - - 2000-1-1T10:10:10 - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 2000-1-1T10:10:10 @@ -366,33 +322,88 @@ - - 2015-1-2T17:39:28 - - - - - + + 2015-3-31T22:40:54 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - + + 2000-1-1T10:10:10 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -429,12 +440,12 @@ - - - - - - + + + + + + @@ -491,8 +502,8 @@ - - + + @@ -510,136 +521,37 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + - - - - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + @@ -658,9 +570,6 @@ - - - @@ -838,7 +747,6 @@ - @@ -892,17 +800,6 @@ - - - - - - - - - - - Replace DUO_SW1 with a Pulldown if you want the ATmega32U4 chip to run when this circuit is loaded. @@ -916,9 +813,132 @@ Papilio DUO Reset - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Gameduino/4.Demo/asteroids/circuit/build_all.bat b/AVR_to_ZPUino_Communications/circuit/build_all.bat similarity index 100% rename from Gameduino/4.Demo/asteroids/circuit/build_all.bat rename to AVR_to_ZPUino_Communications/circuit/build_all.bat diff --git a/Gameduino/4.Demo/asteroids/circuit/clean.bat b/AVR_to_ZPUino_Communications/circuit/clean.bat similarity index 100% rename from Gameduino/4.Demo/asteroids/circuit/clean.bat rename to AVR_to_ZPUino_Communications/circuit/clean.bat diff --git a/AVR_to_ZPUino_Communications/circuit/schematic_papilio_duo.pdf b/AVR_to_ZPUino_Communications/circuit/schematic_papilio_duo.pdf new file mode 100644 index 0000000..b180d19 Binary files /dev/null and b/AVR_to_ZPUino_Communications/circuit/schematic_papilio_duo.pdf differ diff --git a/Audio_RetroCade_Synth/Audio_RetroCade_Synth.ino b/Audio_RetroCade_Synth/Audio_RetroCade_Synth.ino index 53eba2d..7c5b9f3 100644 --- a/Audio_RetroCade_Synth/Audio_RetroCade_Synth.ino +++ b/Audio_RetroCade_Synth/Audio_RetroCade_Synth.ino @@ -11,10 +11,15 @@ sketchdir://Dashboards/FlowStone/RetroCade_Synth_DashBoard.exe Click on the link below to load the latest production RetroCade bit file with all of the sample audio files - sketchdir://RetroCade-1.1-zpuino-1.0-PapilioPro-S6LX9-RetroCade-1.1.bit + sketchdir://circuit/RetroCade-1.3-zpuino-2.0-PapilioPro-S6LX9-RetroCade-1.3.bit + sketchdir://circuit/RetroCade-1.3-lcd-contrast-fix-zpuino-2.0-PapilioPro-S6LX9-RetroCade-1.3.bit //Use this is you have problems with contrast on your LCD + + To use the older 1.1 version of the firmware (You will not be able to upload this sketch with the 1.0 version of ZPUino) + sketchdir://circuit/RetroCade-1.1-zpuino-1.0-PapilioPro-S6LX9-RetroCade-1.1.bit NOTE: If you want all of the production samples available when you load this sketch to the RetroCade first load the production bit file to your board and then hold down the left shift key before uploading. - This will cause the program to be loaded directly to SDRAM and will not wipe out the samples in SPI Flash. + This will cause the program to be loaded directly to SDRAM and will not wipe out the samples in SPI Flash. Or, hit CTRL-K to open the sketch directory and rename smallfs-production to smallfs. + It will take a long time to upload all of the music files every time you make a code change. The current smallfs folder has very small files in it to speed up code changes. created 2014 by Jack Gassett @@ -24,6 +29,9 @@ License: GPL ChangeLog: +1/4/2017 Version 1.3.1 + -Fix for some LCDs that have contrast issues. + 4/21/2015 Version 1.3 -Updated MIDI library to better handle NoteOffs. -Moved to ZPUino 2.0 with a DesignLab schematic. @@ -346,10 +354,11 @@ void HandleNoteOn(byte channel, byte pitch, byte velocity) { Serial.print("Channel Received: "); Serial.println(channel); #endif - lastpitch[channel-1]=pitch; + byte activeChannel = retrocade.getActiveChannel(); if ( activeChannel != 0 ) channel = activeChannel; + lastpitch[channel-1]=pitch; switch (channel){ case 1: retrocade.sid.V1.setNote(pitch, 1); diff --git a/Audio_RetroCade_Synth/RetroCade.cpp b/Audio_RetroCade_Synth/RetroCade.cpp index 5eeb034..81d1585 100644 --- a/Audio_RetroCade_Synth/RetroCade.cpp +++ b/Audio_RetroCade_Synth/RetroCade.cpp @@ -89,8 +89,11 @@ void RETROCADE::setupMegaWing() pinMode(JRIGHT, INPUT); //Setup LCD - pinMode(WING_C_14, OUTPUT); //Set contrast to GND - digitalWrite(WING_C_14, LOW); //Set contrast to GND +// pinMode(WING_C_14, OUTPUT); //Set contrast to GND SOME LCD's need this setting and some need to be set as an input. +// digitalWrite(WING_C_14, LOW); //Set contrast to GND + + pinMode(WING_C_14, INPUT); //Set contrast to GND + // set up the LCD's number of columns and rows: lcd.begin(16,2); // clear the LCD screen: diff --git a/Audio_RetroCade_Synth/circuit/PSL_Papilio_Pro_LX9.xise b/Audio_RetroCade_Synth/circuit/PSL_Papilio_Pro_LX9.xise index 6370f4c..65e2947 100644 --- a/Audio_RetroCade_Synth/circuit/PSL_Papilio_Pro_LX9.xise +++ b/Audio_RetroCade_Synth/circuit/PSL_Papilio_Pro_LX9.xise @@ -9,792 +9,36 @@ - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - + + + - - - + + + - - - + + + - - + + - + - + - + @@ -1159,14 +403,6 @@ - - - - - - - - diff --git a/Audio_RetroCade_Synth/circuit/RetroCade-1.3-lcd-contrast-fix-zpuino-2.0-PapilioPro-S6LX9-RetroCade-1.3.bit b/Audio_RetroCade_Synth/circuit/RetroCade-1.3-lcd-contrast-fix-zpuino-2.0-PapilioPro-S6LX9-RetroCade-1.3.bit new file mode 100644 index 0000000..ecc2ec0 Binary files /dev/null and b/Audio_RetroCade_Synth/circuit/RetroCade-1.3-lcd-contrast-fix-zpuino-2.0-PapilioPro-S6LX9-RetroCade-1.3.bit differ diff --git a/Audio_RetroCade_Synth/circuit/RetroCade-1.3-zpuino-2.0-PapilioPro-S6LX9-RetroCade-1.3.bit b/Audio_RetroCade_Synth/circuit/RetroCade-1.3-zpuino-2.0-PapilioPro-S6LX9-RetroCade-1.3.bit new file mode 100644 index 0000000..ccb28ff Binary files /dev/null and b/Audio_RetroCade_Synth/circuit/RetroCade-1.3-zpuino-2.0-PapilioPro-S6LX9-RetroCade-1.3.bit differ diff --git a/Audio_RetroCade_Synth/libraries.h b/Audio_RetroCade_Synth/libraries.h new file mode 100644 index 0000000..2f13c02 --- /dev/null +++ b/Audio_RetroCade_Synth/libraries.h @@ -0,0 +1,9 @@ +There are several libraries used by the RetroCade code that you may want to look at and modify. The libraries used are listed here to make finding everything easier: + +(DesignLabHome)\libraries\SID +(DesignLabHome)\libraries\SIDPlayer +(DesignLabHome)\libraries\YM2149 +(DesignLabHome)\libraries\YMPlayer +(DesignLabHome)\libraries\modplayer + + diff --git a/Audio_RetroCade_Synth/smallfs-production/hihat.mod b/Audio_RetroCade_Synth/smallfs-production/hihat.mod new file mode 100644 index 0000000..200ff57 Binary files /dev/null and b/Audio_RetroCade_Synth/smallfs-production/hihat.mod differ diff --git a/Audio_RetroCade_Synth/smallfs-production/kick.mod b/Audio_RetroCade_Synth/smallfs-production/kick.mod new file mode 100644 index 0000000..50bb8b1 Binary files /dev/null and b/Audio_RetroCade_Synth/smallfs-production/kick.mod differ diff --git a/Audio_RetroCade_Synth/smallfs-production/track1.mod b/Audio_RetroCade_Synth/smallfs-production/track1.mod new file mode 100644 index 0000000..f5e75ea Binary files /dev/null and b/Audio_RetroCade_Synth/smallfs-production/track1.mod differ diff --git a/Audio_RetroCade_Synth/smallfs-production/track1.sid b/Audio_RetroCade_Synth/smallfs-production/track1.sid new file mode 100644 index 0000000..dc1fe7b Binary files /dev/null and b/Audio_RetroCade_Synth/smallfs-production/track1.sid differ diff --git a/Audio_RetroCade_Synth/smallfs-production/track1.ymd b/Audio_RetroCade_Synth/smallfs-production/track1.ymd new file mode 100644 index 0000000..b2f3ce8 Binary files /dev/null and b/Audio_RetroCade_Synth/smallfs-production/track1.ymd differ diff --git a/Audio_RetroCade_Synth/smallfs-production/track2.mod b/Audio_RetroCade_Synth/smallfs-production/track2.mod new file mode 100644 index 0000000..fb4cd9e Binary files /dev/null and b/Audio_RetroCade_Synth/smallfs-production/track2.mod differ diff --git a/Audio_RetroCade_Synth/smallfs-production/track2.sid b/Audio_RetroCade_Synth/smallfs-production/track2.sid new file mode 100644 index 0000000..dfab551 Binary files /dev/null and b/Audio_RetroCade_Synth/smallfs-production/track2.sid differ diff --git a/Audio_RetroCade_Synth/smallfs-production/track2.ymd b/Audio_RetroCade_Synth/smallfs-production/track2.ymd new file mode 100644 index 0000000..cd0ade0 Binary files /dev/null and b/Audio_RetroCade_Synth/smallfs-production/track2.ymd differ diff --git a/Audio_RetroCade_Synth/smallfs-production/track3.mod b/Audio_RetroCade_Synth/smallfs-production/track3.mod new file mode 100644 index 0000000..92c17e6 Binary files /dev/null and b/Audio_RetroCade_Synth/smallfs-production/track3.mod differ diff --git a/Audio_RetroCade_Synth/smallfs-production/track3.sid b/Audio_RetroCade_Synth/smallfs-production/track3.sid new file mode 100644 index 0000000..ffd2f62 Binary files /dev/null and b/Audio_RetroCade_Synth/smallfs-production/track3.sid differ diff --git a/Audio_RetroCade_Synth/smallfs-production/track3.ymd b/Audio_RetroCade_Synth/smallfs-production/track3.ymd new file mode 100644 index 0000000..50d9eed Binary files /dev/null and b/Audio_RetroCade_Synth/smallfs-production/track3.ymd differ diff --git a/Audio_RetroCade_Synth/smallfs-production/track4.mod b/Audio_RetroCade_Synth/smallfs-production/track4.mod new file mode 100644 index 0000000..dc30071 Binary files /dev/null and b/Audio_RetroCade_Synth/smallfs-production/track4.mod differ diff --git a/Audio_RetroCade_Synth/smallfs-production/track4.sid b/Audio_RetroCade_Synth/smallfs-production/track4.sid new file mode 100644 index 0000000..c266037 Binary files /dev/null and b/Audio_RetroCade_Synth/smallfs-production/track4.sid differ diff --git a/Audio_RetroCade_Synth/smallfs-production/track4.ymd b/Audio_RetroCade_Synth/smallfs-production/track4.ymd new file mode 100644 index 0000000..7ccd370 Binary files /dev/null and b/Audio_RetroCade_Synth/smallfs-production/track4.ymd differ diff --git a/Audio_RetroCade_Synth/smallfs-production/track5.mod b/Audio_RetroCade_Synth/smallfs-production/track5.mod new file mode 100644 index 0000000..ecfe0b9 Binary files /dev/null and b/Audio_RetroCade_Synth/smallfs-production/track5.mod differ diff --git a/Audio_RetroCade_Synth/smallfs-production/track5.sid b/Audio_RetroCade_Synth/smallfs-production/track5.sid new file mode 100644 index 0000000..50921a2 Binary files /dev/null and b/Audio_RetroCade_Synth/smallfs-production/track5.sid differ diff --git a/Audio_RetroCade_Synth/smallfs-production/track5.ymd b/Audio_RetroCade_Synth/smallfs-production/track5.ymd new file mode 100644 index 0000000..e838e53 Binary files /dev/null and b/Audio_RetroCade_Synth/smallfs-production/track5.ymd differ diff --git a/Audio_RetroCade_Synth/smallfs-production/track6.mod b/Audio_RetroCade_Synth/smallfs-production/track6.mod new file mode 100644 index 0000000..ad4a1d3 Binary files /dev/null and b/Audio_RetroCade_Synth/smallfs-production/track6.mod differ diff --git a/Audio_RetroCade_Synth/smallfs-production/track6.sid b/Audio_RetroCade_Synth/smallfs-production/track6.sid new file mode 100644 index 0000000..05b52bf Binary files /dev/null and b/Audio_RetroCade_Synth/smallfs-production/track6.sid differ diff --git a/Audio_RetroCade_Synth/smallfs-production/track6.ymd b/Audio_RetroCade_Synth/smallfs-production/track6.ymd new file mode 100644 index 0000000..e7d07e8 Binary files /dev/null and b/Audio_RetroCade_Synth/smallfs-production/track6.ymd differ diff --git a/Audio_RetroCade_Synth/smallfs-production/track7.mod b/Audio_RetroCade_Synth/smallfs-production/track7.mod new file mode 100644 index 0000000..5e52008 Binary files /dev/null and b/Audio_RetroCade_Synth/smallfs-production/track7.mod differ diff --git a/Audio_RetroCade_Synth/smallfs-production/track7.sid b/Audio_RetroCade_Synth/smallfs-production/track7.sid new file mode 100644 index 0000000..0f3961c Binary files /dev/null and b/Audio_RetroCade_Synth/smallfs-production/track7.sid differ diff --git a/Audio_RetroCade_Synth/smallfs-production/track7.ymd b/Audio_RetroCade_Synth/smallfs-production/track7.ymd new file mode 100644 index 0000000..05455b9 Binary files /dev/null and b/Audio_RetroCade_Synth/smallfs-production/track7.ymd differ diff --git a/Audio_RetroCade_Synth/smallfs-production/track8.mod b/Audio_RetroCade_Synth/smallfs-production/track8.mod new file mode 100644 index 0000000..f3d54cd Binary files /dev/null and b/Audio_RetroCade_Synth/smallfs-production/track8.mod differ diff --git a/Audio_RetroCade_Synth/smallfs-production/track8.sid b/Audio_RetroCade_Synth/smallfs-production/track8.sid new file mode 100644 index 0000000..f227277 Binary files /dev/null and b/Audio_RetroCade_Synth/smallfs-production/track8.sid differ diff --git a/Audio_RetroCade_Synth/smallfs-production/track8.ymd b/Audio_RetroCade_Synth/smallfs-production/track8.ymd new file mode 100644 index 0000000..ef0ac74 Binary files /dev/null and b/Audio_RetroCade_Synth/smallfs-production/track8.ymd differ diff --git a/Audio_RetroCade_Synth/smallfs-production/track9.mod b/Audio_RetroCade_Synth/smallfs-production/track9.mod new file mode 100644 index 0000000..4649bd5 Binary files /dev/null and b/Audio_RetroCade_Synth/smallfs-production/track9.mod differ diff --git a/Audio_RetroCade_Synth/smallfs-production/track9.sid b/Audio_RetroCade_Synth/smallfs-production/track9.sid new file mode 100644 index 0000000..a76894d Binary files /dev/null and b/Audio_RetroCade_Synth/smallfs-production/track9.sid differ diff --git a/Audio_RetroCade_Synth/smallfs-production/track9.ymd b/Audio_RetroCade_Synth/smallfs-production/track9.ymd new file mode 100644 index 0000000..9a1900d Binary files /dev/null and b/Audio_RetroCade_Synth/smallfs-production/track9.ymd differ diff --git a/Benchy_Sump_LogicAnalyzer/circuit/PSL_Papilio_One_500K.xise b/Benchy_Sump_LogicAnalyzer/circuit/PSL_Papilio_One_500K.xise index cb5a3be..661ece6 100644 --- a/Benchy_Sump_LogicAnalyzer/circuit/PSL_Papilio_One_500K.xise +++ b/Benchy_Sump_LogicAnalyzer/circuit/PSL_Papilio_One_500K.xise @@ -18,26 +18,32 @@ + + + + + + diff --git a/Benchy_Sump_LogicAnalyzer_Standalone/Benchy_Sump_LogicAnalyzer_Standalone.ino b/Benchy_Sump_LogicAnalyzer_Standalone/Benchy_Sump_LogicAnalyzer_Standalone.ino new file mode 100644 index 0000000..dce07c8 --- /dev/null +++ b/Benchy_Sump_LogicAnalyzer_Standalone/Benchy_Sump_LogicAnalyzer_Standalone.ino @@ -0,0 +1,37 @@ +/* + Gadget Factory - Project Name + Stand Alone Sump "Blaze" Logic Analyzer with 32 BRAM blocks (64KB) and 16 channels. + To learn more about using DesignLab please visit http://learn.gadgetfactory.net + + Tutorials: + + Related library documentation: + + Hardware: + + Special Notes: + If you want to generate a signal to test with then you can load this sketch to the AVR of the Papilio DUO. You will see a UART signal on channel0 + + created 2014 + by Jack Gassett + http://www.gadgetfactory.net + + This example code is in the public domain. + */ + + +int counter = 0; + +void setup() { + // put your setup code here, to run once: + Serial1.begin(115200); + +} + +void loop() { + // put your main code here, to run repeatedly: + Serial1.write(counter); + counter++; + delay(1); + +} diff --git a/WiiChuck/circuit/250K/Papilio_One_250K.ut b/Benchy_Sump_LogicAnalyzer_Standalone/circuit/250K/Papilio_One_250K.ut similarity index 100% rename from WiiChuck/circuit/250K/Papilio_One_250K.ut rename to Benchy_Sump_LogicAnalyzer_Standalone/circuit/250K/Papilio_One_250K.ut diff --git a/Benchy_Sump_LogicAnalyzer_Standalone/circuit/250K/papilio_one_250k.bit b/Benchy_Sump_LogicAnalyzer_Standalone/circuit/250K/papilio_one_250k.bit new file mode 100644 index 0000000..1449d3e Binary files /dev/null and b/Benchy_Sump_LogicAnalyzer_Standalone/circuit/250K/papilio_one_250k.bit differ diff --git a/WiiChuck/circuit/DUO_LX9/Papilio_DUO_LX9.ut b/Benchy_Sump_LogicAnalyzer_Standalone/circuit/DUO_LX9/Papilio_DUO_LX9.ut similarity index 100% rename from WiiChuck/circuit/DUO_LX9/Papilio_DUO_LX9.ut rename to Benchy_Sump_LogicAnalyzer_Standalone/circuit/DUO_LX9/Papilio_DUO_LX9.ut diff --git a/Benchy_Sump_LogicAnalyzer_Standalone/circuit/DUO_LX9/papilio_duo_lx9.bit b/Benchy_Sump_LogicAnalyzer_Standalone/circuit/DUO_LX9/papilio_duo_lx9.bit new file mode 100644 index 0000000..8c5b986 Binary files /dev/null and b/Benchy_Sump_LogicAnalyzer_Standalone/circuit/DUO_LX9/papilio_duo_lx9.bit differ diff --git a/WiiChuck/circuit/LX9/Papilio_Pro.ut b/Benchy_Sump_LogicAnalyzer_Standalone/circuit/LX9/Papilio_Pro.ut similarity index 100% rename from WiiChuck/circuit/LX9/Papilio_Pro.ut rename to Benchy_Sump_LogicAnalyzer_Standalone/circuit/LX9/Papilio_Pro.ut diff --git a/Benchy_Sump_LogicAnalyzer_Standalone/circuit/LX9/papilio_pro.bit b/Benchy_Sump_LogicAnalyzer_Standalone/circuit/LX9/papilio_pro.bit new file mode 100644 index 0000000..67870c9 Binary files /dev/null and b/Benchy_Sump_LogicAnalyzer_Standalone/circuit/LX9/papilio_pro.bit differ diff --git a/Benchy_Sump_LogicAnalyzer_Standalone/circuit/PSL_Papilio_DUO_LX9.xise b/Benchy_Sump_LogicAnalyzer_Standalone/circuit/PSL_Papilio_DUO_LX9.xise new file mode 100644 index 0000000..38dda02 --- /dev/null +++ b/Benchy_Sump_LogicAnalyzer_Standalone/circuit/PSL_Papilio_DUO_LX9.xise @@ -0,0 +1,1206 @@ + + + +
+ + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
diff --git a/Benchy_Sump_LogicAnalyzer_Standalone/circuit/PSL_Papilio_One_250K.xise b/Benchy_Sump_LogicAnalyzer_Standalone/circuit/PSL_Papilio_One_250K.xise new file mode 100644 index 0000000..66691e6 --- /dev/null +++ b/Benchy_Sump_LogicAnalyzer_Standalone/circuit/PSL_Papilio_One_250K.xise @@ -0,0 +1,1166 @@ + + + +
+ + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
diff --git a/Benchy_Sump_LogicAnalyzer_Standalone/circuit/PSL_Papilio_One_500K.xise b/Benchy_Sump_LogicAnalyzer_Standalone/circuit/PSL_Papilio_One_500K.xise new file mode 100644 index 0000000..8842e76 --- /dev/null +++ b/Benchy_Sump_LogicAnalyzer_Standalone/circuit/PSL_Papilio_One_500K.xise @@ -0,0 +1,1176 @@ + + + +
+ + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
diff --git a/Benchy_Sump_LogicAnalyzer_Standalone/circuit/PSL_Papilio_Pro_LX9.xise b/Benchy_Sump_LogicAnalyzer_Standalone/circuit/PSL_Papilio_Pro_LX9.xise new file mode 100644 index 0000000..b06178a --- /dev/null +++ b/Benchy_Sump_LogicAnalyzer_Standalone/circuit/PSL_Papilio_Pro_LX9.xise @@ -0,0 +1,1203 @@ + + + +
+ + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
diff --git a/Benchy_Sump_LogicAnalyzer_Standalone/circuit/Papilio_DUO_LX9.sch b/Benchy_Sump_LogicAnalyzer_Standalone/circuit/Papilio_DUO_LX9.sch new file mode 100644 index 0000000..8052cc8 --- /dev/null +++ b/Benchy_Sump_LogicAnalyzer_Standalone/circuit/Papilio_DUO_LX9.sch @@ -0,0 +1,163 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + 2000-1-1T10:10:10 + + + + + + + + + 2015-6-12T6:48:35 + + + + + + + + 2000-1-1T10:10:10 + + + + + + + + + + + + + + 2000-1-1T10:10:10 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Replace DUO_SW1 with a Pulldown if you want the ATmega32U4 chip to run when this circuit is loaded. + + + + + + + + Replace DUO_SW1 with a Pullup if you want to disable the ATmega32U4 chip when this circuit is loaded. + + Papilio DUO Reset + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Benchy_Sump_LogicAnalyzer_Standalone/circuit/Papilio_One_250K.sch b/Benchy_Sump_LogicAnalyzer_Standalone/circuit/Papilio_One_250K.sch new file mode 100644 index 0000000..47429e6 --- /dev/null +++ b/Benchy_Sump_LogicAnalyzer_Standalone/circuit/Papilio_One_250K.sch @@ -0,0 +1,135 @@ + + + + + + + + + + + + + + + + + + + + + + + 2015-6-12T6:48:35 + + + + + + + + 2000-1-1T10:10:10 + + + + + + + + + + 2000-1-1T10:10:10 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Benchy_Sump_LogicAnalyzer_Standalone/circuit/Papilio_One_500K.sch b/Benchy_Sump_LogicAnalyzer_Standalone/circuit/Papilio_One_500K.sch new file mode 100644 index 0000000..7295ad7 --- /dev/null +++ b/Benchy_Sump_LogicAnalyzer_Standalone/circuit/Papilio_One_500K.sch @@ -0,0 +1,135 @@ + + + + + + + + + + + + + + + + + + + + + + + 2015-6-12T6:48:35 + + + + + + + + 2000-1-1T10:10:10 + + + + + + + + + + 2000-1-1T10:10:10 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Benchy_Sump_LogicAnalyzer_Standalone/circuit/Papilio_Pro.sch b/Benchy_Sump_LogicAnalyzer_Standalone/circuit/Papilio_Pro.sch new file mode 100644 index 0000000..096fa7e --- /dev/null +++ b/Benchy_Sump_LogicAnalyzer_Standalone/circuit/Papilio_Pro.sch @@ -0,0 +1,135 @@ + + + + + + + + + + + + + + + + + + + + + + + 2015-6-12T6:48:35 + + + + + + + + 2000-1-1T10:10:10 + + + + + + + + + + 2000-1-1T10:10:10 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/WiiChuck/circuit/build_all.bat b/Benchy_Sump_LogicAnalyzer_Standalone/circuit/build_all.bat similarity index 100% rename from WiiChuck/circuit/build_all.bat rename to Benchy_Sump_LogicAnalyzer_Standalone/circuit/build_all.bat diff --git a/WiiChuck/circuit/clean.bat b/Benchy_Sump_LogicAnalyzer_Standalone/circuit/clean.bat similarity index 100% rename from WiiChuck/circuit/clean.bat rename to Benchy_Sump_LogicAnalyzer_Standalone/circuit/clean.bat diff --git a/Benchy_Sump_LogicAnalyzer_Standalone/circuit/schematic_papilio_DUO.pdf b/Benchy_Sump_LogicAnalyzer_Standalone/circuit/schematic_papilio_DUO.pdf new file mode 100644 index 0000000..afc3678 Binary files /dev/null and b/Benchy_Sump_LogicAnalyzer_Standalone/circuit/schematic_papilio_DUO.pdf differ diff --git a/Benchy_Sump_LogicAnalyzer_Standalone/circuit/schematic_papilio_one_250k.pdf b/Benchy_Sump_LogicAnalyzer_Standalone/circuit/schematic_papilio_one_250k.pdf new file mode 100644 index 0000000..27047e5 Binary files /dev/null and b/Benchy_Sump_LogicAnalyzer_Standalone/circuit/schematic_papilio_one_250k.pdf differ diff --git a/Benchy_Sump_LogicAnalyzer_Standalone/circuit/schematic_papilio_one_500k.pdf b/Benchy_Sump_LogicAnalyzer_Standalone/circuit/schematic_papilio_one_500k.pdf new file mode 100644 index 0000000..b88c0b5 Binary files /dev/null and b/Benchy_Sump_LogicAnalyzer_Standalone/circuit/schematic_papilio_one_500k.pdf differ diff --git a/Benchy_Sump_LogicAnalyzer_Standalone/circuit/schematic_papilio_pro.pdf b/Benchy_Sump_LogicAnalyzer_Standalone/circuit/schematic_papilio_pro.pdf new file mode 100644 index 0000000..411a6b7 Binary files /dev/null and b/Benchy_Sump_LogicAnalyzer_Standalone/circuit/schematic_papilio_pro.pdf differ diff --git a/Benchy_Waveform_Generator/circuit/PSL_Papilio_One_500K.xise b/Benchy_Waveform_Generator/circuit/PSL_Papilio_One_500K.xise index cb5a3be..661ece6 100644 --- a/Benchy_Waveform_Generator/circuit/PSL_Papilio_One_500K.xise +++ b/Benchy_Waveform_Generator/circuit/PSL_Papilio_One_500K.xise @@ -18,26 +18,32 @@ + + + + + + diff --git a/Circuit_Library_Descriptions/Circuit_Library_Descriptions.ino b/Circuit_Library_Descriptions/Circuit_Library_Descriptions.ino new file mode 100644 index 0000000..68f8e74 --- /dev/null +++ b/Circuit_Library_Descriptions/Circuit_Library_Descriptions.ino @@ -0,0 +1,380 @@ +/* +DesignLab contains many circuits that have already been generated for you. This is a full listing of all the pre-defined circuits available for you to use. + +It's easy to associate any one of these circuits to your sketch. Simply do a: +#define circuit + +RGB_Matrix Circuit + The RGB_Matrix circuit connects a 32x32 RGB LED Matrix Panel to the Papilio. + It contains: + -I2C controller, on Wishbone slot 5, connected to CL for the Wii Nunchuck controller. + -RGB Panel controller on Wishbone slot 9. + -RGB Panel Wing connector on row D for the DUO and row C for the Pro. + -SPI Master, on Wishbone slot 13, and a SD Card Wing on CH. + + Special Notes: + Pullups are placed on BL so a Joystick can be connected for 1-Pixel Pacman. + + Supported boards: + Papilio DUO + Papilio Pro + + To use, include the following line in your sketch: + #define circuit RGB_Matrix + +******************************************************************************************************************************************************************* + +Arcade_MegaWing Circuit + The Arcade_MegaWing circuit is intended to be used with an Arcade MegaWing connected to a Papilio Pro or Papilio One 500K. + It contains: + -Arcade MegaWing Pinout + -Audio passthrough - For playing Amiga MOD files or passing raw audio. + -YM2149 Audio Chip - For playing Atari ST YM files. + -Libraries + -http://www.papilio.cc/index.php?n=Papilio.YM2149 + -http://www.papilio.cc/index.php?n=Papilio.YMVoice + -Commodore 64 SID Chip - For playing SID files. + -Libraries + -http://www.papilio.cc/index.php?n=Papilio.SID + -http://www.papilio.cc/index.php?n=Papilio.SIDVoice + -HQVGA Adapter - This is an older VGA adapter that uses internal BRAM memory and can only generate 240x160 video output. + -Libraries + -http://www.papilio.cc/index.php?n=Papilio.VGA + -http://www.papilio.cc/index.php?n=Papilio.VGALiquidCrystal + + Special Notes: + All audio chips connect to a 3 channel audio mixer and then to the Arcade MegaWing audio pins. + Pullups are placed on all of the joystick pins. + + Supported boards: + Papilio One 500K + Papilio Pro + + To use, include the following line in your sketch: + #define circuit Arcade_MegaWing + +******************************************************************************************************************************************************************* + +Arcade_MegaWing2 Circuit + The Arcade_MegaWing2 circuit is intended to be used with an Arcade MegaWing connected to a Papilio Pro. + + The main difference from Arcade_MegaWing is the VGA adapter. This circuit uses the more advanced ZPUino VGA Adapter which is capable of resolutions up to 1280x1024. + It also uses the Adafruit_GFX library to control the graphics. + + It contains: + -Arcade MegaWing Pinout + -Audio passthrough - For playing Amiga MOD files or passing raw audio. + -YM2149 Audio Chip - For playing Atari ST YM files. + -Libraries + -http://www.papilio.cc/index.php?n=Papilio.YM2149 + -http://www.papilio.cc/index.php?n=Papilio.YMVoice + -Commodore 64 SID Chip - For playing SID files. + -Libraries + -http://www.papilio.cc/index.php?n=Papilio.SID + -http://www.papilio.cc/index.php?n=Papilio.SIDVoice + -ZPUino VGA Adapter - This is the latest and greatest graphics adapter that uses DMA to access SDRAM memory for video. Uses the Adafruit_GFX library for graphics. + + Special Notes: + All audio chips connect to a 3 channel audio mixer and then to the Arcade MegaWing audio pins. + Pullups are placed on all of the joystick pins. + + Supported boards: + Papilio Pro + + To use, include the following line in your sketch: + #define circuit Arcade_MegaWing2 + +******************************************************************************************************************************************************************* + +Audio_Wing Circuit + The Audio_Wing circuit connects all available audio chips to an Audio Wing connected to the CH Wing Slot. It is intended to be used with the Audio Wing available in the store: + http://store.gadgetfactory.net/audio-wing/ + + It contains: + -Audio Wing connected to CH Wing Slot + -Audio passthrough - For playing Amiga MOD files or passing raw audio. + -YM2149 Audio Chip - For playing Atari ST YM files. + -Libraries + -http://www.papilio.cc/index.php?n=Papilio.YM2149 + -http://www.papilio.cc/index.php?n=Papilio.YMVoice + -Commodore 64 SID Chip - For playing SID files. + -Libraries + -http://www.papilio.cc/index.php?n=Papilio.SID + -http://www.papilio.cc/index.php?n=Papilio.SIDVoice + + Special Notes: + All audio chips connect to a 3 channel audio mixer and then to the Audio Wings audio pins. + + Supported boards: + Papilio Pro + Papilio DUO + Papilio One 500K + + To use, include the following line in your sketch: + #define circuit Audio_Wing + +******************************************************************************************************************************************************************* + +blank Circuit + The blank circuit lets you essentially disable the FPGA. You may need this when running AVR sketches on the Papilio DUO and you want to ensure there is no interference from the FPGA. + + Supported boards: + Papilio Pro + Papilio DUO + Papilio One 500K + Papilio One 250K + + To use, include the following line in your sketch: + #define circuit blank + +******************************************************************************************************************************************************************* + +Computing_Shield Circuit + The Computing_Shield circuit is intended to be used with an Computing Shield connected to a Papilio DUO. + http://store.gadgetfactory.net/computing-shield/ + + It contains: + -Computing Shield Pinout + -Audio passthrough - For playing Amiga MOD files or passing raw audio. + -YM2149 Audio Chip - For playing Atari ST YM files. + -Libraries + -http://www.papilio.cc/index.php?n=Papilio.YM2149 + -http://www.papilio.cc/index.php?n=Papilio.YMVoice + -Commodore 64 SID Chip - For playing SID files. + -Libraries + -http://www.papilio.cc/index.php?n=Papilio.SID + -http://www.papilio.cc/index.php?n=Papilio.SIDVoice + -HQVGA Adapter - This is an older VGA adapter that uses internal BRAM memory and can only generate 240x160 video output. + -Libraries + -http://www.papilio.cc/index.php?n=Papilio.VGA + -http://www.papilio.cc/index.php?n=Papilio.VGALiquidCrystal + -Second UART - Connected to the Maxim RS232 converter on the Computing Shield + -SPI Master - Connected to the SD card on the Computing Shield. Used with the SD library for full SD card access from your sketches. + + Special Notes: + All audio chips connect to a 3 channel audio mixer and then to the Computing Shield audio pins. + + Supported boards: + Papilio DUO + + To use, include the following line in your sketch: + #define circuit Computing_Shield + +******************************************************************************************************************************************************************* + +Computing_Shield2 Circuit + The Computing_Shield circuit is intended to be used with an Computing Shield connected to a Papilio DUO. + http://store.gadgetfactory.net/computing-shield/ + + The main difference from Computing_Shield is the VGA adapter. This circuit uses the more advanced ZPUino VGA Adapter which is capable of resolutions up to 1280x1024. + It also uses the Adafruit_GFX library to control the graphics. + + It contains: + -Computing Shield Pinout + -Audio passthrough - For playing Amiga MOD files or passing raw audio. + -YM2149 Audio Chip - For playing Atari ST YM files. + -Libraries + -http://www.papilio.cc/index.php?n=Papilio.YM2149 + -http://www.papilio.cc/index.php?n=Papilio.YMVoice + -Commodore 64 SID Chip - For playing SID files. + -Libraries + -http://www.papilio.cc/index.php?n=Papilio.SID + -http://www.papilio.cc/index.php?n=Papilio.SIDVoice + -ZPUino VGA Adapter - This is the latest and greatest graphics adapter that uses DMA to access SDRAM memory for video. Uses the Adafruit_GFX library for graphics. + -Second UART - Connected to the Maxim RS232 converter on the Computing Shield + -SPI Master - Connected to the SD card on the Computing Shield. Used with the SD library for full SD card access from your sketches. + + Special Notes: + All audio chips connect to a 3 channel audio mixer and then to the Computing Shield audio pins. + + Supported boards: + Papilio DUO + + To use, include the following line in your sketch: + #define circuit Computing_Shield2 + +******************************************************************************************************************************************************************* + +Gameduino_Computing_Shield Circuit + Connects James Bowman's Gameduino project to a Computing Shield. + http://store.gadgetfactory.net/computing-shield/ + http://excamera.com/sphinx/gameduino/ + + All of the Gameduino sketchs can run on the AVR chip of the Papilio DUO. The FPGA runs the Gameduino design - together it is a self contained Gameduino. + + Special Notes: + Look at the example sketches under File/Examples/Gameduino + + Supported boards: + Papilio DUO + + To use, include the following line in your sketch: + #define circuit Gameduino_Computing_Shield + +******************************************************************************************************************************************************************* + +Gameduino_LogicStart_Shield Circuit + Connects James Bowman's Gameduino project to a LogicStart Shield. + http://store.gadgetfactory.net/computing-shield/ + http://excamera.com/sphinx/gameduino/ + + All of the Gameduino sketchs can run on the AVR chip of the Papilio DUO. The FPGA runs the Gameduino design - together it is a self contained Gameduino. + + Special Notes: + Look at the example sketches under File/Examples/Gameduino + + Supported boards: + Papilio DUO + + To use, include the following line in your sketch: + #define circuit Gameduino_LogicStart_Shield + +******************************************************************************************************************************************************************* + +LogicStart_MegaWing Circuit + All the "chips" needed to put the LogicStart MegaWing through its paces with the Papilio Pro or Papilio One. + + It contains: + -LogicStart MegaWing Pinout + -Audio passthrough - For playing Amiga MOD files or passing raw audio. + -HQVGA Adapter - This is an older VGA adapter that uses internal BRAM memory and can only generate 240x160 video output. + -Libraries + -http://www.papilio.cc/index.php?n=Papilio.VGA + -http://www.papilio.cc/index.php?n=Papilio.VGALiquidCrystal + -Seven Segment Controller + -SPI Master for interfacing to the ADC chips on the MegaWing, is the following library: + -http://www.papilio.cc/index.php?n=Papilio.ADC + + Supported boards: + Papilio Pro + Papilio One 500K + + To use, include the following line in your sketch: + #define circuit LogicStart_MegaWing + +******************************************************************************************************************************************************************* + +LogicStart_MegaWing2 Circuit + All the "chips" needed to put the LogicStart MegaWing through its paces with the Papilio Pro. + + The LogicStart_MegaWing2 circuit uses the more advanced VGA controller that is capable of 1280x1024 output. + + It contains: + -LogicStart MegaWing Pinout + -Audio passthrough - For playing Amiga MOD files or passing raw audio. + -ZPUino VGA Adapter - This is the latest and greatest graphics adapter that uses DMA to access SDRAM memory for video. Uses the Adafruit_GFX library for graphics. + -Seven Segment Controller + -SPI Master for interfacing to the ADC chips on the MegaWing, is the following library: + -http://www.papilio.cc/index.php?n=Papilio.ADC + + Supported boards: + Papilio Pro + + To use, include the following line in your sketch: + #define circuit LogicStart_MegaWing2 + +******************************************************************************************************************************************************************* + +LogicStart_Shield Circuit + All the "chips" needed to put the LogicStart MegaWing through its paces with the Papilio Pro or Papilio One. + + It contains: + -LogicStart MegaWing Pinout + -Audio passthrough - For playing Amiga MOD files or passing raw audio. + -HQVGA Adapter - This is an older VGA adapter that uses internal BRAM memory and can only generate 240x160 video output. + -Libraries + -http://www.papilio.cc/index.php?n=Papilio.VGA + -http://www.papilio.cc/index.php?n=Papilio.VGALiquidCrystal + -Seven Segment Controller + + Supported boards: + Papilio DUO + + To use, include the following line in your sketch: + #define circuit LogicStart_Shield + +******************************************************************************************************************************************************************* + +LogicStart_Shield2 Circuit + All the "chips" needed to put the LogicStart MegaWing through its paces with the Papilio Pro. + + The LogicStart_MegaWing2 circuit uses the more advanced VGA controller that is capable of 1280x1024 output. + + It contains: + -LogicStart MegaWing Pinout + -Audio passthrough - For playing Amiga MOD files or passing raw audio. + -ZPUino VGA Adapter - This is the latest and greatest graphics adapter that uses DMA to access SDRAM memory for video. Uses the Adafruit_GFX library for graphics. + -Seven Segment Controller + + Supported boards: + Papilio DUO + + To use, include the following line in your sketch: + #define circuit LogicStart_Shield2 + +******************************************************************************************************************************************************************* + +Robot_Control_Library Circuit + 5 PWM's and 3 Quadrature decoders connected to the flex pins so you can move them to any Papilio pin on the fly. + + The Robot Control Library is a neat library from OpenCores that includes a stepper controller, PWM, Quad Decoder, and PID. We will port the remaining components soon. + + It contains: + -PWM + -Quadrature Decoder + + Supported boards: + Papilio DUO + Papilio Pro + Papilio One 500K + Papilio One 250K + + To use, include the following line in your sketch: + #define circuit Robot_Control_Library + +******************************************************************************************************************************************************************* + +ZPUino_Vanilla Circuit + This is a basic ZPUino circuit with nothing attached to the Wishbone bus. It is the base that is used when you make your own ZPUino circuits from scratch or you want to use the FPGA like an Arduino. + + Supported boards: + Papilio DUO + Papilio Pro + Papilio One 500K + Papilio One 250K + + To use, include the following line in your sketch: + #define circuit ZPUino_Vanilla + +******************************************************************************************************************************************************************* + +ZPUino_Wings Circuit + This may be one of the more interesting circuits becuase it contains all of the current Papilio Wings connected at once to different Wing Slots. + + It contains: + + -Wii Chuck Wing connected to AL Wing Slot. Uses the WiiChuck and I2C library. + -VGA Wing connected to AH Wing Slot with the latest and ZPUino VGA Adapter - This is the latest and greatest graphics adapter that uses DMA to access SDRAM memory for video. Uses the Adafruit_GFX library for graphics. + -SD Card Wing connected to CL with an SPI master. Used with the SD library for full SD card access from your sketches. + -Audio Wing connected to CH with three audio chips connected to it through the audiomixer. + -Audio passthrough - For playing Amiga MOD files or passing raw audio. + -YM2149 Audio Chip - For playing Atari ST YM files. + -Libraries + -http://www.papilio.cc/index.php?n=Papilio.YM2149 + -http://www.papilio.cc/index.php?n=Papilio.YMVoice + -Commodore 64 SID Chip - For playing SID files. + -Libraries + -http://www.papilio.cc/index.php?n=Papilio.SID + -http://www.papilio.cc/index.php?n=Papilio.SIDVoice + + + + Supported boards: + Papilio DUO + Papilio Pro + Papilio One 500K + Papilio One 250K + + To use, include the following line in your sketch: + #define circuit ZPUino_Wings +*/ diff --git a/Flex_Pins/PPSTest.ino b/Flex_Pins/Flex_Pins.ino similarity index 100% rename from Flex_Pins/PPSTest.ino rename to Flex_Pins/Flex_Pins.ino diff --git a/Gameduino/1.Basics/rotate/rotate.ino b/Gameduino/1.Basics/rotate/rotate.ino deleted file mode 100644 index 6e197e0..0000000 --- a/Gameduino/1.Basics/rotate/rotate.ino +++ /dev/null @@ -1,32 +0,0 @@ -//Uncomment your preferred Shield -#define circuit Gameduino_Computing_Shield -//#define circuit Gameduino_LogicStart_Shield - -#include -#include - -#include "r.h" - -void setup() -{ - int i; - - GD.begin(); - GD.ascii(); - GD.putstr(0, 0,"Sprite rotation"); - - GD.copy(RAM_SPRIMG, r_img, sizeof(r_img)); - GD.copy(RAM_SPRPAL, r_pal, sizeof(r_pal)); - - for (i = 0; i < 8; i++) { - char msg[] = "ROT=."; - byte y = 3 + 4 * i; - msg[4] = '0' + i; - GD.putstr(18, y, msg); - GD.sprite(i, 200, 8 * y, 0, 0, i); - } -} - -void loop() -{ -} diff --git a/Gameduino/3.Advanced/snow/snow.ino b/Gameduino/3.Advanced/snow/snow.ino deleted file mode 100644 index 99101dd..0000000 --- a/Gameduino/3.Advanced/snow/snow.ino +++ /dev/null @@ -1,25 +0,0 @@ -//Uncomment your preferred Shield -#define circuit Gameduino_Computing_Shield -//#define circuit Gameduino_LogicStart_Shield - -#include -#include - -#include "random.h" - -void setup() -{ - GD.begin(); - int i; - for (i = 0; i < 256; i++) { - GD.wr16(RAM_PAL + (4 * i + 0) * 2, RGB(0,0,0)); - GD.wr16(RAM_PAL + (4 * i + 1) * 2, RGB(0x20,0x20,0x20)); - GD.wr16(RAM_PAL + (4 * i + 2) * 2, RGB(0x40,0x40,0x40)); - GD.wr16(RAM_PAL + (4 * i + 3) * 2, RGB(0xff,0xff,0xff)); - } - GD.microcode(random_code, sizeof(random_code)); -} - -void loop() -{ -} diff --git a/Gameduino/4.Demo/asteroids/circuit/DUO_LX9/papilio_duo_lx9.bit b/Gameduino/4.Demo/asteroids/circuit/DUO_LX9/papilio_duo_lx9.bit deleted file mode 100644 index 28c5d27..0000000 Binary files a/Gameduino/4.Demo/asteroids/circuit/DUO_LX9/papilio_duo_lx9.bit and /dev/null differ diff --git a/Gameduino/4.Demo/asteroids/circuit/LogicStart_Shield_Pinout.sym b/Gameduino/4.Demo/asteroids/circuit/LogicStart_Shield_Pinout.sym deleted file mode 100644 index cd25add..0000000 --- a/Gameduino/4.Demo/asteroids/circuit/LogicStart_Shield_Pinout.sym +++ /dev/null @@ -1,256 +0,0 @@ - - - BLOCK - 2014-12-11T0:1:18 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Papilio DUO LogicStart Shield Pinout - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - SEG7_AN4 - SEG7_AN2 - SEG7_AN3 - GPIO2 - GPIO1 - GPIO0 - SEG7_SEG_D - SEG7_SEG_P - SW2 - SW1 - SW3 - SW4 - LED3 - LED4 - LED5 - SW0 - DIR_UP - DIR_DOWN - DIR_LEFT - LED6 - LED7 - DIR_RIGHT - - LED2 - LED1 - LED0 - SW7 - SW6 - SW5 - SEG7_AN0 - SEG7_AN1 - - - - - - Audio - AUDIO1_LEFT - AUDIO1_RIGHT - SEG7_SEG_E - SEG7_SEG_A - SEG7_SEG_F - SEG7_SEG_C - SEG7_SEG_G - SEG7_SEG_B - VGA_HSYNC - VGA_VSYNC - VGA_BLUE0 - VGA_BLUE1 - VGA_BLUE2 - VGA_BLUE3 - VGA_GREEN0 - VGA_GREEN1 - VGA_GREEN2 - VGA_GREEN3 - VGA_RED3 - VGA_RED2 - VGA_RED1 - VGA_RED0 - - - (Optional) - VGA Pins - - (Preferred) - VGA Bus - - VGA options. - Note: Don't use both - Seven Segment - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Gameduino/4.Demo/asteroids/circuit/LogicStart_Shield_Pinout.vhd b/Gameduino/4.Demo/asteroids/circuit/LogicStart_Shield_Pinout.vhd deleted file mode 100644 index e244398..0000000 --- a/Gameduino/4.Demo/asteroids/circuit/LogicStart_Shield_Pinout.vhd +++ /dev/null @@ -1,299 +0,0 @@ --------------------------------------------------------------------------------- --- Copyright (c) 1995-2012 Xilinx, Inc. All rights reserved. --------------------------------------------------------------------------------- --- ____ ____ --- / /\/ / --- /___/ \ / Vendor: Xilinx --- \ \ \/ Version : 14.3 --- \ \ Application : --- / / Filename : xil_10080_19 --- /___/ /\ Timestamp : 02/08/2013 16:21:11 --- \ \ / \ --- \___\/\___\ --- ---Command: ---Design Name: --- - -library ieee; -use ieee.std_logic_1164.ALL; -use ieee.numeric_std.ALL; -library UNISIM; -use UNISIM.Vcomponents.ALL; - -entity LogicStart_Shield_Pinout is - port ( - Audio_Left : in std_logic; - Audio_Right : in std_logic; - Seg7_dot : in std_logic; - Seg7_enable : in std_logic_vector (3 downto 0); - Seg7_segdata : in std_logic_vector (6 downto 0); - VGA_Red3 : in std_logic; - VGA_Red2 : in std_logic; - VGA_Red1 : in std_logic; - VGA_Red0 : in std_logic; - VGA_Green3 : in std_logic; - VGA_Green2 : in std_logic; - VGA_Green1 : in std_logic; - VGA_Green0 : in std_logic; - VGA_Blue3 : in std_logic; - VGA_Blue2 : in std_logic; - VGA_Blue1 : in std_logic; - VGA_Blue0 : in std_logic; - VGA_Hsync : in std_logic; - VGA_Vsync : in std_logic; - VGA_Bus : inout std_logic_vector(32 downto 0); - - - gpio_bus_in : out std_logic_vector(200 downto 0); - gpio_bus_out : in std_logic_vector(200 downto 0); - - WING_AH0 : inout std_logic; - WING_AH1 : inout std_logic; - WING_AH2 : inout std_logic; - WING_AH3 : inout std_logic; - WING_AH4 : inout std_logic; - WING_AH5 : inout std_logic; - WING_AH6 : inout std_logic; - WING_AH7 : inout std_logic; - - WING_AL0 : inout std_logic; - WING_AL1 : inout std_logic; - WING_AL2 : inout std_logic; - WING_AL3 : inout std_logic; - WING_AL4 : inout std_logic; - WING_AL5 : inout std_logic; - WING_AL6 : inout std_logic; - WING_AL7 : inout std_logic; - - WING_BH0 : inout std_logic; - WING_BH1 : inout std_logic; - WING_BH2 : inout std_logic; - WING_BH3 : inout std_logic; - WING_BH4 : inout std_logic; - WING_BH5 : inout std_logic; - WING_BH6 : inout std_logic; - WING_BH7 : inout std_logic; - - WING_BL0 : inout std_logic; - WING_BL1 : inout std_logic; - WING_BL2 : inout std_logic; - WING_BL3 : inout std_logic; - WING_BL4 : inout std_logic; - WING_BL5 : inout std_logic; - WING_BL6 : inout std_logic; - WING_BL7 : inout std_logic; - - WING_CH0 : inout std_logic; - WING_CH1 : inout std_logic; - WING_CH2 : inout std_logic; - WING_CH3 : inout std_logic; - WING_CH4 : inout std_logic; - WING_CH5 : inout std_logic; - WING_CH6 : inout std_logic; - WING_CH7 : inout std_logic; - - WING_CL0 : inout std_logic; - WING_CL1 : inout std_logic; - WING_CL2 : inout std_logic; - WING_CL3 : inout std_logic; - WING_CL4 : inout std_logic; - WING_CL5 : inout std_logic; - WING_CL6 : inout std_logic; - WING_CL7 : inout std_logic; - - WING_DH0 : inout std_logic; - WING_DH1 : inout std_logic; - WING_DH2 : inout std_logic; - WING_DH3 : inout std_logic; - WING_DH4 : inout std_logic; - WING_DH5 : inout std_logic; - WING_DH6 : inout std_logic; - WING_DH7 : inout std_logic; - - WING_DL0 : inout std_logic; - WING_DL1 : inout std_logic; - WING_DL2 : inout std_logic; - WING_DL3 : inout std_logic; - WING_DL4 : inout std_logic; - WING_DL5 : inout std_logic; - WING_DL6 : inout std_logic; - WING_DL7 : inout std_logic - ); -end LogicStart_Shield_Pinout; - -architecture BEHAVIORAL of LogicStart_Shield_Pinout is --- signal gpio_o: std_logic_vector(zpuino_gpio_count-1 downto 0); --- signal gpio_t: std_logic_vector(zpuino_gpio_count-1 downto 0); --- signal gpio_i: std_logic_vector(zpuino_gpio_count-1 downto 0); --- --- -- SPP signal is one more than GPIO count --- signal gpio_spp_data: std_logic_vector(zpuino_gpio_count-1 downto 0); --- signal gpio_spp_read: std_logic_vector(zpuino_gpio_count-1 downto 0); --- --- constant spp_cap_in: std_logic_vector(zpuino_gpio_count-1 downto 0) := --- "0" & --- "1111111111111111" & --- "1111111111111111" & --- "1111111111111111"; --- constant spp_cap_out: std_logic_vector(zpuino_gpio_count-1 downto 0) := --- "0" & --- "1111111111111111" & --- "1111111111111111" & --- "1111111111111111"; - -constant wordPower : integer := 5; -constant wordSize : integer := 2**wordPower; -constant maxAddrBitIncIO : integer := 27; -constant maxIOBit: integer := maxAddrBitIncIO - 1; -constant minIOBit: integer := 2; -constant maxAddrBitBRAM : integer := 22; -constant DontCareValue : std_logic := 'X'; - -component iopad is - port( - I: in std_logic; - O: out std_logic; - T: in std_logic; - C: in std_logic; - PAD: inout std_logic - ); -end component iopad; - - signal gpio_o: std_logic_vector(54 downto 0); - signal gpio_t: std_logic_vector(54 downto 0); - signal gpio_i: std_logic_vector(54 downto 0); - - signal gpio_spp_data: std_logic_vector(54 downto 0); - signal gpio_spp_read: std_logic_vector(54 downto 0); - - signal gpio_clk: std_logic; - -begin - --gpio_bus_in(97 downto 49) <= gpio_spp_data; - --gpio_bus_in(48 downto 0) <= gpio_i; - - gpio_clk <= gpio_bus_out(165); - gpio_o <= gpio_bus_out(164 downto 110); - gpio_t <= gpio_bus_out(109 downto 55); - gpio_spp_read <= gpio_bus_out(54 downto 0); - - WING_BL0 <= Audio_Left; - WING_BL1 <= Audio_Right; - - --7 Segment - WING_CL5 <= Seg7_enable(3); - WING_CL0 <= Seg7_dot; - WING_CL6 <= Seg7_enable(2); - WING_BL2 <= Seg7_segdata(4); -- - WING_BL4 <= Seg7_segdata(5); -- - WING_BL5 <= Seg7_segdata(2); -- - WING_CL1 <= Seg7_segdata(3); - WING_BL3 <= Seg7_segdata(0); -- - WING_CH0 <= Seg7_enable(1); - WING_BL6 <= Seg7_segdata(6); -- - WING_BL7 <= Seg7_segdata(1); -- - WING_CH1 <= Seg7_enable(0); - - --VGA --- WING_DL1 <= VGA_Vsync; --- WING_DL0 <= VGA_Hsync; --- WING_DL6 <= VGA_Blue0; --- WING_DL7 <= VGA_Blue1; --- WING_DH1 <= VGA_Green0; --- WING_DH2 <= VGA_Green1; --- WING_DH3 <= VGA_Green2; --- WING_DH6 <= VGA_Red0; --- WING_DH5 <= VGA_Red1; --- WING_DH4 <= VGA_Red2; - - WING_DL1 <= vga_vsync OR VGA_Bus(31); - WING_DL0 <= vga_hsync OR VGA_Bus(30); - WING_DH4 <= vga_red3 OR VGA_Bus(9); - WING_DH5 <= vga_red2 OR VGA_Bus(8); - WING_DH6 <= vga_red1 OR VGA_Bus(7); - WING_DH7 <= vga_red0 OR VGA_Bus(6); - WING_DH3 <= vga_green3 OR VGA_Bus(19); - WING_DH2 <= vga_green2 OR VGA_Bus(18); - WING_DH1 <= vga_green1 OR VGA_Bus(17); - WING_DH0 <= vga_green0 OR VGA_Bus(16); - WING_DL7 <= vga_blue3 OR VGA_Bus(29); - WING_DL6 <= vga_blue2 OR VGA_Bus(28); - WING_DL5 <= vga_blue1 OR VGA_Bus(27); - WING_DL2 <= vga_blue0 OR VGA_Bus(26); - - pin00: IOPAD port map(I => gpio_o(0), O => gpio_bus_in(0), T => gpio_t(0), C => gpio_clk,PAD => WING_AL0); - pin01: IOPAD port map(I => gpio_o(1), O => gpio_bus_in(1), T => gpio_t(1), C => gpio_clk,PAD => WING_AL1); - pin02: IOPAD port map(I => gpio_o(2), O => gpio_bus_in(2), T => gpio_t(2), C => gpio_clk,PAD => WING_AL2); - pin03: IOPAD port map(I => gpio_o(3), O => gpio_bus_in(3), T => gpio_t(3), C => gpio_clk,PAD => WING_AL3); - pin04: IOPAD port map(I => gpio_o(4), O => gpio_bus_in(4), T => gpio_t(4), C => gpio_clk,PAD => WING_AL4); - pin05: IOPAD port map(I => gpio_o(5), O => gpio_bus_in(5), T => gpio_t(5), C => gpio_clk,PAD => WING_AL5); - pin06: IOPAD port map(I => gpio_o(6), O => gpio_bus_in(6), T => gpio_t(6), C => gpio_clk,PAD => WING_AL6); - pin07: IOPAD port map(I => gpio_o(7), O => gpio_bus_in(7), T => gpio_t(7), C => gpio_clk,PAD => WING_AL7); - pin08: IOPAD port map(I => gpio_o(8), O => gpio_bus_in(8), T => gpio_t(8), C => gpio_clk,PAD => WING_AH0); - pin09: IOPAD port map(I => gpio_o(9), O => gpio_bus_in(9), T => gpio_t(9), C => gpio_clk,PAD => WING_AH1); - pin10: IOPAD port map(I => gpio_o(10),O => gpio_bus_in(10),T => gpio_t(10),C => gpio_clk,PAD => WING_AH2); - pin11: IOPAD port map(I => gpio_o(11),O => gpio_bus_in(11),T => gpio_t(11),C => gpio_clk,PAD => WING_AH3); - pin12: IOPAD port map(I => gpio_o(12),O => gpio_bus_in(12),T => gpio_t(12),C => gpio_clk,PAD => WING_AH4); - pin13: IOPAD port map(I => gpio_o(13),O => gpio_bus_in(13),T => gpio_t(13),C => gpio_clk,PAD => WING_AH5); - --- pin14: IOPAD port map(I => gpio_o(14),O => gpio_bus_in(14),T => gpio_t(14),C => gpio_clk,PAD => WING_BL7); --- pin15: IOPAD port map(I => gpio_o(15),O => gpio_bus_in(15),T => gpio_t(15),C => gpio_clk,PAD => WING_BL6); --- pin16: IOPAD port map(I => gpio_o(16),O => gpio_bus_in(16),T => gpio_t(16),C => gpio_clk,PAD => WING_BL5); --- pin17: IOPAD port map(I => gpio_o(17),O => gpio_bus_in(17),T => gpio_t(17),C => gpio_clk,PAD => WING_BL4); --- pin18: IOPAD port map(I => gpio_o(18),O => gpio_bus_in(18),T => gpio_t(18),C => gpio_clk,PAD => WING_BL3); --- pin19: IOPAD port map(I => gpio_o(19),O => gpio_bus_in(19),T => gpio_t(19),C => gpio_clk,PAD => WING_BL2); --- pin20: IOPAD port map(I => gpio_o(20),O => gpio_bus_in(20),T => gpio_t(20),C => gpio_clk,PAD => WING_BL1); --- pin21: IOPAD port map(I => gpio_o(21),O => gpio_bus_in(21),T => gpio_t(21),C => gpio_clk,PAD => WING_BL0); - --- pin22: IOPAD port map(I => gpio_o(22),O => gpio_bus_in(22),T => gpio_t(22),C => gpio_clk,PAD => WING_CL0); --- pin23: IOPAD port map(I => gpio_o(23),O => gpio_bus_in(23),T => gpio_t(23),C => gpio_clk,PAD => WING_DH7); --- pin24: IOPAD port map(I => gpio_o(24),O => gpio_bus_in(24),T => gpio_t(24),C => gpio_clk,PAD => WING_CL1); --- pin25: IOPAD port map(I => gpio_o(25),O => gpio_bus_in(25),T => gpio_t(25),C => gpio_clk,PAD => WING_DH6); - pin26: IOPAD port map(I => gpio_o(26),O => gpio_bus_in(26),T => gpio_t(26),C => gpio_clk,PAD => WING_CL2); --- pin27: IOPAD port map(I => gpio_o(27),O => gpio_bus_in(27),T => gpio_t(27),C => gpio_clk,PAD => WING_DH5); - pin28: IOPAD port map(I => gpio_o(28),O => gpio_bus_in(28),T => gpio_t(28),C => gpio_clk,PAD => WING_CL3); --- pin29: IOPAD port map(I => gpio_o(29),O => gpio_bus_in(29),T => gpio_t(29),C => gpio_clk,PAD => WING_DH4); - pin30: IOPAD port map(I => gpio_o(30),O => gpio_bus_in(30),T => gpio_t(30),C => gpio_clk,PAD => WING_CL4); --- pin31: IOPAD port map(I => gpio_o(31),O => gpio_bus_in(31),T => gpio_t(31),C => gpio_clk,PAD => WING_DH3); --- pin32: IOPAD port map(I => gpio_o(32),O => gpio_bus_in(32),T => gpio_t(32),C => gpio_clk,PAD => WING_CL5); --- pin33: IOPAD port map(I => gpio_o(33),O => gpio_bus_in(33),T => gpio_t(33),C => gpio_clk,PAD => WING_DH2); --- pin34: IOPAD port map(I => gpio_o(34),O => gpio_bus_in(34),T => gpio_t(34),C => gpio_clk,PAD => WING_CL6); --- pin35: IOPAD port map(I => gpio_o(35),O => gpio_bus_in(35),T => gpio_t(35),C => gpio_clk,PAD => WING_DH1); --- pin36: IOPAD port map(I => gpio_o(36),O => gpio_bus_in(36),T => gpio_t(36),C => gpio_clk,PAD => WING_CL7); --- pin37: IOPAD port map(I => gpio_o(37),O => gpio_bus_in(37),T => gpio_t(37),C => gpio_clk,PAD => WING_DH0); - --- pin38: IOPAD port map(I => gpio_o(38),O => gpio_bus_in(38),T => gpio_t(38),C => gpio_clk,PAD => WING_CH0); --- pin39: IOPAD port map(I => gpio_o(39),O => gpio_bus_in(39),T => gpio_t(39),C => gpio_clk,PAD => WING_DL7); --- pin40: IOPAD port map(I => gpio_o(40),O => gpio_bus_in(40),T => gpio_t(40),C => gpio_clk,PAD => WING_CH1); --- pin41: IOPAD port map(I => gpio_o(41),O => gpio_bus_in(41),T => gpio_t(41),C => gpio_clk,PAD => WING_DL6); - pin42: IOPAD port map(I => gpio_o(42),O => gpio_bus_in(42),T => gpio_t(42),C => gpio_clk,PAD => WING_CH2); --- pin43: IOPAD port map(I => gpio_o(43),O => gpio_bus_in(43),T => gpio_t(43),C => gpio_clk,PAD => WING_DL5); - pin44: IOPAD port map(I => gpio_o(44),O => gpio_bus_in(44),T => gpio_t(44),C => gpio_clk,PAD => WING_CH3); --- pin45: IOPAD port map(I => gpio_o(45),O => gpio_bus_in(45),T => gpio_t(45),C => gpio_clk,PAD => WING_DL4); - pin46: IOPAD port map(I => gpio_o(46),O => gpio_bus_in(46),T => gpio_t(46),C => gpio_clk,PAD => WING_CH4); --- pin47: IOPAD port map(I => gpio_o(47),O => gpio_bus_in(47),T => gpio_t(47),C => gpio_clk,PAD => WING_DL3); - pin48: IOPAD port map(I => gpio_o(48),O => gpio_bus_in(48),T => gpio_t(48),C => gpio_clk,PAD => WING_CH5); --- pin49: IOPAD port map(I => gpio_o(49),O => gpio_bus_in(49),T => gpio_t(49),C => gpio_clk,PAD => WING_DL2); - pin50: IOPAD port map(I => gpio_o(50),O => gpio_bus_in(50),T => gpio_t(50),C => gpio_clk,PAD => WING_CH6); --- pin51: IOPAD port map(I => gpio_o(51),O => gpio_bus_in(51),T => gpio_t(51),C => gpio_clk,PAD => WING_DL1); - pin52: IOPAD port map(I => gpio_o(52),O => gpio_bus_in(52),T => gpio_t(52),C => gpio_clk,PAD => WING_CH7); --- pin53: IOPAD port map(I => gpio_o(53),O => gpio_bus_in(53),T => gpio_t(53),C => gpio_clk,PAD => WING_DL0); - - - process(gpio_spp_read) --- sigmadelta_spp_data, --- timers_pwm, --- spi2_mosi,spi2_sck) - begin - --- gpio_spp_data <= (others => DontCareValue); - gpio_bus_in(109 downto 54) <= (others => DontCareValue); - - - end process; - - -end BEHAVIORAL; - - diff --git a/Gameduino/4.Demo/asteroids/circuit/Papilio_DUO_LX9.sch b/Gameduino/4.Demo/asteroids/circuit/Papilio_DUO_LX9.sch deleted file mode 100644 index cc401de..0000000 --- a/Gameduino/4.Demo/asteroids/circuit/Papilio_DUO_LX9.sch +++ /dev/null @@ -1,588 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 2000-1-1T10:10:10 - - - - - - - - - 2013-12-23T3:6:50 - - - - - - 2014-12-11T0:1:18 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 2014-12-11T18:43:10 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 2014-12-10T23:34:26 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Version: 1.0 - Replace DUO_SW1 with a Pulldown if you want the ATmega32U4 chip to run when this circuit is loaded. - - - - - - - Replace DUO_SW1 with a Pullup if you want to disable the ATmega32U4 chip when this circuit is loaded. - - Papilio DUO Reset - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Put 'SW1' in the down position for the FPGA to run. - Put 'SW0' in the down position for the Arduino to run. - - - - - - - - - - \ No newline at end of file diff --git a/Gameduino/4.Demo/asteroids/circuit/Spartan6_Reset.sym b/Gameduino/4.Demo/asteroids/circuit/Spartan6_Reset.sym deleted file mode 100644 index ca850e7..0000000 --- a/Gameduino/4.Demo/asteroids/circuit/Spartan6_Reset.sym +++ /dev/null @@ -1,12 +0,0 @@ - - - BLOCK - 2014-12-10T19:52:54 - - - - - - - - diff --git a/Gameduino/4.Demo/asteroids/circuit/Spartan6_Reset.vhd b/Gameduino/4.Demo/asteroids/circuit/Spartan6_Reset.vhd deleted file mode 100644 index 1f0460b..0000000 --- a/Gameduino/4.Demo/asteroids/circuit/Spartan6_Reset.vhd +++ /dev/null @@ -1,45 +0,0 @@ --------------------------------------------------------------------------------- --- Copyright (c) 1995-2012 Xilinx, Inc. All rights reserved. --------------------------------------------------------------------------------- --- ____ ____ --- / /\/ / --- /___/ \ / Vendor: Xilinx --- \ \ \/ Version : 14.1 --- \ \ Application : --- / / Filename : xil_844_21 --- /___/ /\ Timestamp : 12/10/2014 17:26:31 --- \ \ / \ --- \___\/\___\ --- ---Command: ---Design Name: --- - -library ieee; -use ieee.std_logic_1164.ALL; -use ieee.numeric_std.ALL; -library UNISIM; -use UNISIM.Vcomponents.ALL; - -entity Spartan6_Reset is - port ( reset : in std_logic); -end Spartan6_Reset; - -architecture BEHAVIORAL of Spartan6_Reset is -begin - ---Connect to the startup primitive's reset pin - -STARTUP_SPARTAN6_inst : STARTUP_SPARTAN6 -port map ( - CFGCLK => OPEN, -- 1-bit output: Configuration logic main clock output. - CFGMCLK => OPEN, -- 1-bit output: Configuration internal oscillator clock output. - EOS => OPEN, -- 1-bit output: Active high output signal indicates the End Of Configuration. - CLK => '0', -- 1-bit input: User startup-clock input - GSR => reset, -- 1-bit input: Global Set/Reset input (GSR cannot be used for the port name) - GTS => '0', -- 1-bit input: Global 3-state input (GTS cannot be used for the port name) - KEYCLEARB => '0' -- 1-bit input: Clear AES Decrypter Key input from Battery-Backed RAM (BBRAM) -); - -end BEHAVIORAL; - diff --git a/Gameduino/4.Demo/asteroids/circuit/schematic_papilio_duo.pdf b/Gameduino/4.Demo/asteroids/circuit/schematic_papilio_duo.pdf deleted file mode 100644 index 1683dd9..0000000 Binary files a/Gameduino/4.Demo/asteroids/circuit/schematic_papilio_duo.pdf and /dev/null differ diff --git a/Multiple_Serial_Ports/circuit/PSL_Papilio_One_500K.xise b/Multiple_Serial_Ports/circuit/PSL_Papilio_One_500K.xise index cb5a3be..661ece6 100644 --- a/Multiple_Serial_Ports/circuit/PSL_Papilio_One_500K.xise +++ b/Multiple_Serial_Ports/circuit/PSL_Papilio_One_500K.xise @@ -18,26 +18,32 @@ + + + + + + diff --git a/SigmaDelta_DAC/circuit/PSL_Papilio_DUO_LX9.xise b/SigmaDelta_DAC/circuit/PSL_Papilio_DUO_LX9.xise index a54a830..c72c60d 100644 --- a/SigmaDelta_DAC/circuit/PSL_Papilio_DUO_LX9.xise +++ b/SigmaDelta_DAC/circuit/PSL_Papilio_DUO_LX9.xise @@ -15,721 +15,22 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - + - + - + - + - + - + - - + + @@ -739,7 +40,7 @@ - + @@ -1105,14 +406,6 @@ - - - - - - - - diff --git a/SigmaDelta_DAC/circuit/PSL_Papilio_Pro_LX9.xise b/SigmaDelta_DAC/circuit/PSL_Papilio_Pro_LX9.xise index 0683743..65e2947 100644 --- a/SigmaDelta_DAC/circuit/PSL_Papilio_Pro_LX9.xise +++ b/SigmaDelta_DAC/circuit/PSL_Papilio_Pro_LX9.xise @@ -15,925 +15,30 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - + + - - + + - - + + - - + + - + - + - + @@ -1298,14 +403,6 @@ - - - - - - - - diff --git a/Template_DesignLab_Library/circuit/PSL_Papilio_DUO_LX9.xise b/Template_DesignLab_Library/circuit/PSL_Papilio_DUO_LX9.xise index 55ead77..c72c60d 100644 --- a/Template_DesignLab_Library/circuit/PSL_Papilio_DUO_LX9.xise +++ b/Template_DesignLab_Library/circuit/PSL_Papilio_DUO_LX9.xise @@ -9,757 +9,28 @@ - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - + - + - + - + @@ -1135,14 +406,6 @@ - - - - - - - - diff --git a/Template_DesignLab_Library/circuit/PSL_Papilio_One_250K.xise b/Template_DesignLab_Library/circuit/PSL_Papilio_One_250K.xise index 71c2f86..55685ae 100644 --- a/Template_DesignLab_Library/circuit/PSL_Papilio_One_250K.xise +++ b/Template_DesignLab_Library/circuit/PSL_Papilio_One_250K.xise @@ -9,765 +9,40 @@ - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + - + + - + + - + - - + + + - + - + @@ -1091,14 +366,6 @@ - - - - - - - - diff --git a/Template_DesignLab_Library/circuit/PSL_Papilio_One_500K.xise b/Template_DesignLab_Library/circuit/PSL_Papilio_One_500K.xise index 6370d06..661ece6 100644 --- a/Template_DesignLab_Library/circuit/PSL_Papilio_One_500K.xise +++ b/Template_DesignLab_Library/circuit/PSL_Papilio_One_500K.xise @@ -9,773 +9,50 @@ - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + - + + - + + - + + - + + - + - + + - + - + @@ -1099,14 +376,6 @@ - - - - - - - - diff --git a/Template_DesignLab_Library/circuit/PSL_Papilio_Pro_LX9.xise b/Template_DesignLab_Library/circuit/PSL_Papilio_Pro_LX9.xise index 3c580c3..65e2947 100644 --- a/Template_DesignLab_Library/circuit/PSL_Papilio_Pro_LX9.xise +++ b/Template_DesignLab_Library/circuit/PSL_Papilio_Pro_LX9.xise @@ -9,765 +9,36 @@ - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - + + - - + + - - + + - + - + - + @@ -1132,14 +403,6 @@ - - - - - - - - diff --git a/Template_DesignLab_Library_Wishbone_Schematic/circuit/PSL_Papilio_One_250K.xise b/Template_DesignLab_Library_Wishbone_Schematic/circuit/PSL_Papilio_One_250K.xise index 616da4c..55685ae 100644 --- a/Template_DesignLab_Library_Wishbone_Schematic/circuit/PSL_Papilio_One_250K.xise +++ b/Template_DesignLab_Library_Wishbone_Schematic/circuit/PSL_Papilio_One_250K.xise @@ -18,18 +18,22 @@ + + + + diff --git a/Template_DesignLab_Library_Wishbone_Schematic/circuit/PSL_Papilio_One_500K.xise b/Template_DesignLab_Library_Wishbone_Schematic/circuit/PSL_Papilio_One_500K.xise index cb5a3be..661ece6 100644 --- a/Template_DesignLab_Library_Wishbone_Schematic/circuit/PSL_Papilio_One_500K.xise +++ b/Template_DesignLab_Library_Wishbone_Schematic/circuit/PSL_Papilio_One_500K.xise @@ -18,26 +18,32 @@ + + + + + + diff --git a/Template_DesignLab_Library_Wishbone_Schematic/circuit/PSL_Papilio_Pro_LX9.xise b/Template_DesignLab_Library_Wishbone_Schematic/circuit/PSL_Papilio_Pro_LX9.xise index 517a17c..65e2947 100644 --- a/Template_DesignLab_Library_Wishbone_Schematic/circuit/PSL_Papilio_Pro_LX9.xise +++ b/Template_DesignLab_Library_Wishbone_Schematic/circuit/PSL_Papilio_Pro_LX9.xise @@ -9,730 +9,36 @@ - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - + + - - + + - - + + - + - + - + @@ -1097,14 +403,6 @@ - - - - - - - - diff --git a/Template_DesignLab_Library_Wishbone_VHDL/circuit/PSL_Papilio_One_250K.xise b/Template_DesignLab_Library_Wishbone_VHDL/circuit/PSL_Papilio_One_250K.xise index 616da4c..55685ae 100644 --- a/Template_DesignLab_Library_Wishbone_VHDL/circuit/PSL_Papilio_One_250K.xise +++ b/Template_DesignLab_Library_Wishbone_VHDL/circuit/PSL_Papilio_One_250K.xise @@ -18,18 +18,22 @@ + + + + diff --git a/Template_DesignLab_Library_Wishbone_VHDL/circuit/PSL_Papilio_One_500K.xise b/Template_DesignLab_Library_Wishbone_VHDL/circuit/PSL_Papilio_One_500K.xise index cb5a3be..661ece6 100644 --- a/Template_DesignLab_Library_Wishbone_VHDL/circuit/PSL_Papilio_One_500K.xise +++ b/Template_DesignLab_Library_Wishbone_VHDL/circuit/PSL_Papilio_One_500K.xise @@ -18,26 +18,32 @@ + + + + + + diff --git a/Template_DesignLab_Library_Wishbone_VHDL/circuit/PSL_Papilio_Pro_LX9.xise b/Template_DesignLab_Library_Wishbone_VHDL/circuit/PSL_Papilio_Pro_LX9.xise index 517a17c..65e2947 100644 --- a/Template_DesignLab_Library_Wishbone_VHDL/circuit/PSL_Papilio_Pro_LX9.xise +++ b/Template_DesignLab_Library_Wishbone_VHDL/circuit/PSL_Papilio_Pro_LX9.xise @@ -9,730 +9,36 @@ - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - + + - - + + - - + + - + - + - + @@ -1097,14 +403,6 @@ - - - - - - - - diff --git a/Template_PSL_Base/circuit/PSL_Papilio_One_250K.xise b/Template_PSL_Base/circuit/PSL_Papilio_One_250K.xise index 616da4c..55685ae 100644 --- a/Template_PSL_Base/circuit/PSL_Papilio_One_250K.xise +++ b/Template_PSL_Base/circuit/PSL_Papilio_One_250K.xise @@ -18,18 +18,22 @@ + + + + diff --git a/Template_PSL_Base/circuit/PSL_Papilio_One_500K.xise b/Template_PSL_Base/circuit/PSL_Papilio_One_500K.xise index cb5a3be..661ece6 100644 --- a/Template_PSL_Base/circuit/PSL_Papilio_One_500K.xise +++ b/Template_PSL_Base/circuit/PSL_Papilio_One_500K.xise @@ -18,26 +18,32 @@ + + + + + + diff --git a/Video_Audio_Player/Video_Audio_Player.ino b/Video_Audio_Player/Video_Audio_Player.ino new file mode 100644 index 0000000..5c778cd --- /dev/null +++ b/Video_Audio_Player/Video_Audio_Player.ino @@ -0,0 +1,821 @@ +/* + Gadget Factory + Example for Alvaro's ZPUino VGA Adapter + To learn more about using DesignLab please visit http://learn.gadgetfactory.net + + Related library documentation: + Use the Adafruit GFX library to program this VGA adapter. + https://learn.adafruit.com/adafruit-gfx-graphics-library/overview + + created 2015 + by Alvaro Lopes + http://www.gadgetfactory.net + + This example code is in the public domain. + */ + +#define circuit Computing_Shield2 + +#include "jpeglib.h" +#include "Adafruit_GFX.h" +#include "ZPUino_GFX.h" +#include "PLL.h" +#include "menus.h" +#include "SID.h" +#include "YM2149.h" +#include "ymplayer.h" +#include "sidplayer.h" +#include +#include "SmallFS.h" +#include +#include +#include "ramFS.h" +#include "cbuffer.h" +#include + + + +YM2149 ym2149; +YMPLAYER ymplayer; +SID mySid; +SIDPLAYER sidplayer; + +ZPUino_GFX gfx; +static bool menuVisible = true; +static bool sidState = false; +static bool ymState = false; + +#define TIMEOUTMAX 30000 //Timeout for joystick + +//Joystick +#define JSELECT 19 +#define JDOWN 18 +#define JUP 20 +#define JRIGHT 17 +#define JLEFT 21 + +enum kButtonDirection { + Left = 0, + Right = 1, + Up = 2, + Down = 3, + Select = 4, + None = 5 +}; + + +//Image stuff. +int width, height; + + + +#define COLOR_BYTES 2 +#define COLOR_WEIGHT_R 5 +#define COLOR_WEIGHT_G 6 +#define COLOR_WEIGHT_B 5 + +#define COLOR_SHIFT_R (COLOR_WEIGHT_B+COLOR_WEIGHT_G) +#define COLOR_SHIFT_G (COLOR_WEIGHT_B) +#define COLOR_SHIFT_B 0 + + +unsigned short *imgbuf; + + + + +void jpeg_error(jpeg_common_struct*) +{ + printf("Error reading JPEG\r\n"); + while (1) { + } +} + +int readjpeg(const char *file) +{ + jpeg_decompress_struct cinfo; + + jpeg_error_mgr defaultErrorManager; + + cinfo.err = jpeg_std_error(&defaultErrorManager); + + defaultErrorManager.error_exit = &jpeg_error; + + FILE* pFile = fopen(file, "rb"); + if (!pFile) + return -1; + + jpeg_create_decompress(&cinfo); + jpeg_stdio_src(&cinfo, pFile); + jpeg_read_header(&cinfo, TRUE); + jpeg_start_decompress(&cinfo); + + printf("JPEG image info: %d x %d\n", cinfo.image_width, cinfo.image_height); + + unsigned row_stride = cinfo.output_width * cinfo.output_components; + + unsigned char *buffer = (unsigned char*)malloc(row_stride); + + unsigned short v; + uint16_t *imgbuf = gfx.getFramebuffer(); + + while(cinfo.output_scanline < cinfo.image_height) + { + int s = jpeg_read_scanlines(&cinfo, &buffer, 1); + printf("%d\r\n",cinfo.output_scanline); + unsigned char *ptr = buffer; + int x; + for (x=0; x> (8 - COLOR_WEIGHT_R)); + uint16_t g = (ptr[1] >> (8 - COLOR_WEIGHT_G)); + uint16_t b = (ptr[2] >> (8 - COLOR_WEIGHT_B)); + v = (r<<(COLOR_SHIFT_R)) + (g<deleteChilds(); + if (entry.valid()) { + do { + bool skip=false; + if (filter_ext) { + if (!entry.endsWith(filter_ext)) { + Serial.println("Skipping file."); + skip=true; + } + } + if (!skip) { + entry.getName(fileNames[i]); + menu->appendChild(new menuItem( fileNames[i], &onOpenFile, fileNames[i]) ); + } + if (entry.hasNext()) + entry++; + else + break; + i++; + } while (true); + } else { + Serial.println("Nothing in SmallFS..."); + } +} + + +static void createMenus() +{ + subMenu *config = new subMenu("Options"); + + subMenu *play = new subMenu("All Files"); + config->appendChild(play); + play->setParent(config); + createFileSelectionMenu(play); + play->appendChild( new menuItem("< Back",(void(*)(void*))&menuSwitchTo, config) ) ; + + subMenu *sidplay = new subMenu("SID Audio"); + config->appendChild(sidplay); + sidplay->setParent(config); + createFileSelectionMenu(sidplay, ".sid"); + sidplay->appendChild( new menuItem("< Back",(void(*)(void*))&menuSwitchTo, config) ) ; + + subMenu *ymplay = new subMenu("YM2149 Audio"); + config->appendChild(ymplay); + ymplay->setParent(config); + createFileSelectionMenu(ymplay, ".ymd"); + ymplay->appendChild( new menuItem("< Back",(void(*)(void*))&menuSwitchTo, config) ) ; + + config->appendChild( new menuItem("Pause All", &allStop) ); + config->appendChild( new menuItem("Play All Chips", &allStart) ); + + config->appendChild( new menuItem("GFX Test", &gfxTest) ); +// config->appendChild( new menuItem("Image", &imgTest) ); + +// config->appendChild( new menuItem("SID Pause", &sidStop) ); +// config->appendChild( new menuItem("YM Pause", &ymStop) ); +// +// config->appendChild( new menuItem("SID Play", &sidStart) ); +// config->appendChild( new menuItem("YM Play", &ymStart) ); + + config->appendChild( new menuItem("Exit",(void(*)(void*))&exitMenus) ) ; + + menuSetTop(config); +} + +bool timer(void*) +{ + sidplayercounter++; + //modplayer.zpu_interrupt(); + ymplayer.zpu_interrupt(); + if (sidplayercounter == 340) { + sidplayer.zpu_interrupt(); + sidplayercounter = 1; + } + return true; +} + +void setup() +{ + //delay(3000); + Serial.begin(115200); + Serial.println("Starting"); + + //Start SmallFS + if (SmallFS.begin()<0) { + Serial.println("No SmalLFS found."); + } + else{ + Serial.println("SmallFS Started."); + } + + //gfx.begin(MODE_640x480); + gfx.begin(MODE_320x240); + //gfx.begin( &modeline_640x480_60 ); + createMenus(); + menuInit(128,128); + //menuInit(256,256); + menusSetRenderer(&gfx); + + + //Set Wishbone slots for audio chips + mySid.setup(8); + sidplayer.setup(8); + + ym2149.setup(6); + ymplayer.setup(&ym2149,6); + + ///Give some volume + ym2149.V1.setVolume(11); + ym2149.V2.setVolume(11); + ym2149.V3.setVolume(11); + mySid.setVolume(15); + + sidplayer.loadFile("track1.sid"); + ymplayer.loadFile("track2.ymd"); + + //Setup timer for YM and mod players, this generates an interrupt at 1700hz + Timers.begin(); + int r = Timers.periodicHz(17000, timer, 0, 1); + if (r<0) { + Serial.println("Fatal error!"); + } + + //Setup Joystick + pinMode(JSELECT, INPUT); + pinMode(JUP, INPUT); + pinMode(JDOWN, INPUT); + pinMode(JLEFT, INPUT); + pinMode(JRIGHT, INPUT); + + timeout=TIMEOUTMAX; + showMenu(); + + readjpeg("/smallfs/image.jpg"); +} + +void loop() +{ + if (sidplayer.getPlaying() == 1) + sidplayer.audiofill(); + + if (ymplayer.getPlaying() == 1) + ymplayer.audiofill(); + + timeout--; + if (timeout==0) { + timeout = TIMEOUTMAX; + //Serial.println("timeout"); + if (digitalRead(JUP)) { + timeout = TIMEOUTMAX; + buttonPressed = Up; + Serial.println("up"); + } else if (digitalRead(JDOWN)) { + timeout = TIMEOUTMAX; + buttonPressed = Down; + Serial.println("down"); + } else if (digitalRead(JRIGHT)) { + timeout = TIMEOUTMAX; + buttonPressed = Right; + Serial.println("right"); + } else if (digitalRead(JLEFT)) { + timeout = TIMEOUTMAX; + buttonPressed = Left; + Serial.println("left"); + } else if (digitalRead(JSELECT)) { + timeout = TIMEOUTMAX; + buttonPressed = Select; + Serial.println("select"); + } + } + + + + if (buttonPressed < 5) { + //char s = (char)Serial.read(); + if (menuVisible) { + if (buttonPressed == Up) { + Serial.println("up"); + moveMenuUp(); + } + if (buttonPressed == Down) { + Serial.println("down"); + moveMenuDown(); + } + if (buttonPressed == Right) { + //Serial.println("action"); + menuAction(); + } + if (buttonPressed == Left) { + //exitMenus(0); + menuReset(); + menuShowTop(); + } + } else { + if (buttonPressed == Select) { + Serial.println("show"); + showMenu(); + } + } + buttonPressed = None; + } +} + +// Assign human-readable names to some common 16-bit color values: +#define BLACK 0x0000 +#define BLUE 0x001F +#define RED 0xF800 +#define GREEN 0x07E0 +#define CYAN 0x07FF +#define MAGENTA 0xF81F +#define YELLOW 0xFFE0 +#define WHITE 0xFFFF + +#define min(x,y) ((x)>(y) ? (y):(x)) + +void test() +{ + Serial.println(F("Benchmark Time (microseconds)")); + + Serial.print(F("Screen fill ")); + Serial.println(testFillScreen()); + delay(500); + + Serial.print(F("Text ")); + Serial.println(testText()); + delay(3000); + + Serial.print(F("Lines ")); + Serial.println(testLines(CYAN)); + delay(500); + + Serial.print(F("Horiz/Vert Lines ")); + Serial.println(testFastLines(RED, BLUE)); + delay(500); + + Serial.print(F("Rectangles (outline) ")); + Serial.println(testRects(GREEN)); + delay(500); + + Serial.print(F("Rectangles (filled) ")); + Serial.println(testFilledRects(YELLOW, MAGENTA)); + delay(500); + + Serial.print(F("Circles (filled) ")); + Serial.println(testFilledCircles(10, MAGENTA)); + + Serial.print(F("Circles (outline) ")); + Serial.println(testCircles(10, WHITE)); + delay(500); + + Serial.print(F("Triangles (outline) ")); + Serial.println(testTriangles()); + delay(500); + + Serial.print(F("Triangles (filled) ")); + Serial.println(testFilledTriangles()); + delay(500); + + Serial.print(F("Rounded rects (outline) ")); + Serial.println(testRoundRects()); + delay(500); + + Serial.print(F("Rounded rects (filled) ")); + Serial.println(testFilledRoundRects()); + delay(500); + + Serial.println(F("Done!")); +} + +unsigned long testFillScreen() { + unsigned long start = micros(); + gfx.fillScreen(BLACK); + gfx.fillScreen(RED); + gfx.fillScreen(GREEN); + gfx.fillScreen(BLUE); + gfx.fillScreen(BLACK); + return micros() - start; +} + +unsigned long testText() { + gfx.fillScreen(BLACK); + unsigned long start = micros(); + gfx.setCursor(0, 0); + gfx.setTextColor(WHITE); gfx.setTextSize(1); + gfx.println("Hello World!"); + gfx.setTextColor(YELLOW); gfx.setTextSize(2); + gfx.println(1234.56); + gfx.setTextColor(RED); gfx.setTextSize(3); + gfx.println(0xDEADBEEF, HEX); + gfx.println(); + gfx.setTextColor(GREEN); + gfx.setTextSize(5); + gfx.println("Groop"); + gfx.setTextSize(2); + gfx.println("I implore thee,"); + gfx.setTextSize(1); + gfx.println("my foonting turlingdromes."); + gfx.println("And hooptiously drangle me"); + gfx.println("with crinkly bindlewurdles,"); + gfx.println("Or I will rend thee"); + gfx.println("in the gobberwarts"); + gfx.println("with my blurglecruncheon,"); + gfx.println("see if I don't!"); + return micros() - start; +} + +unsigned long testLines(uint16_t color) { + unsigned long start, t; + int x1, y1, x2, y2, + w = gfx.width(), + h = gfx.height(); + + gfx.fillScreen(BLACK); + + x1 = y1 = 0; + y2 = h - 1; + start = micros(); + for(x2=0; x20; i-=6) { + i2 = i / 2; + start = micros(); + gfx.fillRect(cx-i2, cy-i2, i, i, color1); + t += micros() - start; + // Outlines are not included in timing results + gfx.drawRect(cx-i2, cy-i2, i, i, color2); + } + + return t; +} + +unsigned long testFilledCircles(uint8_t radius, uint16_t color) { + unsigned long start; + int x, y, w = gfx.width(), h = gfx.height(), r2 = radius * 2; + + gfx.fillScreen(BLACK); + start = micros(); + for(x=radius; x10; i-=5) { + start = micros(); + gfx.fillTriangle(cx, cy - i, cx - i, cy + i, cx + i, cy + i, + gfx.buildColor(0, i, i)); + t += micros() - start; + gfx.drawTriangle(cx, cy - i, cx - i, cy + i, cx + i, cy + i, + gfx.buildColor(i, i, 0)); + } + + return t; +} + +unsigned long testRoundRects() { + unsigned long start; + int w, i, i2, + cx = gfx.width() / 2 - 1, + cy = gfx.height() / 2 - 1; + + gfx.fillScreen(BLACK); + w = min(gfx.width(), gfx.height()); + start = micros(); + for(i=0; i20; i-=6) { + i2 = i / 2; + gfx.fillRoundRect(cx-i2, cy-i2, i, i, i/8, gfx.buildColor(0, i, 0)); + } + + return micros() - start; +} diff --git a/Video_Audio_Player/smallfs/image.jpg b/Video_Audio_Player/smallfs/image.jpg new file mode 100644 index 0000000..1399742 Binary files /dev/null and b/Video_Audio_Player/smallfs/image.jpg differ diff --git a/Video_Audio_Player/smallfs/track1.sid b/Video_Audio_Player/smallfs/track1.sid new file mode 100644 index 0000000..dd90512 Binary files /dev/null and b/Video_Audio_Player/smallfs/track1.sid differ diff --git a/Video_Audio_Player/smallfs/track1.ymd b/Video_Audio_Player/smallfs/track1.ymd new file mode 100644 index 0000000..b2f3ce8 Binary files /dev/null and b/Video_Audio_Player/smallfs/track1.ymd differ diff --git a/Video_Audio_Player/smallfs/track2.sid b/Video_Audio_Player/smallfs/track2.sid new file mode 100644 index 0000000..386db0a Binary files /dev/null and b/Video_Audio_Player/smallfs/track2.sid differ diff --git a/Video_Audio_Player/smallfs/track2.ymd b/Video_Audio_Player/smallfs/track2.ymd new file mode 100644 index 0000000..cd0ade0 Binary files /dev/null and b/Video_Audio_Player/smallfs/track2.ymd differ diff --git a/Video_Audio_Player/smallfs/track3.sid b/Video_Audio_Player/smallfs/track3.sid new file mode 100644 index 0000000..c17a1e3 Binary files /dev/null and b/Video_Audio_Player/smallfs/track3.sid differ diff --git a/Video_Audio_Player/smallfs/track3.ymd b/Video_Audio_Player/smallfs/track3.ymd new file mode 100644 index 0000000..50d9eed Binary files /dev/null and b/Video_Audio_Player/smallfs/track3.ymd differ diff --git a/WING_Analog/circuit/PSL_Papilio_One_250K.xise b/WING_Analog/circuit/PSL_Papilio_One_250K.xise index 616da4c..55685ae 100644 --- a/WING_Analog/circuit/PSL_Papilio_One_250K.xise +++ b/WING_Analog/circuit/PSL_Papilio_One_250K.xise @@ -18,18 +18,22 @@ + + + + diff --git a/WING_Analog/circuit/PSL_Papilio_One_500K.xise b/WING_Analog/circuit/PSL_Papilio_One_500K.xise index cb5a3be..661ece6 100644 --- a/WING_Analog/circuit/PSL_Papilio_One_500K.xise +++ b/WING_Analog/circuit/PSL_Papilio_One_500K.xise @@ -18,26 +18,32 @@ + + + + + + diff --git a/WiiChuck/WiiChuck.ino b/WiiChuck/WiiChuck.ino index 9093b65..ed11053 100644 --- a/WiiChuck/WiiChuck.ino +++ b/WiiChuck/WiiChuck.ino @@ -1,6 +1,6 @@ /* - Gadget Factory - Project Name - Use this as a template for DesignLab ZPUino System on Chip Projects + Gadget Factory - Wii Chuck example + An example of using the Wii Chuck Wing with the Nintendo Wii Chuck Controller. To learn more about using DesignLab please visit http://learn.gadgetfactory.net Tutorials: @@ -8,17 +8,19 @@ Related library documentation: Hardware: + WiiChuck Wing connected to AL WingSlot Special Notes: + Only works on Papilio DUO and Papilio Pro boards. - created 2014 + created 2015 by Jack Gassett http://www.gadgetfactory.net This example code is in the public domain. */ -//#define circuit WiiChuck +#define circuit ZPUino_Wings #include "WiiChuck.h" #include "i2c.h" diff --git a/WiiChuck/circuit/250K/papilio_one_250k.bit b/WiiChuck/circuit/250K/papilio_one_250k.bit deleted file mode 100644 index 82c566b..0000000 Binary files a/WiiChuck/circuit/250K/papilio_one_250k.bit and /dev/null differ diff --git a/WiiChuck/circuit/500K/papilio_one_500k.bit b/WiiChuck/circuit/500K/papilio_one_500k.bit deleted file mode 100644 index dec9d53..0000000 Binary files a/WiiChuck/circuit/500K/papilio_one_500k.bit and /dev/null differ diff --git a/WiiChuck/circuit/DUO_LX9/COMM_zpuino_wb_I2C.spl b/WiiChuck/circuit/DUO_LX9/COMM_zpuino_wb_I2C.spl deleted file mode 100644 index 334d8b2..0000000 --- a/WiiChuck/circuit/DUO_LX9/COMM_zpuino_wb_I2C.spl +++ /dev/null @@ -1,7 +0,0 @@ -[Inputs] -=wishbone_in[100:0]= -[Outputs] -=wishbone_out[100:0]= -[BiDir] -i2c_scl -i2c_sda diff --git a/WiiChuck/circuit/DUO_LX9/Papilio_DUO_LX9.ngc b/WiiChuck/circuit/DUO_LX9/Papilio_DUO_LX9.ngc deleted file mode 100644 index 0ae0a7d..0000000 --- a/WiiChuck/circuit/DUO_LX9/Papilio_DUO_LX9.ngc +++ /dev/null @@ -1,3 +0,0 @@ -XILINX-XDB 0.1 STUB 0.1 ASCII -XILINX-XDM V1.6e -$01:=~7<88:0<=>?0123456789::46>?0123057739:;<=??04761032==1;<=?>0:23446789;;=?03:845638=:;==5?0022446698::<<>=;1324>6689::<=?>1122457739;:<=?>01224576811;=;<=>?002841678=:;<=>?0523<>6?89:;<=64090BA@CB02:3MLONA@3851=689::<6??0133457789;:=?0992456699;:j6??1;KMKPR=mq~T|d`|_hllqq:6890;285>008JJUSS2~cxdoaae^qokqY68Ve~x1??0;2=60=6880BB][[:vkplgiimVygcyQ>1^mvp97783:5>85>008JJUSS2~cxdoaae^qokqY6:Ve~x1??0;2=60=6880BB][[:vkplgiimVygcyQ>3^mvp97783:5>85>008JJUSS2~cxdoaae^qokqY650?07?4662@D[YY4xirjakkcX{eeS5Q`uu>245<76;>0==?5IORVP?qn{ahdbhQ|lnv\=Zir|5;;<7>1269244>:NWWTPR=mq~T|d`|_nww8467294996??1;MVPUSS2~cxdoaae^qokqY68Vce0<>?:1<11>7793E^X][[:vkplgiimVygcyQ>1^km8467294996??1;MVPUSS2~cxdoaae^qokqY6:Vce0<>?:1<11>7793E^X][[:vkplgiimVygcyQ>3^km8467294996??1;MVPUSS2~cxdoaae^qokqY6?:1<10>7793E^X][[:vkplgiimVygcyQ:_hl?556=878?7<>>:NWWTPR=`ycnb`j_rnlpZ0Xag6:<=4?>368557=G\^[YY4xirjakkcX{eeS5Qfn=334?69:=1:<<4@UURVP?qn{ahdbhQ|lnv\=Zoi48:;6=0=9:335?IR\Y__6zg|hcmmaZukg}U}eik`_nww8467294?70028547799;;<=??1133<>7698;:==??;032547699:;<=>>0028547698;:==??112355=698;:9e:035?IR\Y__6j~fo^`vwZir|58;<7>1119147458;:;<=?0;:3<0;2;i794@UURVP?uuidU|nR}jl^k?7?69:2?:86;>41:814@ENOLM86;:11681026991>98;?052341678=::<6;:54107732=<;:==6454760126991>98;:5472547689::<6;:5476@0@ANOLMJK645474103302?N9I;:29034=67:2=M>66?119;4=6?81:3<5>701:24>>E0H234LLMB@@;FD773H8J>K0:CBEDGFJOKJMLON8133?DDFJHHJM=??113341=FMH827L\K_SGPAQc3Hxoyd``_0c8EwbrageT==??;@pgqlhhW8:TEBLZF`9BvasnffU:=<>4AsfvmkiX98UBCO[Ia:Cq`poigV;9==5NrewjjjY6:VCDNXHn;@pgqlhhW89:<6O}dtkmkZ74W@EIYKo4AsfvmkiX9=;;7L|kuhll[42XAFH^Jl5NrewjjjY6=8:0Mjziom\50YNGK_Mm6O}dtkmkZ71991J~i{fnn]22ZOHJ\Lj7L|kuhll[41682Kyhxgao^34[LIE]Ok0Mjziom\5=773Hxoyd``_0:\MJDRNh1J~i{fnn]2=46Gul|cecR0:Cq`poigV8:SDAMUGc8EwbrageT>???;@pgqlhhW;8TEBLZF`9BvasnffU9?<>4AsfvmkiX::UBCO[Ia:Cq`poigV8?==5NrewjjjY5991J~i{fnn]1=ZOHJ\Lm7L|kuhll[7YNGK_M56O}dtkmkZ5f3Hxoyd``_2224>Gul|cecR=?_HMAQCg?PIN@VBd=FzmbbbQ<2028EwbrageT??QFOCWEe>Gul|cecR=<119BvasnffU8?RG@BTDb?Dtc}`ddS>:>0:Cq`poigV9?SDAMUGc8EwbrageT?8??;@pgqlhhW:?TEBLZF`9BvasnffU8:<>4AsfvmkiX;?UBCO[Ia:Cq`poigV9<==5NrewjjjY4?VCDNXHn;@pgqlhhW:2:<6O}dtkmkZ5?W@EIYKo4AsfvmkiX;0;;7L|kuhll[6?XAFH^Jk5NrewjjjY4W@EIYK74AsfvmkiXGul|cecR:=_HMAQCgGul|cecR::119BvasnffU?9RG@BTDb?Dtc}`ddS98>0:Cq`poigV>=SDAMUGc8EwbrageT8:??;@pgqlhhW==TEBLZF`9BvasnffU?4<>4AsfvmkiX<1UBCO[Ia:Cq`poigV>2==5NrewjjjY31VCDNXHi;@pgqlhhW=UBCO[I9:Cq`poigV?j7L|kuhll[06682Kyhxgao^73[LIE]Ok0Mjziom\14773Hxoyd``_43\MJDRNh1J~i{fnn]6646Gul|cecR9i;@pgqlhhW>UBCO[I9:Cq`poigV2m7L|kuhll[=YNGK_M56O}dtkmkZ?a3Hxoyd``_8]JKGSA92H?7O[IG99AQVYNFOE:7N<4C108G44EKCOR:4=74CNONMQRBL880OBCB_{rvmkiXkUB>N94CSGBP@B63M80H=<4D0f8@ATXIECLB@KAT39GB7=CA>1OYBQ\W0a8@PIX[^;TEO[I1:G1?@2682O=:;O=23C167G5:;>0IL@502L?89;;4508BA773ON<9O7<1DA50D>58:1MHH=4FEP7?CBUM:1MH^:4FEQF0>@CW880JH:4FDGF0>@BNO>0JK>>119EB547:98;<=;895IFD:7?C@B18:0JKKNFG0BBC4FNO8J46HIECDEBC773OLMHKJIDGFE@CBAL=1MJKK7;GDEB467811MJKHIFG@24>@ANOLMJK??107710773OLMJKHIF567112388:0JKHIFGDEA0CAM?J4?>:;GMQG@7?5F339J07=N==1BNXH6;HLJPVRF\L90ECX=;HM0?LIE=2CDNXH<;MGG6>JN>2FDOFKK7:NLCLEFD=1GYY?;;MWW61=K]]9?7A[[459OQQ333E__:85BUYAZ1>KRPO=97C>=;O30?K77;2D:>>5A1518J4043G;3>6@=3:L146=I:;>0B?;;4:L113295A2767?K41>=1E>;9<;O137>H4::1E?9=4N240?K5002D8;RLZFF18J6>43G92>6@;3:L746=I<890B9<<;O607>H3<:1E88=4N540?K20;2D?4>5A4818J0643G?:?6@:229M16587C;:3:L626=I=>90B86<;O7:6>H1;2D=<>5A6018J3443G<8?6@9429M205090B:><;O527>H0::1E;>=4N660?K12;2D<:>5A7618J2>43G=2>6@73:L;46=I0890B5<<;O:07>H?<:1E48=4N940?K>0;2D34>5A8818J<643G3:?6@6229M=6587C7:3:L:26=I1>90B46<;O;:3>HB\^EYG95AOOG2?J2Vd3Y$9<<=>001\H1=WI[^j7]GA_CWPMA^e3YCESO[\N@OF=>VLWAF^XCC9;QQGKKCa3Yk{eag`_EWL[I^>9>1[m}gcin]GQJYPagmT\d``uu38U4=U;2XSH<5\109PLWC@WLR_^LM[_OE@a>UOZLMTAD@PSHXF2>UH][IN:6]_I^AP<>UWAVGB_B64SQK\IJUN?2Y[ER]LK79PVQ_WM?1XXLZZS09W7>R_L=1_U]Kl;TQFVZPN[@HGI>5YCB;8RLCPW]S[I45Xioe\CUOH9m1SEAGAX,ZGF%6)9)Y_YO.?.0"BWFON:<1S@UGP45-TmkaSqyoTab}f_EJ?1;Jho`i_~~z>249[H]OX<=%\eci[yqg\ijunWMB7:3B`ghaWvvr6:<1S@UGP45-TmkaSqyoTab}f_EJ?3;Jho`i_~~z>179[H]OX<=%{ec>?/r{mg*`a98<0TAVF_56,tlh78&yrbn!if337?]J_AV>?#}ga01-p}ke({8<0TAVF_56,tlh79&yrbn!if035?]J_AV>?#}ga00-p}ke(no8:86VCXH]70*vnf9;$t`l/r35?]J_AV>?#}ga03-p}ke(no;::6VCXH]70*vnf98$t`l/gd151=_DQCT89!io21+vik&y::6VCXH]70*vnf99$t`l/gd253=_DQCT89!io20+vik&lm><:4XMZJ[12(x`d;?"}vnb-p53=_DQCT89!io27+vik&lm=<84XMZJ[12(x`d;8"}vnb-eb7733QFSER:;/qkm41)tqgi$<84XMZJ[12(x`d;9"}vnb-eb4713QFSER:;/qkm40)tqgi$jk<>4:ZO\LY3<&zbb=; sxl`+v713QFSER:;/qkm43)tqgi$jk?>6:ZO\LY3<&zbb=8 sxl`+c`59=1S@UGP45-smk61'zseo"}>6:ZO\LY3<&zbb=9 sxl`+c`69?1S@UGP45-smk60'zseo"hi2068\I^NW=>$|d`?7.qzjf)t9?1S@UGP45-smk6?'zseo"hi1048\I^NW=>$|d`?8.qzjf)an;;?7UBWI^67+uoi81%xucm s048\I^NW=>$|d`?9.qzjf)an8;=7UBWI^67+uoi80%xucm fg020>^KP@U?8"~fn1;,w|hd'z;=7UBWI^67+uoi99%xucm fg322>^KP@U?8"~fn02,w|hd'ol9=95WLYK\01)wag;;#~wac.q22>^KP@U?8"~fn03,w|hd'ol:=;5WLYK\01)wag;:#~wac.de642!|yoa,bc46<2RGTDQ;4.rjj45({pdh#~?9;YN[MZ23'yce=9!|yoa,bc76>2RGTDQ;4.rjj42({pdh#kh=159[H]OX<=%{ec?;/r{mg*u6>2RGTDQ;4.rjj43({pdh#kh>179[H]OX<=%{ec?:/r{mg*`a:8>0TAVF_56,tlh6=&yrbn!|179[H]OX<=%{ec?9/r{mg*`a98<0TAVF_56,tlh6>&yrbn!if337?]J_AV>?#}ga17-p}ke({8<0TAVF_56,tlh6?&yrbn!if035?]J_AV>?#}ga16-p}ke(no8:86VCXH]70*vnf8=$t`l/r35?]J_AV>?#}ga19-p}ke(no;::6VCXH]70*vnf82$t`l/gd151=_DQCT89!io3;+vik&y::6VCXH]70*vnf83$t`l/gd253=_DQCT89!io3:+vik&lm><:4XMZJ[12(x`d:5"}vnb-p53=_DQCT89!io03+vik&lm=<84XMZJ[12(x`d9<"}vnb-eb7733QFSER:;/qkm65)tqgi$<84XMZJ[12(x`d9="}vnb-eb4713QFSER:;/qkm64)tqgi$jk<>4:ZO\LY3<&zbb?? sxl`+v713QFSER:;/qkm67)tqgi$jk?>6:ZO\LY3<&zbb?< sxl`+c`59=1S@UGP45-smk45'zseo"}>6:ZO\LY3<&zbb?= sxl`+c`69?1S@UGP45-smk44'zseo"hi2068\I^NW=>$|d`=3.qzjf)t9?1S@UGP45-smk43'zseo"hi1048\I^NW=>$|d`=4.qzjf)an;;?7UBWI^67+uoi:=%xucm s048\I^NW=>$|d`=5.qzjf)an8;=7UBWI^67+uoi:<%xucm fg020>^KP@U?8"~fn37,w|hd'z;=7UBWI^67+uoi:?%xucm fg322>^KP@U?8"~fn34,w|hd'ol9=95WLYK\01)wag8=#~wac.q22>^KP@U?8"~fn35,w|hd'ol:=;5WLYK\01)wag8<#~wac.de6425!|yoa,w404!|yoa,bc46<2RGTDQ;4.rjj7?({pdh#~?9;YN[MZ23'yce?=!|yoa,bc76>2RGTDQ;4.rjj66({pdh#kh=159[H]OX<=%{ec=?/r{mg*u6>2RGTDQ;4.rjj67({pdh#kh>179[H]OX<=%{ec=>/r{mg*`a:8>0TAVF_56,tlh49&yrbn!|179[H]OX<=%{ec==/r{mg*`a98<0TAVF_56,tlh4:&yrbn!if337?]J_AV>?#}ga33-p}ke({8<0TAVF_56,tlh4;&yrbn!if035?]J_AV>?#}ga32-p}ke(no8:86VCXH]70*vnf:9$t`l/r35?]J_AV>?#}ga35-p}ke(no;::6VCXH]70*vnf:>$t`l/gd151=_DQCT89!io17+vik&y::6VCXH]70*vnf:?$t`l/gd253=_DQCT89!io16+vik&lm><:4XMZJ[12(x`d89"}vnb-p53=_DQCT89!io15+vik&lm=<84XMZJ[12(x`d8:"}vnb-eb7733QFSER:;/qkm73)tqgi$<84XMZJ[12(x`d8;"}vnb-eb4713QFSER:;/qkm72)tqgi$jk<>4:ZO\LY3<&zbb>9 sxl`+v713QFSER:;/qkm7=)tqgi$jk?>6:ZO\LY3<&zbb>6 sxl`+c`59=1S@UGP45-smk5?'zseo"}>6:ZO\LY3<&zbb>7 sxl`+c`69?1S@UGP45-smk5>'zseo"hi2068\I^NW=>$|d`<9.qzjf)t9?1S@UGP45-smk27'zseo"hi1048\I^NW=>$|d`;0.qzjf)an;;?7UBWI^67+uoi<9%xucm s048\I^NW=>$|d`;1.qzjf)an8;=7UBWI^67+uoi<8%xucm fg020>^KP@U?8"~fn53,w|hd'z;=7UBWI^67+uoi<;%xucm fg322>^KP@U?8"~fn50,w|hd'ol9=95WLYK\01)wag>9#~wac.q22>^KP@U?8"~fn51,w|hd'ol:=;5WLYK\01)wag>8#~wac.de642?#~wac.de5402RGTDQ;4.rjj10({pdh#kh=159[H]OX<=%{ec:9/r{mg*u6>2RGTDQ;4.rjj11({pdh#kh>179[H]OX<=%{ec:8/r{mg*`a:8>0TAVF_56,tlh3?&yrbn!|179[H]OX<=%{ec:7/r{mg*`a98<0TAVF_56,tlh30&yrbn!if337?]J_AV>?#}ga49-p}ke({8<0TAVF_56,tlh31&yrbn!if035?]J_AV>?#}ga48-p}ke(no8:86VCXH]70*vnf=3$t`l/r35?]J_AV>?#}ga51-p}ke(no;::6VCXH]70*vnf<:$t`l/gd151=_DQCT89!io73+vik&y::6VCXH]70*vnf<;$t`l/gd253=_DQCT89!io72+vik&lm><:4XMZJ[12(x`d>="}vnb-p53=_DQCT89!io71+vik&lm=<84XMZJ[12(x`d>>"}vnb-eb7733QFSER:;/qkm17)tqgi$<84XMZJ[12(x`d>?"}vnb-eb4713QFSER:;/qkm16)tqgi$jk<>4:ZO\LY3<&zbb8= sxl`+v13:ZO\LY21&K]^^^F_LKPK41f:ZO\LY21&yym`Qfnrv,IhsWg:;4=?>00d8\I^NW<3$ob_hlpp*Kj}qUe<=6?1032b>^KP@U>5"}}al]jjvr(EdsSc>?813154`79<;:j6VCXH]6=*uuidUbb~z Mlw{[k6709;==f:ZO\LY21&yym`Qfnrv,IhsWg:;4=?710d8\I^NW<3$ob_hlpp*Kj}qUe<=6?1832a>^KP@U>5"}}al]jjvr(EdsSc>?81025`=_DQCT94!|r`o\mkus'Dg~tR`?092054c708;n7UBWI^7:+vtfeVcey!Bmtz\j56?80;946VCXH]6=*uuidUbb~z Mlw{[jssW~xbxhQjn``oa44>3QFSER;6/rpbiZoi{}%FaxvPotv\swosmVoemobj100:?]J_AV?2#~|nm^kmwq)Je|rTcxzPwskwaZciikfn=?<6;YN[MZ3>'zxjaRgasu-Nip~Xg|~T{g{e^gmegjb9:987UBWI^7:+vtfeVcey!Bmtz\wqgsmR8VS]Y]_33\kZKRPV;;8Ra>359[H]OX=0%x~lcPioqw+HkrpVymykT2\]SSWY59VeTAXVP116\k474<2RGTDQ:9.qqehYnfz~$A`{w_rvbp`]5UVZ\^R<>_n]NQ]Y68=Ud=?=;;YN[MZ3>'zxjaRgasu-Nip~X{}kiV>Q@UU30f>^KP@U>5"}}al]jjvr(EdsS~zntdY1YZ^X:?UdSzgke^ov|Z44WF__=R]X0258\I^NW<3$ob_hlpp*Kj}qUxxlzj[3_\\Z41WfU|eikPmtz\66YH]]88n6VCXH]6=*uuidUbb~z Mlw{[vrf|lQ9QRVP27]l[rocmVg~tR<<_NWW6ZUP8:=0TAVF_4;,wwgjW`dxx"Cbuy]ppdrbS;WTTR<9_n]tmacXe|rT>>Q@UU10f>^KP@U>5"}}al]jjvr(EdsS~zntdY1YZ^X:?UdSzgke^ov|Z44WF__?R]X0258\I^NW<3$ob_hlpp*Kj}qUxxlzj[3_\\Z41WfU|eikPmtz\66YH]]>8n6VCXH]6=*uuidUbb~z Mlw{[vrf|lQ9QRVP27]l[rocmVg~tR<<_NWW0ZUP8:=0TAVF_4;,wwgjW`dxx"Cbuy]ppdrbS;WTTR<9_n]tmacXe|rT>>Q@UU70f>^KP@U>5"}}al]jjvr(EdsS~zntdY1YZ^X:?UdSzgke^ov|Z44WF__9R]X0258\I^NW<3$ob_hlpp*Kj}qUxxlzj[3_\\Z41WfU|eikPmtz\66YH]]<8n6VCXH]6=*uuidUbb~z Mlw{[vrf|lQ9QRVP27]l[rocmVg~tR<<_NWW2ZUP8:=0TAVF_4;,wwgjW`dxx"Cbuy]ppdrbS;WTTR<9_n]tmacXe|rT>>Q@UU50f>^KP@U>5"}}al]jjvr(EdsS~zntdY1YZ^X:?UdSzgke^ov|Z44WF__;R]X0258\I^NW<3$ob_hlpp*Kj}qUxxlzj[3_\\Z41WfU|eikPmtz\66YH]]28n6VCXH]6=*uuidUbb~z Mlw{[vrf|lQ9QRVP27]l[rocmVg~tR<<_NWW0TAVF_4;,wwgjW`dxx"Cbuy]ppwiemVkoh?>1c9[H]OX=0%x~lcPioqw+JBCZ;Ue[H?l;YN[MZ3>'zxjaRgasu-\j5771VcezW`d}=<94XMZJ[0?({{kfSd`|t.c`oZw592RGTDQ:9.qqehYnfz~$mij}_rcuaZw;9949=6VCXH]6=*uuidUbb~z aefq[vgqmV{7=<0=1:ZO\LY21&yym`Qfnrv,eabuWzk}iR313<15>^KP@U>5"}}al]jjvr(imnyS~oye^s?568592RGTDQ:9.qqehYnfz~$mij}_rcuaZw;9=49=6VCXH]6=*uuidUbb~z aefq[vgqmV{7=80=1:ZO\LY21&yym`Qfnrv,eabuWzk}iR317<15>^KP@U>5"}}al]jjvr(imnyS~oye^s?528592RGTDQ:9.qqehYnfz~$mij}_rcuaZw;9149=6VCXH]6=*uuidUbb~z aefq[vgqmV{7=40=1:ZO\LY21&yym`Qfnrv,eabuWzk}iR321<14>^KP@U>5"}}al]jjvr(imnyS~oye^s?6;473QFSER;6/rpbiZoi{}%jhi|Ps`tf[t:46;:0TAVF_4;,wwgjW`dxx"okds]pescXy5>5>=5WLYK\1<)tzhgTec}{/`fgvZuf~lUz080=0:ZO\LY21&yym`Qfnrv,eabuWzk}iR36?03?]J_AV?2#~|nm^kmwq)flmxTlxj_p>4:769:91S@UGP58-pvdkXagy#ljkr^qbr`Yv4049<6VCXH]6=*uuidUbb~z aefq[vgqmV{T=='zxjaRgasu-b`atX{h|nS|Q>1328\I^NW<3$ob_hlpp*gcl{Uxm{kPq^3165=_DQCT94!|r`o\mkus'hno~R}nvd]r[45582RGTDQ:9.qqehYnfz~$mij}_rcuaZwX9=8;7UBWI^7:+vtfeVcey!ndep\wdpbWxU:9?>4XMZJ[0?({{kfSd`|t.cg`wYtioT}R?9219[H]OX=0%x~lcPioqw+dbczVyjzhQ~_0514>^KP@U>5"}}al]jjvr(imnyS~oye^s\5=473QFSER;6/rpbiZoi{}%jhi|Ps`tf[tY618l0TAVF_4;,wwgjW`dxx"okds]pescXyV89<6VCXH]6=*uuidUbb~z aefq[vgqmV{T>=?i;YN[MZ3>'zxjaRgasu-b`atX{h|nS|Q<1g9[H]OX=0%x~lcPioqw+dbczVyjzhQ~_53e?]J_AV?2#~|nm^kmwq)flmxTlxj_p]65c=_DQCT94!|r`o\mkus'hno~R}nvd]r[37a3QFSER;6/rpbiZoi{}%jhi|Ps`tf[tY09o1S@UGP58-pvdkXagy#ljkr^qbr`YvW1;m7UBWI^7:+vtfeVcey!ndep\wdpbWxU2>55WLYK\1<)tzhgTec}{/mqbu^6Z&zxjaRokds]rhjq502RGTDQ:9.qqehYnfz~$`~o~[0_-wwgjWhno~Rcov3b?]J_AV?2#~|nm^kmwq)i892;0=0>b:ZO\LY21&yym`Qfnrv,j56?85;;270=37:4d314<2f>^KP@U>5"}}al]jjvr(f9:3<1?9>0`8\I^NW<3$ob_hlpp*h781:7=:0>b:ZO\LY21&yym`Qfnrv,j56?85;3270=1=5d=_DQCT94!|r`o\mkus'g:;4=2;>0c8\I^NW<3$ob_hlpp*h781:793?n;YN[MZ3>'zxjaRgasu-m45>74?4:m6VCXH]6=*uuidUbb~z n12;49199h1S@UGP58-pvdkXagy#c>?81>;:4g39?3a?]J_AV?2#~|nm^kmwq)i|{cxxlzj1g9[H]OX=0%x~lcPioqw+kruaz~jxhQfnw05?]J_AV?2#~|nm^kmwq)i|{cxxlzj_hlu5ZOI^V:9>6VCXH]6=*uuidUbb~z otv\swosmVoemobj219[H]OX=0%x~lcPioqw+vgvS8:V"ljkrgd14>^KP@U>5"}}al]jjvr({h{P=2\,b`atan;:0TAVF_4;,wwgjW`dxx"}nqZ30Y+gcl{lm>=5WLYK\1<)tzhgTec}{/rcr_42Z&hno~kh=0:ZO\LY21&yym`Qfnrv,wdw\9'zxjaRgasu-pet]58T$jhi|if0d8\I^NW<3$ob_hlpp*ufyR8V"ljkrgd2b>^KP@U>5"}}al]jjvr({h{P?P ndepeb4`Z&hno~kh>f:ZO\LY21&yym`Qfnrv,wdw\1T$jhi|if0c8\I^NW<3$ob_hlpp*ubdV{7=3?n;YN[MZ3>'zxjaRgasu-paiYv4;4:m6VCXH]6=*uuidUbb~z sdn\u959901S@UGP58-pvdkXagy#~kc_p]25<=_DQCT94!|r`o\mkus'zogS|Q=189[H]OX=0%x~lcPioqw+vckWxU8=o5WLYK\1<)tzhgTec}{/rpbiZebW`8>7UBWI^7:+vtfeVcey!|r`o\`drfW{ojhR30?05?]J_AV?2#~|nm^kmwq)tzhgThlzn_sgb`Zw;9949:6VCXH]6=*uuidUbb~z sscn[agsiVxnmiQ~<03=63=_DQCT94!|r`o\mkus'zxjaRjnt`]qadbXy5;92?84XMZJ[0?({{kfSd`|t.qqehYci}kT~hok_p>27;413QFSER;6/rpbiZoi{}%x~lcPd`vb[wcflV{7=90=6:ZO\LY21&yym`Qfnrv,wwgjWmkmR|jae]r8439:?1S@UGP58-pvdkXagy#~|nm^fbpdYumhnT}1?9>348\I^NW<3$ob_hlpp*uuidUomyoPrdcg[t:6?78=7UBWI^7:+vtfeVcey!|r`o\`drfW{ojhR319<12>^KP@U>5"}}al]jjvr({{kfSio{a^pfeaYv4835>85WLYK\1<)tzhgTec}{/rpbiZbf|hUyiljPq=3=63=_DQCT94!|r`o\mkus'zxjaRjnt`]qadbXy58;2?84XMZJ[0?({{kfSd`|t.qqehYci}kT~hok_p>15;413QFSER;6/rpbiZoi{}%x~lcPd`vb[wcflV{7>?0=6:ZO\LY21&yym`Qfnrv,wwgjWmkmR|jae]r8759:?1S@UGP58-pvdkXagy#~|nm^fbpdYumhnT}1<;>348\I^NW<3$ob_hlpp*uuidUomyoPrdcg[t:5=78=7UBWI^7:+vtfeVcey!|r`o\`drfW{ojhR327<12>^KP@U>5"}}al]jjvr({{kfSio{a^pfeaYv4;=5>;5WLYK\1<)tzhgTec}{/rpbiZbf|hUyiljPq=0;:70'zxjaRgasu-pvdkXlh~jSknd^s?6;413QFSER;6/rpbiZoi{}%x~lcPd`vb[wcflV{7?=0=6:ZO\LY21&yym`Qfnrv,wwgjWmkmR|jae]r8679:<1S@UGP58-pvdkXagy#~|nm^fbpdYumhnT}1=1249[H]OX=0%x~lcPioqw+vtfeVnjxlQ}e`f\u929:<1S@UGP58-pvdkXagy#~|nm^fbpdYumhnT}1;1249[H]OX=0%x~lcPioqw+vtfeVnjxlQ}e`f\u909:<1S@UGP58-pvdkXagy#~|nm^fbpdYumhnT}191249[H]OX=0%x~lcPioqw+vtfeVnjxlQ}e`f\u9>9:<1S@UGP58-pvdkXagy#~|nm^fbpdYumhnT}171259[H]OX=0%x~lcPioqw+vtfeVnjxlQ}e`f\uZ65<2RGTDQ:9.qqehYnfz~$ob_ecweZtbimUzS<<:;YN[MZ3>'zxjaRgasu-pvdkXlh~jSknd^s\55423QFSER;6/rpbiZoi{}%x~lcPd`vb[wcflV{T=<<:;YN[MZ3>'zxjaRgasu-pvdkXlh~jSknd^s\57423QFSER;6/rpbiZoi{}%x~lcPd`vb[wcflV{T=><:;YN[MZ3>'zxjaRgasu-pvdkXlh~jSknd^s\51423QFSER;6/rpbiZoi{}%x~lcPd`vb[wcflV{T=8<:;YN[MZ3>'zxjaRgasu-pvdkXlh~jSknd^s\53423QFSER;6/rpbiZoi{}%x~lcPd`vb[wcflV{T=:<:;YN[MZ3>'zxjaRgasu-pvdkXlh~jSknd^s\5=423QFSER;6/rpbiZoi{}%x~lcPd`vb[wcflV{T=4<;;YN[MZ3>'zxjaRgasu-pvdkXlh~jSknd^s\673?;4XMZJ[0?({{kfSd`|t.qqehYci}kT~hok_p]177385WLYK\1<)tzhgTec}{/rpbiZbf|hUyiljPq^1360=_DQCT94!|r`o\mkus'zxjaRjnt`]qadbXyV9:>95WLYK\1<)tzhgTec}{/rpbiZbf|hUyiljPq^610>^KP@U>5"}}al]jjvr({{kfSio{a^pfeaYvW<8?7UBWI^7:+vtfeVcey!|r`o\`drfW{ojhRP6368\I^NW<3$ob_hlpp*uuidUomyoPrdcg[tY0:=1S@UGP58-pvdkXagy#~|nm^fbpdYumhnT}R6=4:ZO\LY21&yym`Qfnrv,wwgjWmkmR|jae]r[<433QFSER;6/rpbiZoi{}%x~lcPd`vb[rtn|l6;2?:4XMZJ[0?({{kfSd`|t.qqehYci}kT{g{e=3=61=_DQCT94!|r`o\mkus'zxjaRjnt`]tvlrb4;4986VCXH]6=*uuidUbb~z sscn[agsiV}yeyk33?07?]J_AV?2#~|nm^kmwq)tzhgThlzn_vpjp`:36;>0TAVF_4;,wwgjW`dxx"}}al]geqgX{ci1;1259[H]OX=0%x~lcPioqw+vtfeVnjxlQxrhvf8385<2RGTDQ:9.qqehYnfz~$ob_ecweZqua}o7;3<<;YN[MZ3>'zxjaRgasu-pvdkXlh~jSz|ftd]366=_DQCT94!|r`o\mkus'zxjaRjnt`]tvlrbW8887UBWI^7:+vtfeVcey!|r`o\`drfW~xbxhQ=229[H]OX=0%x~lcPioqw+vtfeVnjxlQxrhvf[6443QFSER;6/rpbiZoi{}%x~lcPd`vb[rtn|lU?>>5WLYK\1<)tzhgTec}{/rpbiZbf|hU|~dzj_400?]J_AV?2#~|nm^kmwq)tzhgThlzn_vpjp`Y1::1S@UGP58-pvdkXagy#~|nm^fbpdYpz`~nS:?m;YN[MZ3>'zxjaRgasu-pvdkXglUb>i5WLYK\1<)tzhgTec}{/rvbp`]5UVZ\^R<>_n]NQ]Y68=Ud>l5WLYK\1<)tzhgTec}{/rvbp`]5UVRT>;Q`_Lw{[70Xg:>0TAVF_4;,wwgjW`dxx"}{augX6XY_W;1359[H]OX=0%x~lcPioqw+vrf|lQ9QRVP27]l[rocmVg~tR<<_NWW8484<2RGTDQ:9.qqehYnfz~$yo{eZ0^[]Y5>VeT{djj_lw{[75XG\^7>3=;;YN[MZ3>'zxjaRgasu-ppdrbS;WTTR<9_n]tmacXe|rT>>Q@UU>0:625?95WLYK\1<)tzhgTec}{/rvbp`]5UVRT>;Q`_vkgaZkrpV88SB[[<4<00>^KP@U>5"}}al]jjvr({}kiV79?7UBWI^7:+vtfeVcey!|t`vf_7[XPV8=SbQxieg\ip~X::UDYY28>328\I^NW<3$ob_hlpp*usi}oTJ^CPFGf262=_DQCT94!|r`o\mkus'z~jxhQISL]EBa7Xzz~{cy'zxjaRgasu-ppdrbWOYFSKHk2318\I^NW<3$ob_hlpp*usi}oTJ^CPFGf1)Lh5<2RGTDQ:9.qqehYnfz~$yo{e^DPIZ@Al;'Bb<'zxjaRgasu-ppdrbWOYFSKHk3318\I^NW<3$ob_hlpp*usi}oTJ^CPFGf0)Lh5<2RGTDQ:9.qqehYnfz~$yo{e^DPIZ@Al:'Bb<<=;YN[MZ3>'zxjaRgasu-ppdrbWVd;=?932?32`>^KP@U>5"}}al]jjvr({}xdnhQndep2e>^KP@U>5"}}al]jjvr(kUjofQ`1e9[H]OX=0%x~lcPioqw+rdXlh~Tc1>11d9[H]OX=0%x~lcPioqw+rdXlh~Tc1??>0g8\I^NW<3$ob_hlpp*qeWmkSb2>1?3f?]J_AV?2#~|nm^kmwq)pjVnjxRa313<2a>^KP@U>5"}}al]jjvr(kUomyQ`<01=5`=_DQCT94!|r`o\mkus'~hThlzPo=37:4c21;7b3QFSER;6/rpbiZoi{}%|nRjnt^m?5386m2RGTDQ:9.qqehYnfz~${oQkau]l84199l1S@UGP58-pvdkXagy#zlPd`v\k97?68o0TAVF_4;,wwgjW`dxx"ym_ecw[j:617;o7UBWI^7:+vtfeVcey!xb^fbpZi;97;n7UBWI^7:+vtfeVcey!xb^fbpZi;:94:i6VCXH]6=*uuidUbb~z wc]geqYh4;;5=h5WLYK\1<)tzhgTec}{/v`\`drXg5892'zxjaRgasu-tfZbf|Ve7>90>e:ZO\LY21&yym`Qfnrv,sgYci}Ud0?;11d9[H]OX=0%x~lcPioqw+rdXlh~Tc1<9>0g8\I^NW<3$ob_hlpp*qeWmkSb2=7?3f?]J_AV?2#~|nm^kmwq)pjVnjxRa329<2a>^KP@U>5"}}al]jjvr(kUomyQ`<3;=5a=_DQCT94!|r`o\mkus'~hThlzPo=0=5`=_DQCT94!|r`o\mkus'~hThlzPo=13:4c05;7c3QFSER;6/rpbiZoi{}%|nRjnt^m?7;7c3QFSER;6/rpbiZoi{}%|nRjnt^m?0;7c3QFSER;6/rpbiZoi{}%|nRjnt^m?1;7c3QFSER;6/rpbiZoi{}%|nRjnt^m?2;7c3QFSER;6/rpbiZoi{}%|nRjnt^m?3;7c3QFSER;6/rpbiZoi{}%|nRjnt^m?<;7c3QFSER;6/rpbiZoi{}%|nRjnt^m?=;7d3QFSER;6/rpbiZoi{}%|nRjnt^m\44e^KP@U>5"}}al]jjvr(kUomyQ`_322`>^KP@U>5"}}al]jjvr(kUomyQ`_332`>^KP@U>5"}}al]jjvr(kUomyQ`_302`>^KP@U>5"}}al]jjvr(kUomyQ`_312`>^KP@U>5"}}al]jjvr(kUomyQ`_362`>^KP@U>5"}}al]jjvr(kUomyQ`_372`>^KP@U>5"}}al]jjvr(kUomyQ`_342`>^KP@U>5"}}al]jjvr(kUomyQ`_352`>^KP@U>5"}}al]jjvr(kUomyQ`_3:2`>^KP@U>5"}}al]jjvr(kUomyQ`_3;2g>^KP@U>5"}}al]jjvr(kUomyQ`_23g?]J_AV?2#~|nm^kmwq)pjVnjxRaP313g?]J_AV?2#~|nm^kmwq)pjVnjxRaP303`?]J_AV?2#~|nm^kmwq)pjVnjxRaP40a8\I^NW<3$ob_hlpp*qeWmkSbQ:1b9[H]OX=0%x~lcPioqw+rdXlh~TcR8>c:ZO\LY21&yym`Qfnrv,sgYci}UdS:?l;YN[MZ3>'zxjaRgasu-tfZbf|VeT43QFSER;6/rpbiZqeWhnySd2>0?3:?]J_AV?2#~|nm^ua[dbuW`6:=3?6;YN[MZ3>'zxjaRym_`fq[l:6:7;27UBWI^7:+vtfeV}iSlj}_h>27;7>3QFSER;6/rpbiZqeWhnySd2>4?3:?]J_AV?2#~|nm^ua[dbuW`6:93?6;YN[MZ3>'zxjaRym_`fq[l:6>7;27UBWI^7:+vtfeV}iSlj}_h>23;7>3QFSER;6/rpbiZqeWhnySd2>8?3:?]J_AV?2#~|nm^ua[dbuW`6:53?6;YN[MZ3>'zxjaRym_`fq[l:587;37UBWI^7:+vtfeV}iSlj}_h>1:4>0:8\I^NW<3$ob_v`\eatXa5=5=55WLYK\1<)tzhgT{oQnds]j8=8602RGTDQ:9.qqehYpjVko~Rg39?36?]J_AV?2#~|nm^ua[fjlW`;>7UBWI^7:+vtfeV}iSnwl_h3;?]J_AV?2#~|nm^ua[agsW`6;2<74XMZJ[0?({{kfSzlPd`v\m9776830TAVF_4;,wwgjW~hThlzPi=32:4?0;8\I^NW<3$ob_v`\`drXa5;82<74XMZJ[0?({{kfSzlPd`v\m9736830TAVF_4;,wwgjW~hThlzPi=36:4?0;8\I^NW<3$ob_v`\`drXa5;<2<74XMZJ[0?({{kfSzlPd`v\m97?6830TAVF_4;,wwgjW~hThlzPi=3::4>5=45WLYK\1<)tzhgT{oQkau]j8739901S@UGP58-pvdkXkUomyQf<34=5<=_DQCT94!|r`o\sgYci}Ub0?91189[H]OX=0%x~lcPwc]geqYn4;25=45WLYK\1<)tzhgT{oQkau]j87?9911S@UGP58-pvdkXkUomyQf<3<2=>^KP@U>5"}}al]tfZbf|Vc7?=0>9:ZO\LY21&yym`Qxb^fbpZo;;84:46VCXH]6=*uuidU|nRjnt^k?7;7?3QFSER;6/rpbiZqeWmkSd2;>0:8\I^NW<3$ob_v`\`drXa5?5=55WLYK\1<)tzhgT{oQkau]j838602RGTDQ:9.qqehYpjVnjxRg37?3;?]J_AV?2#~|nm^ua[agsW`632<64XMZJ[0?({{kfSzlPd`v\m9?99<1S@UGP58-pvdkXkUyyQf199[H]OX=0%x~lcPwc]paiYn494:46VCXH]6=*uuidU|nR}jl^k?5;7?3QFSER;6/rpbiZqeWzogSd2=>0:8\I^NW<3$ob_v`\w`jXa595=:5WLYK\1<)tzhgT{oQ|t`no[j723QFSER;6/rpbiZqeWz~iSd?;;YN[MZ3>'zxjaRym_vg\m40W~cxdoaae^qokqY6nQbarvfvZrhx&GfyuQPn1301466:h1S@UGP60-JjvrXa;iTal}{es]wku)Je|rTSc>>343257g;>200b?]J_AV<:#D`|t^k1gZkf{}oySya/Lov|ZYi889>=>?=a:ZO\LY19&CeyQf2b]nevrbzV~d|"Cbuy]\j574=8>:>l5WLYK\24)Nfz~Te?mPm`qwawYsgy%FaxvP_o2270729;k0TAVF_73,MkusW`8hS`o|tdp\pjv(EdsSR`?1272244>3QFSER8>/HlppZo5kVgjyk}_ums+HkrpVUe<<=:160:?]J_AV<:#D`|t^k1gZkf{}oySya/Lov|ZYi889>><<6;YN[MZ06'@dxxRg=c^obwqcuW}e{#@czx^]m4452;8827UBWI^42+Lht|Vc9oRcnsugq[qiw'Dg~tRQa0016044>3QFSER8>/HlppZo5kVgjyk}_ums+HkrpVUe<<=:500:?]J_AV<:#D`|t^k1gZkf{}oySya/Lov|ZYi889>:<<6;YN[MZ06'@dxxRg=c^obwqcuW}e{#@czx^]m4452?8827UBWI^42+Lht|Vc9oRcnsugq[qiw'Dg~tRQa0016<44>3QFSER8>/HlppZo5kVgjyk}_ums+HkrpVUe<<=:901:?]J_AV<:#D`|t^k1gZkf{}oySya/Lov|ZeuS>WToU8]^ov|Z70WF__=<=6;YN[MZ06'@dxxRg=c^obwqcuW}e{#@czx^aq_2[Xk{Q3QFSER8>/HlppZo5kVgjyk}_ums+HkrpViyW:SPcsY4YZkrpV;WToU8]^ov|Z70WF__9<=6;YN[MZ06'@dxxRg=c^obwqcuW}e{#@czx^aq_2[Xk{Q8927UBWI^42+Lht|Vc9oRcnsugq[qiw'Dg~tRm}[6_\gw]0UVg~tR?8_NWW345>3QFSER8>/HlppZo5kVgjyk}_ums+HkrpViyW:SPcsY4YZkrpV;Xag|9;6VCXH]55*Oi{}Ub>nQbarvfvZrhx&Ue<nQbarvfvZrhx&Ue<<=:<1<12>^KP@U=="Gasu]j6fYjiz~n~Rz`p.]m445248:5>;5WLYK\24)Nfz~Te?mPm`qwawYsgy%Tb=?<5=32:703<9;YN[MZ06'@dxxRg=c^obwqcuW}e{#R`?127?5685>2RGTDQ91.KmwqYn:jUfm~zjr^vlt*Yi889>0<:1279[H]OX>8%Bb~zPi3a\idusm{Uc}!Pn13019726;?0TAVF_73,MkusW`8hS`o|tdp\pjv(Wg::?82>>378\I^NW?;$Ec}{_h0`[hgt|lxTxb~ _o2270:56;?0TAVF_73,MkusW`8hS`o|tdp\pjv(Wg::?82<>378\I^NW?;$Ec}{_h0`[hgt|lxTxb~ _o2270:36;?0TAVF_73,MkusW`8hS`o|tdp\pjv(Wg::?82:>378\I^NW?;$Ec}{_h0`[hgt|lxTxb~ _o2270:16;?0TAVF_73,MkusW`8hS`o|tdp\pjv(Wg::?828>378\I^NW?;$Ec}{_h0`[hgt|lxTxb~ _o2270:?6;?0TAVF_73,MkusW`8hS`o|tdp\pjv(Wg::?826>348\I^NW?;$Ec}{_h0`[hgt|lxTxb~ _o2200Ynf8<7UBWI^42+Lht|Vc9oRcnsugq[qiw'Vd;=9;Piot25`=_DQCT:25]l[hsW1UDYY?>499[H]OX>8%Bb~zPi3a\idusm{Uc}!myug\gqtk'Dg~tRjlnuY1YZAILV;98RaPmtz\nQbarvfvZrhx&hrxhQltsn,IhsWmiexV/HlppZo5kVgjyk}_ums+gsmVi~a!Bmtz\ww]0UVMEHR?=4^m\ip~X;VE^XWTKCJP136\kZkrpV9TCXZ<1548\I^NW?;$Ec}{_h0`[hgt|lxTxb~ bxvf[frud&GfyuQ|rZ5^[BHCW88?SbQbuy]0[JSS<8>=7UBWI^42+Lht|Vc9oRcnsugq[qiw'ksiRm{rm-Nip~X{{Q^KP@U=="Gasu]j6fYjiz~n~Rz`p.`zp`Yd|{f$A`{w_rpX3XY@FMU:>9Q`_lw{[6YH]]<:8;5WLYK\24)Nfz~Te?mPm`qwawYsgy%iuykPcupo+HkrpVyyW:SPGOF\572XgVg~tR=POTV4510TcRCZX^014Zi69<=0TAVF_73,MkusW`8hS`o|tdp\pjv(jp~nSnz}l.Onq}Yt|h~nalmgiog-gZusi}oP>PQHNE]261YhWD_SS??6_n36f>^KP@U=="Gasu]j6fYjiz~n~Rz`p.`zp`Yd|{f$A`{w_rvbp`kfkacei#mPsucwa^4ZWNDOS<<;_n]NQ]Y590Ud=R]X04:8\I^NW?;$Ec}{_h0`[hgt|lxTxb~ bxvf[frud&GfyuQ|t`vfideoago%oR}{augX6XY@FMU:>9Q`_LW[[746Wf;:955WLYK\24)Nfz~Te?mPm`qwawYsgy%iuykPcupo+HkrpVymykbabjjj`(dWz~jxhU=]^EM@Z75^KP@U=="Gasu]j6fYjiz~n~Rz`p.`zp`Yd|{f$A`{w_rvbp`kfkacei#mPsucwa^4ZWNDOS<<;_n]nq}Y35c9[H]OX>8%Bb~zPi3a\idusm{Uc}!myug\gqtk'Dg~tR}{augnefnnfl$hS~zntdY1YZAILV;98RaPmtz\01YH]];:=<;n;YN[MZ06'@dxxRg=c^obwqcuW}e{#ow{e^awvi)Je|rTyo{elc`llhb&jUxxlzj[3_\CKBX9;>TcRczx^67[JSS988>n6VCXH]55*Oi{}Ub>nQbarvfvZrhx&hrxhQltsn,IhsWz~jxhcncikma+eX{}kiVPQHNE]261YhWdsS9:POTV2563d3QFSER8>/HlppZo5kVgjyk}_ums+gsmVi~a!Bmtz\wqgsmdkhdd`j.b]ppdrbS;WTKCJP136\kZkrpV>?SB[[101250b25]l[hsW=>TCXZ>123250g25]l[hsW=>TCXZ>157b?]J_AV<:#D`|t^k1gZkf{}oySya/c{waZesze%FaxvPsucwahgd``dn"nQ|t`vf_7[XOGNT=?:Po^ov|Z23WF__=<;:8:ZO\LY19&CeyQf2b]nevrbzV~d|"lvtd]`pwj(EdsS~zntdobgmoim'iTyo{eZ0^[BHCW88?SbQbuy]70ZIR\;?27UBWI^42+Lht|Vc9oRcnsugq[qiw'ksiRm{rm-Nip~X{}ki`olhhlf*fYt|h~nW?SPGOF\572XgVg~tR:;_NWW643f3QFSER8>/HlppZo5kVgjyk}_ums+gsmVi~a!Bmtz\wqgsmdkhdd`j.b]ppdrbS;WTKCJP136\kZkrpV>?SB[[2036=>^KP@U=="Gasu]j6fYjiz~n~Rz`p.`zp`Yd|{f$A`{w_rvbp`kfkacei#mPsucwa^4ZWNDOS<<;_n]nq}Y346VCXH]55*Oi{}Ub>nQbarvfvZrhx&hrxhQltsn,IhsWz~jxhcncikma+eX{}kiV/HlppZo5kVgjyk}_ums+gsmVi~a!Bmtz\wqgsmdkhdd`j.b]ppdrbS;WTKCJP136\kZkrpV>?SB[[5236f>^KP@U=="Gasu]j6fYjiz~n~Rz`p.`zp`Yd|{f$A`{w_rvbp`kfkacei#mPsucwa^4ZWNDOS<<;_n]nq}Y314a8\I^NW?;$Ec}{_h0`[hgt|lxTxb~ bxvf[frud&GfyuQ|t`vfideoago%oR}{augX6XY@FMU:>9Q`_lw{[12XG\^>S^Y?599[H]OX>8%Bb~zPi3a\idusm{Uc}!myug\gqtk'Dg~tR}{augnefnnfl$hS~zntdY1YZAILV;98RaPmtz\01YH]]2>56VCXH]55*Oi{}Ub>nQbarvfvZrhx&hrxhQltsn,IhsWz~jxhcncikma+eX{}kiV8%Bb~zPi3a\idusm{Uc}!myug\gqtk'Dg~tR}{augnefnnfl$hS~zntdY1YZAILV;98RaPmtz\01YH]]28?=5WLYK\24)Nfz~Te?mPm`qwawYsgy%iuykPcupo+Zh79:8Tecx<1:ZO\LY19&CeyQf2b]nevrbzV~d|"lvtd]`pwj(Wg::??Qfnw31`>^KP@U=="Gasu]j6fYjiz~n~Rz`p.`zp`Yd|{f$mnePotv00>^KP@U=="Gasu]j6fYjiz~n~Rz`p.`zp`Yd|{f$mnePotv\vvrwg}937UBWI^42+Lht|Vc9oRcnsugq[qiw'ksiRm{rm-bgnYh}}Uyy~`t^QT41e8Q`_FLG[442WfUFYUQ=11]l15=_DQCT:=6VCXH]55*Oi{}Ub>nQbarvfvZrhx&hrxhQltsn,flrXk}xg#J@K_006[jY@FMU:>8Q`_lw{[44XG\^7=<0:1:ZO\LY19&CeyQf2b]nevrbzV~d|"lvtd]`pwj(j`~Toy|c/FLG[442WfULBIQ>24]l[hsW88TCXZ313<65>^KP@U=="Gasu]j6fYjiz~n~Rz`p.`zp`Yd|{f$ndzPcupo+BHCW88>SbQHNE]260YhWdsS<4XMZJ[37(AgySd8%Bb~zPi3a\idusm{Uc}!myug\gqtk'kcSnz}l.EM@Z75=VeTKCJP137\kZkrpV;9SB[[<5<64>^KP@U=="Gasu]j6fYjiz~n~Rz`p.`zp`Yd|{f$ndzPcupo+BHCW88>SbQHNE]260YhWdsS</HlppZo5kVgjyk}_ums+gsmVi~a!miu]`pwj(OGNT=?;Po^EM@Z75=VeTaxvP13]LQQ:16<:0TAVF_73,MkusW`8hS`o|tdp\pjv(jp~nSnz}l.`jpZesze%LBIQ>24]l[BHCW88>SbQbuy]26ZIR\5=59=5WLYK\24)Nfz~Te?mPm`qwawYsgy%iuykPcupo+gosWj~y`"IAD^311ZiXOGNT=?;Po^ov|Z75WF__050:0:ZO\LY19&CeyQf2b]nevrbzV~d|"lvtd]`pwj(j`~Toy|c/FLG[442WfULBIQ>24]l[hsW88TCXZ39?73?]J_AV<:#D`|t^k1gZkf{}oySya/c{waZesze%ieyQltsn,CKBX9;?TcRIAD^311ZiX{|hT=3:078Q`_FLG[442WfUxyoQ>1^MVP9776<;0TAVF_73,MkusW`8hS`o|tdp\pjv(jp~nSnz}l.`jpZesze%LBIQ>24]l[BHCW88>SbQ|uc]25ZIR\5;:28?4XMZJ[37(AgySd438\I^NW?;$Ec}{_h0`[hgt|lxTxb~ bxvf[frud&hbxRm{rm-DJAY6:8Q`_FLG[442WfUxyoQ>1^MVP979=91S@UGP60-JjvrXa;iTal}{es]wku)eq}oToy|c/ckw[frud&MEHR?=5^m\CKBX9;?TcR}zb^32[JSS4;4><6VCXH]55*Oi{}Ub>nQbarvfvZrhx&hrxhQltsn,flrXk}xg#J@K_006[jY@FMU:>8Q`_rwa[47XG\^7?3;?;YN[MZ06'@dxxRg=c^obwqcuW}e{#ow{e^awvi)ea}Uhxb GOF\573XgVMEHR?=5^m\wpdX98UDYY2;>428\I^NW?;$Ec}{_h0`[hgt|lxTxb~ bxvf[frud&hbxRm{rm-DJAY6:_NWW838282RGTDQ91.KmwqYn:jUfm~zjr^vlt*d~|lUhxb bhv\gqtk'NDOS<<:_n]DJAY6:4XMZJ[37(AgySd8%Bb~zPi3a\idusm{Uc}!myug\gqtk'kcSnz}l.O`kphsWjdSnw30?61?]J_AV<:#D`|t^k1gZkf{}oySya/c{waZesze%ieyQltsn,Ifirf}UhbyQly=2=[wr382RGTDQ91.KmwqYn:jUfm~zjr^vlt*d~|lUhxb bhv\gqtk'DidyczPcov\g|:687>;7UBWI^42+Lht|Vc9oRcnsugq[qiw'ksiRm{rm-amqYd|{f$Anaznu]`jqYdq5;:29>4XMZJ[37(AgySd8%Bb~zPi3a\idusm{Uc}!myug\gqtk'kcSnz}l.O`kphsWjdSnw312<74>^KP@U=="Gasu]j6fYjiz~n~Rz`p.`zp`Yd|{f$ndzPcupo+Heh}g~ToczPcx>20;5a3QFSER8>/HlppZo5kVgjyk}_ums+gsmVi~a!miu]`pwj(Eje~byQlnu]`}979;o1S@UGP60-JjvrXa;iTal}{es]wku)eq}oToy|c/ckw[frud&Ghcx`{_blw[f;:79m7UBWI^42+Lht|Vc9oRcnsugq[qiw'ksiRm{rm-amqYd|{f$Anaznu]`jqYdq595?k5WLYK\24)Nfz~Te?mPm`qwawYsgy%iuykPcupo+gosWj~y`"Clotlw[fhsWjs783=i;YN[MZ06'@dxxRg=c^obwqcuW}e{#ow{e^awvi)ea}Uhxb MbmvjqYdf}Uhu1;13g9[H]OX>8%Bb~zPi3a\idusm{Uc}!myug\gqtk'kcSnz}l.O`kphsWjdSnw36?1e?]J_AV<:#D`|t^k1gZkf{}oySya/c{waZesze%ieyQltsn,Ifirf}UhbyQly=5=7c=_DQCT:/HlppZo5kVgjyk}_ums+gsmVi~a!miu]`pwj(Eje~byQlnu]`}9?9;o1S@UGP60-JjvrXa;iTal}{es]wku)eq}oToy|c/ckw[frud&Ghcx`{_blw[`wiW9>;7UBWI^42+Lht|Vc9oRcnsugq[qiw'ksiRm{rm-amqYd|{f$Anaznu]`jqYbygU;=>h4XMZJ[37(AgySd/HlppZo5kVgjyk}_ums+gsmVi~a!miu]`pwj(Eje~byQlnu]fukY69=;0TAVF_73,MkusW`8hS`o|tdp\pjv(jp~nSnz}l.`jpZesze%Fob{at^ampZcvfV;:=9>4XMZJ[37(AgySd8%Bb~zPi3a\idusm{Uc}!myug\gqtk'kcSnz}l.O`kphsWjdSha_00205=_DQCT:nQbarvfvZrhx&hrxhQltsn,flrXk}xg#@m`uov\gkrXmxdT=9:>;YN[MZ06'@dxxRg=c^obwqcuW}e{#ow{e^awvi)ea}Uhxb MbmvjqYdf}Un}cQ>4063?]J_AV<:#D`|t^k1gZkf{}oySya/c{waZesze%ieyQltsn,Ifirf}UhbyQjqo]2117nQbarvfvZrhx&hrxhQltsn,flrXk}xg#@m`uov\gkrXmxdT><=i;YN[MZ06'@dxxRg=c^obwqcuW}e{#ow{e^awvi)ea}Uhxb MbmvjqYdf}Un}cQ<419[H]OX>8%Bb~zPi3a\idusm{Uc}!myug\gqtk'kcSnz}l.O`kphsWjdSha_230b>^KP@U=="Gasu]j6fYjiz~n~Rz`p.`zp`Yd|{f$ndzPcupo+Heh}g~ToczPepl\016;7UBWI^42+Lht|Vc9oRcnsugq[qiw'ksiRm{rm-amqYd|{f$Anaznu]`jqYbygU>=>h4XMZJ[37(AgySd;1:ZO\LY19&CeyQf2b]nevrbzV~d|"lvtd]`pwj(j`~Toy|c/LalqkrXkg~T`xz310<73>^KP@U=="Gasu]j6fYjiz~n~Rz`p.`zp`Yd|{f$ndzPcupo+Heh}g~ToczPltv?548XAG\T<9?4XMZJ[37(AgySd558\I^NW?;$Ec}{_h0`[hgt|lxTxb~ bxvf[frud&hbxRm{rm-Ngjsi|ViexRbzt=31:ZOI^V:?=6VCXH]55*Oi{}Ub>nQbarvfvZrhx&hrxhQltsn,flrXk}xg#@m`uov\gkrXd|~7=>0;7:ZO\LY19&CeyQf2b]nevrbzV~d|"lvtd]`pwj(j`~Toy|c/LalqkrXkg~T`xz312<\MKPX8=;0TAVF_73,MkusW`8hS`o|tdp\pjv(jp~nSnz}l.`jpZesze%Fob{at^ampZjr|5;?2994XMZJ[37(AgySd^KMRZ6392RGTDQ91.KmwqYn:jUfm~zjr^vlt*d~|lUhxb bhv\gqtk'DidyczPcov\hpr;9<4?;6VCXH]55*Oi{}Ub>nQbarvfvZrhx&hrxhQltsn,flrXk}xg#@m`uov\gkrXd|~7=80PIOT\4164XMZJ[37(AgySd8%Bb~zPi3a\idusm{Uc}!myug\gqtk'kcSnz}l.O`kphsWjdSa{{<2<\MKPX8=:0TAVF_73,MkusW`8hS`o|tdp\pjv(jp~nSnz}l.`jpZesze%Fob{at^ampZjr|5>58;5WLYK\24)Nfz~Te?mPm`qwawYsgy%iuykPcupo+gosWj~y`"Clotlw[fhsWe090PIOT\4164XMZJ[37(AgySd8%Bb~zPi3a\idusm{Uc}!myug\gqtk'kcSnz}l.O`kphsWjdSa{{<6<\MKPX8=:0TAVF_73,MkusW`8hS`o|tdp\pjv(jp~nSnz}l.`jpZesze%Fob{at^ampZjr|5258;5WLYK\24)Nfz~Te?mPm`qwawYsgy%iuykPcupo+gosWj~y`"Clotlw[fhsWe050PIOT\4168%Bb~zPi3a\idusm{Uc}!myug\gqtk'kcSnz}l.O`kphsWjdSua}<01=04=_DQCT:0:16nQbarvfvZrhx&hrxhQltsn,flrXk}xg#@m`uov\gkrXpfx7:3:?;YN[MZ06'@dxxRg=c^obwqcuW}e{#ow{e^awvi)ea}Uhxb MbmvjqYdf}Usc28>528\I^NW?;$Ec}{_h0`[hgt|lxTxb~ bxvf[frud&hbxRm{rm-Ngjsi|ViexRv`r=:=05=_DQCT:24]l[BHCW88>SbQbuy]26ZIR\;;>86VCXH]55*Oi{}Ub>nQbarvfvZrhx&hrxhQltsn,flrXk}xg#@czx^EM@Z75=VeTKCJP137\kZkrpV;9SB[[3077?]J_AV<:#D`|t^k1gZkf{}oySya/c{waZesze%ieyQltsn,IhsWNDOS<<:_n]DJAY6:0TAVF_73,MkusW`8hS`o|tdp\pjv(jp~nSnz}l.`jpZesze%FaxvPGOF\573XgVMEHR?=5^m\ip~X9;UDYY;>559[H]OX>8%Bb~zPi3a\idusm{Uc}!myug\gqtk'kcSnz}l.Onq}Y@FMU:>8Q`_FLG[442WfUfyuQ>2^MVP372<2RGTDQ91.KmwqYn:jUfm~zjr^vlt*d~|lUhxb bhv\gqtk'Dg~tRIAD^311ZiXOGNT=?;Po^ov|Z75WF__;<;;;YN[MZ06'@dxxRg=c^obwqcuW}e{#ow{e^awvi)ea}Uhxb Mlw{[BHCW88>SbQHNE]260YhWdsS<24]l[hsW609[H]OX>8%Bb~zPi3a\idusm{Uc}!myug\gqtk'kcSnz}l.Onq}Ye}zUxxlzzs^awvi(d[JFP81S@UGP60-JjvrXa;iTal}{es]wku)eq}oToy|c/ckw[frud&GfyuQmur]ppdrr{Vi~a lSECX4XY@FMU:>8Q`_lw{[3YH]]8::=5WLYK\24)Nfz~Te?mPm`qwawYsgy%iuykPcupo+gosWj~y`"Cbuy]aqvYt|h~~Rm{rm,eWFJ\:TU[[_Q=7^m\IP^X9=9Tc^KP@U=="Gasu]j6fYjiz~n~Rz`p.`zp`Yd|{f$ndzPcupo+HkrpVh~R}{auwp[frud'lXOAU=]^RTVZ40WfUfyuQ>6^MVP77192RGTDQ91.KmwqYn:jUfm~zjr^vlt*d~|lUhxb bhv\gqtk'Dg~tRlzs^qweqstWj~y`#h\CMY1YZVPZV8nQbarvfvZrhx&hrxhQltsn,flrXk}xg#@czx^`vwZusi}xSnz}l/dP@D]5UVZ\^R<8_n]NQ]Y6<=Ud=<8>;YN[MZ06'@dxxRg=c^obwqcuW}e{#ow{e^awvi)ea}Uhxb Mlw{[gstWz~jxx}Pcupo*cUCIR8VS]Y]_35\kZkrpV;3SB[[1042?]J_AV<:#D`|t^k1gZkf{}oySya/c{waZesze%ieyQltsn,IhsWkxS~znttq\gqtk&oYOMV/HlppZo5kVgjyk}_ums+gsmVi~a!miu]`pwj(EdsSo{|_rvbppuXk}xg"k]KAZ0^[UQUW;=TcRczx^3;[JSS;8<<7UBWI^42+Lht|Vc9oRcnsugq[qiw'ksiRm{rm-amqYd|{f$A`{w_cwp[vrf||yToy|c.rvb[fiil`~bccQHNE]260YhWD_SS<:6_n3214=_DQCT:UdS@[W_332[j76==1S@UGP60-JjvrXa;iTal}{es]wku)eq}oToy|c/ckw[frud&GfyuQfsec\k`hXX^XT>:Q`_LW[[775Wf8T_Z>;d:ZO\LY19&CeyQf2b]nevrbzV~d|"lvtd]`pwj(j`~Toy|c/Lov|ZuTKEU[[_Q=7^m\IP^X9=?Tc24]l[HS_W8>4d9[H]OX>8%Bb~zPi3a\idusm{Uc}!myug\gqtk'kcSnz}l.Onq}Yt[MKTKCJP137\kZKRPV;?4Ra>15f8\I^NW?;$Ec}{_h0`[hgt|lxTxb~ bxvf[frud&hbxRm{rm-Nip~X{ZNJS]Y]_35\kZKRPV;?:Ra>1428\I^NW?;$Ec}{_h0`[hgt|lxTxb~ bxvf[frud&hbxRm{rm-Nip~X{mkToeePGOF\573XgVG^TR?:3^m211=_DQCT:i6VCXH]55*Oi{}Ub>nQbarvfvZrhx&hrxhQltsn,flrXk}xg#@}zb^EM@Z75=VeTKCJP137\kZurjV;:SB[[<0194;Ydq5:5:<5WLYK\24)Nfz~Te?mPm`qwawYsgy%iuykPcupo+gosWj~y`"C|uc]DJAY6:58Xkp6;2R|{5g9[H]OX>8%Bb~zPi3a\idusm{Uc}!myug\gqtk'kcSnz}l.OpqgY@FMU:>8Q`_FLG[442WfUxyoQ>1^MVP974294Tot2>0?7e?]J_AV<:#D`|t^k1gZkf{}oySya/c{waZesze%ieyQltsn,IvseWNDOS<<:_n]DJAY6:24]l[BHCW88>SbQ|uc]25ZIR\5;86=0Pcx>26;3b3QFSER8>/HlppZo5kVgjyk}_ums+gsmVi~a!miu]`pwj(EziSJ@K_006[jY@FMU:>8Q`_rwa[47XG\^7=>4?>^az8482m2RGTDQ91.KmwqYn:jUfm~zjr^vlt*d~|lUhxb bhv\gqtk'Dy~nRIAD^311ZiXOGNT=?;Po^qvfZ76WF__0<=50?]`}949=l1S@UGP60-JjvrXa;iTal}{es]wku)eq}oToy|c/ckw[frud&GxyoQHNE]260YhWNDOS<<:_n]pqgY69VE^X1?<:1<\g|:463;2=[f;<7?n7UBWI^42+Lht|Vc9oRcnsugq[qiw'ksiRm{rm-amqYd|{f$A~{m_FLG[442WfULBIQ>24]l[vseW8;TCXZ31283:Ze~4<4>i6VCXH]55*Oi{}Ub>nQbarvfvZrhx&hrxhQltsn,flrXk}xg#@}zb^EM@Z75=VeTKCJP137\kZurjV;:SB[[<0194;Ydq5<59h5WLYK\24)Nfz~Te?mPm`qwawYsgy%iuykPcupo+gosWj~y`"C|uc]DJAY6:58Xkp6<28k4XMZJ[37(AgySd27?69Wjs743;j;YN[MZ06'@dxxRg=c^obwqcuW}e{#ow{e^awvi)ea}Uhxb Mrwa[BHCW88>SbQHNE]260YhWziS_NWW845=87Ugyy2>0?45?]J_AV<:#D`|t^k1gZkf{}oySya/c{waZesze%ieyQltsn,IvseWNDOS<<:_n]DJAY6:nQbarvfvZrhx&hrxhQltsn,flrXk}xg#@}zb^EM@Z75=VeTKCJP137\kZurjV;:SB[[<0194;Yk}}6:=389;YN[MZ06'@dxxRg=c^obwqcuW}e{#ow{e^awvi)ea}Uhxb Mrwa[BHCW88>SbQHNE]260YhWziS>^KMRZ6182RGTDQ91.KmwqYn:jUfm~zjr^vlt*d~|lUhxb bhv\gqtk'Dy~nRIAD^311ZiXOGNT=?;Po^qvfZ76WF__0<=50?]oqq:6:7<=7UBWI^42+Lht|Vc9oRcnsugq[qiw'ksiRm{rm-amqYd|{f$A~{m_FLG[442WfULBIQ>24]l[vseW8;TCXZ31283:Zjr|5;92RGAV^254>^KP@U=="Gasu]j6fYjiz~n~Rz`p.`zp`Yd|{f$ndzPcupo+HurjVMEHR?=5^m\CKBX9;?TcR}zb^32[JSS4891<3Qcuu>27;013QFSER8>/HlppZo5kVgjyk}_ums+gsmVi~a!miu]`pwj(EziSJ@K_006[jY@FMU:>8Q`_rwa[47XG\^7=>4?>^nvp9746VCEZR>:f:ZO\LY19&CeyQf2b]nevrbzV~d|"lvtd]`pwj(j`~Toy|c/LqvfZAILV;99RaPGOF\573XgVy~nR?>_NWW845=87Ugyy2>>778\I^NW?;$Ec}{_h0`[hgt|lxTxb~ bxvf[frud&hbxRm{rm-NwpdXOGNT=?;Po^EM@Z75=VeTxlP10]LQQ:6;3:5Sa{{<0<\MKPX83;2=[iss4;4=96VCXH]55*Oi{}Ub>nQbarvfvZrhx&hrxhQltsn,flrXk}xg#@}zb^EM@Z75=VeTKCJP137\kZurjV;:SB[[<0194;Yk}}692RGAV^26b>^KP@U=="Gasu]j6fYjiz~n~Rz`p.`zp`Yd|{f$ndzPcupo+HurjVMEHR?=5^m\CKBX9;?TcR}zb^32[JSS4891<3Qcuu>0:331_mww868XAG\T<8h4XMZJ[37(AgySd27?69We09095:ZO\LY19&CeyQf2b]nevrbzV~d|"lvtd]`pwj(j`~Toy|c/LqvfZAILV;99RaPGOF\573XgVy~nR?>_NWW845=87Ugyy2;>^KMRZ62n2RGTDQ91.KmwqYn:jUfm~zjr^vlt*d~|lUhxb bhv\gqtk'Dy~nRIAD^311ZiXOGNT=?;Po^qvfZ76WF__0<=50?]oqq:26??0TAVF_73,MkusW`8hS`o|tdp\pjv(jp~nSnz}l.`jpZesze%FxlPGOF\573XgVMEHR?=5^m\wpdX98UDYY2>3;2=[iss4<4TECXP04d8\I^NW?;$Ec}{_h0`[hgt|lxTxb~ bxvf[frud&hbxRm{rm-NwpdXOGNT=?;Po^EM@Z75=VeTxlP10]LQQ:6;3:5Sa{{<7<51>^KP@U=="Gasu]j6fYjiz~n~Rz`p.`zp`Yd|{f$ndzPcupo+HurjVMEHR?=5^m\CKBX9;?TcR}zb^32[JSS4891<3Qcuu>5:ZOI^V:>j6VCXH]55*Oi{}Ub>nQbarvfvZrhx&hrxhQltsn,flrXk}xg#@}zb^EM@Z75=VeTKCJP137\kZurjV;:SB[[<0194;Yk}}6<2;;4XMZJ[37(AgySd27?69We0:0PIOT\40`1_mww8=81=2RGTDQ91.KmwqYn:jUfm~zjr^vlt*d~|lUhxb bhv\gqtk'Dy~nRIAD^311ZiXOGNT=?;Po^qvfZ76WF__0<=50?]oqq:?6VCEZR>:f:ZO\LY19&CeyQf2b]nevrbzV~d|"lvtd]`pwj(j`~Toy|c/LqvfZAILV;99RaPGOF\573XgVy~nR?>_NWW845=87Ugyy26>778\I^NW?;$Ec}{_h0`[hgt|lxTxb~ bxvf[frud&hbxRm{rm-NwpdXOGNT=?;Po^EM@Z75=VeTxlP10]LQQ:6;3:5Sa{{<8<\MKPX83;2=[}iu494=<6VCXH]55*Oi{}Ub>nQbarvfvZrhx&hrxhQltsn,flrXk}xg#@}zb^EM@Z75=VeTKCJP137\kZurjV;:SB[[<0194;Yg{6:<38?;YN[MZ06'@dxxRg=c^obwqcuW}e{#ow{e^awvi)ea}Uhxb Mrwa[BHCW88>SbQHNE]260YhWziS>728\I^NW?;$Ec}{_h0`[hgt|lxTxb~ bxvf[frud&hbxRm{rm-NwpdXOGNT=?;Po^EM@Z75=VeTxlP10]LQQ:6;3:5Sua}<00=25=_DQCT:24]l[BHCW88>SbQ|uc]25ZIR\5;86=0Pxnp?5682n2RGTDQ91.KmwqYn:jUfm~zjr^vlt*d~|lUhxb bhv\gqtk'Dy~nRIAD^311ZiXOGNT=?;Po^qvfZ76WF__0<=50?]{kw:663;2=[}iu4;4>j6VCXH]55*Oi{}Ub>nQbarvfvZrhx&hrxhQltsn,flrXk}xg#@}zb^EM@Z75=VeTKCJP137\kZurjV;:SB[[<0194;Yg{6828h4XMZJ[37(AgySd27?69Wqey090:f:ZO\LY19&CeyQf2b]nevrbzV~d|"lvtd]`pwj(j`~Toy|c/LqvfZAILV;99RaPGOF\573XgVy~nR?>_NWW845=87Usc2:>4d8\I^NW?;$Ec}{_h0`[hgt|lxTxb~ bxvf[frud&hbxRm{rm-NwpdXOGNT=?;Po^EM@Z75=VeTxlP10]LQQ:6;3:5Sua}<7<6b>^KP@U=="Gasu]j6fYjiz~n~Rz`p.`zp`Yd|{f$ndzPcupo+HurjVMEHR?=5^m\CKBX9;?TcR}zb^32[JSS4891<3Qwos>4:0`1_ymq8=82n2RGTDQ91.KmwqYn:jUfm~zjr^vlt*d~|lUhxb bhv\gqtk'Dy~nRIAD^311ZiXOGNT=?;Po^qvfZ76WF__0<=50?]{kw:>6:20TAVF_73,MkusW`8hS`o|tdp\pjv(jp~nSnz}l.`jpZesze%Yi~{ct=2=7<=_DQCT:1389[H]OX>8%Bb~zPi3a\idusm{Uc}!myug\gqtk'kcSnz}l.Pfwpjs48;5?45WLYK\24)Nfz~Te?mPm`qwawYsgy%iuykPcupo+gosWj~y`"\jstnw8449;01S@UGP60-JjvrXa;iTal}{es]wku)eq}oToy|c/ckw[frud&Xnxb{<01=7<=_DQCT:8%Bb~zPi3a\idusm{Uc}!myug\gqtk'kcSnz}l.Pfwpjs48?5?55WLYK\24)Nfz~Te?mPm`qwawYsgy%iuykPcupo+gosWj~y`"\jstnw848402RGTDQ91.KmwqYn:jUfm~zjr^vlt*d~|lUhxb bhv\gqtk'[oxyaz32?1;?]J_AV<:#D`|t^k1gZkf{}oySya/c{waZesze%ieyQltsn,V`urd}682>64XMZJ[37(AgySd^KP@U=="Gasu]j6fYjiz~n~Rz`p.`zp`Yd|{f$ndzPcupo+Wct}e~7:3=7;YN[MZ06'@dxxRg=c^obwqcuW}e{#ow{e^awvi)ea}Uhxb Rdqvhq:06:20TAVF_73,MkusW`8hS`o|tdp\pjv(jp~nSnz}l.`jpZesze%Yi~{ct=:=7==_DQCT:nQbarvfvZrhx&hrxhQltsn,flrXk}xg#R`?174\mkp6;01S@UGP60-JjvrXa;iTal}{es]wku)eq}oToy|c/ckw[frud&Ue<<9=_hlu7d=_DQCT:=7UBWI^42+Lht|Vc9oRcnsugq[qiw'ksiRm{rm-amqYd|{f$nx}PsucwqvYd|{f%o^MC<0<6`>^KP@U=="Gasu]j6fYjiz~n~Rz`p.`zp`Yd|{f$ndzPcupo+gstWz~jxx}Pcupo*fUDDR:VSJ@K_006[jYj}qU>SB[[<1<6`>^KP@U=="Gasu]j6fYjiz~n~Rz`p.`zp`Yd|{f$ndzPcupo+gstWz~jxx}Pcupo*fUDDR:VSJ@K_006[jYj}qU>SB[[<0<71>^KP@U=="Gasu]j6fYjiz~n~Rz`p.`zp`Yd|{f$ndzPcupo+gstWz~jxx}Pcupo*fUDDV:?96VCXH]55*Oi{}Ub>nQbarvfvZrhx&hrxhQltsn,flrXk}xg#o{|_rvbppuXk}xg"n]LL^372>^KP@U=="Gasu]j6fYjiz~n~Rz`p.`zp`Yd|{f$ndzPcupo+gstWz~jxx}Pcupo*fUCI5:58;5WLYK\24)Nfz~Te?mPm`qwawYsgy%iuykPcupo+gosWj~y`"lzs^qweqstWj~y`#m\D@>2:0b3:0b2:138%Bb~zPi3a\idusm{Uc}!myug\gqtk'kcSnz}l.`vwZusi}xSnz}l/an`ZusgyUyy~`t^QT4102RGTDQ91.KmwqYn:jUfm~zjr^vlt*d~|lUhxb bhv\gqtk'kxS~znttq\gqtk&oYH@1<1589[H]OX>8%Bb~zPi3a\idusm{Uc}!myug\gqtk'kcSnz}l.`vwZusi}xSnz}l/dPGI]5UVZ\^R<8_n]NQ]Y6<:Ud9i5WLYK\24)Nfz~Te?mPm`qwawYsgy%iuykPcupo+gosWj~y`"lzs^qweqstWj~y`#h\CMY1YZVPZV8/HlppZo5kVgjyk}_ums+gsmVi~a!miu]`pwj(j|yTyo{ur]`pwj)nZNJ0?0:9:ZO\LY19&CeyQf2b]nevrbzV~d|"lvtd]`pwj(j`~Toy|c/cwp[vrf||yToy|c.gQGE^4ZWY]YS?9Po^OV\Z73h6VCXH]55*Oi{}Ub>nQbarvfvZrhx&hrxhQltsn,flrXk}xg#o{|_rvbppuXk}xg"k]KAZ0^[UQUW;=TcRczx^3;[JSS494>h6VCXH]55*Oi{}Ub>nQbarvfvZrhx&hrxhQltsn,flrXk}xg#o{|_rvbppuXk}xg"k]KAZ0^[UQUW;=TcRczx^3;[JSS484>h6VCXH]55*Oi{}Ub>nQbarvfvZrhx&hrxhQltsn,flrXk}xg#o{|_rvbppuXk}xg"k]KAZ0^[UQUW;=TcRczx^3;[JSS4;4?96VCXH]55*Oi{}Ub>nQbarvfvZrhx&hrxhQltsn,flrXk}xg#o{|_rvbppuXk}xg"k]KA^271>^KP@U=="Gasu]j6fYjiz~n~Rz`p.`zp`Yd|{f$ndzPcupo+gstWz~jxx}Pcupo*cUCIV;?96VCXH]55*Oi{}Ub>nQbarvfvZrhx&hrxhQltsn,flrXk}xg#o{|_rvbppuXk}xg"k]KA^07g>^KP@U=="Gasu]j6fYjiz~n~Rz`p.`zp`Yd|{f$ndzPcupo+gstWz~jxx}Pcupo*cok|lxTocz30?6g?]J_AV<:#D`|t^k1gZkf{}oySya/c{waZesze%ieyQltsn,fpuX{}ky~Qltsn-bljsm{Uhby2>0?6g?]J_AV<:#D`|t^k1gZkf{}oySya/c{waZesze%ieyQltsn,fpuX{}ky~Qltsn-bljsm{Uhby2>1?6g?]J_AV<:#D`|t^k1gZkf{}oySya/c{waZesze%ieyQltsn,fpuX{}ky~Qltsn-bljsm{Uhby2>2?6g?]J_AV<:#D`|t^k1gZkf{}oySya/c{waZesze%ieyQltsn,fpuX{}ky~Qltsn-bljsm{Uhby2>3?6`?]J_AV<:#D`|t^k1gZkf{}oySya/c{waZesze%ieyQltsn,fpuX{}ky~Qltsn-bljsm{Uhby2>>5a8\I^NW?;$Ec}{_h0`[hgt|lxTxb~ bxvf[frud&hbxRm{rm-aqvYt|h~~Rm{rm,emirbzViex1<14b9[H]OX>8%Bb~zPi3a\idusm{Uc}!myug\gqtk'kcSnz}l.`vwZusi}xSnz}l/djhqcuWjd0>0;c:ZO\LY19&CeyQf2b]nevrbzV~d|"lvtd]`pwj(j`~Toy|c/cwp[vrf||yToy|c.gkop`tXkg~783:l;YN[MZ06'@dxxRg=c^obwqcuW}e{#ow{e^awvi)ea}Uhxb btq\wqgs}zUhxb!fhnwawYdf}6>29m4XMZJ[37(AgySd4?o6VCXH]55*Oi{}Ub>nQbarvfvZrhx&hrxhQltsn,flrXk}xg#o{|_rvbppuXk}xg"kgctdp\gkr;07>h7UBWI^42+Lht|Vc9oRcnsugq[qiw'ksiRm{rm-amqYd|{f$nx}PsucwqvYd|{f%jdb{es]`jq:>6?80TAVF_73,MkusW`8hS`o|tdp\pjv(jp~nSnz}l.`jpZesze%iy~Q|t`vvwZesze$meazjr^amp^74UVMEHR?=5^m\atsfdV;;Sb89;YN[MZ06'@dxxRg=c^obwqcuW}e{#ow{e^awvi)ea}Uhxb btq\wqgs}zUhxb!fhnwawYdf}Q:?PQHNE]260YhWl{~maQ>0^m?5681?2RGTDQ91.KmwqYn:jUfm~zjr^vlt*d~|lUhxb bhv\gqtk'kxS~znttq\gqtk&ocgxh|PcovX56[XOGNT=?;Po^grqdjX99Ud0<=11758\I^NW?;$Ec}{_h0`[hgt|lxTxb~ bxvf[frud&hbxRm{rm-aqvYt|h~~Rm{rm,emirbzViexV?<]^EM@Z75=VeTi|{nl^33[j:6;78=;6VCXH]55*Oi{}Ub>nQbarvfvZrhx&hrxhQltsn,flrXk}xg#o{|_rvbppuXk}xg"kgctdp\gkr\9:WTKCJP137\kZcv}hfT==Q`<01=71d^KP@U=="Gasu]j6fYjiz~n~Rz`p.`zp`Yd|{f$ndzPcupo+gstWz~jxx}Pcupo*cok|lxToczP15a8\I^NW?;$Ec}{_h0`[hgt|lxTxb~ bxvf[frud&hbxRm{rm-aqvYt|h~~Rm{rm,emirbzViexR??4b9[H]OX>8%Bb~zPi3a\idusm{Uc}!myug\gqtk'kcSnz}l.`vwZusi}xSnz}l/djhqcuWjdSnQbarvfvZrhx&hrxhQltsn,flrXk}xg#o{|_rvbppuXk}xg"kgctdp\gkrX;=h0TAVF_73,MkusW`8hS`o|tdp\pjv(jp~nSnz}l.`jpZesze%iy~Q|t`vvwZesze$meazjr^ampZ23j2RGTDQ91.KmwqYn:jUfm~zjr^vlt*d~|lUhxb bhv\gqtk'kxS~znttq\gqtk&ocgxh|Pcov\11d^KP@U=="Gasu]j6fYjiz~n~Rz`p.`zp`Yd|{f$ndzPcupo+gstWz~jxx}Pcupo*cok|lxToczP75`8\I^NW?;$Ec}{_h0`[hgt|lxTxb~ bxvf[frud&hbxRm{rm-aqvYt|h~~Rm{rm,emirbzViexR6;b:ZO\LY19&CeyQf2b]nevrbzV~d|"lvtd]`pwj(j`~Toy|c/cwp[vrf||yToy|c.gkop`tXkg~T59:4XMZJ[37(AgySd^KP@U=="Gasu]j6fYjiz~n~Rz`p.`zp`Yd|{f$ndzPcupo+gstWz~jxx}Pcupo*vrfWjeehdzfoo]DJAY6:/HlppZo5kVgjyk}_ums+gsmVi~a!miu]`pwj(j|yTyo{ur]`pwj){}eTob`kiuklj6`5WLYK\24)Nfz~Te?mPm`qwawYsgy%iuykPcupo+gosWj~y`"mPsucwaZ@TEVLMh?#Fn066?]J_AV<:#D`|t^k1gZkf{}oySya/c{waZesze%ieyQltsn,gZusi}oTJ^CPFGf1)Lh6;8>=7UBWI^42+Lht|Vc9oRcnsugq[qiw'ksiRm{rm-amqYd|{f$oR}{aug\BVKXNOn9!D`>30377>^KP@U=="Gasu]j6fYjiz~n~Rz`p.`zp`Yd|{f$ndzPcupo+fYt|h~nSK]B_GDg6(Oi:=90TAVF_73,MkusW`8hS`o|tdp\pjv(jp~nSnz}l.`jpZesze%hS~zntd]EWHYANm8&Ec=;3:ZO\LY19&CeyQf2b]nevrbzV~d|"lvtd]`pwj(j`~Toy|c/b]ppdrbWOYFSKHk2,Km06`#Fn^QT46`^KP@U=="Gasu]j6fYjiz~n~Rz`p.`zp`Yd|{f$ndzPcupo+fYt|h~nSK]B_GDg0(Oi:;;?:6VCXH]55*Oi{}Ub>nQbarvfvZrhx&hrxhQltsn,flrXk}xg#nQ|t`vf[CUJWOLo8 Ga_RU37c=_DQCT:/HlppZo5kVgjyk}_ums+gsmVi~a!miu]`pwj(kVymykPFRO\BCb2%@d?:6VCXH]55*Oi{}Ub>nQbarvfvZrhx&hrxhQltsn,flrXk}xg#nQ|t`vf[CUJWOLo9 Ga_RU270=_DQCT:84XMZJ[37(AgySd24;513QFSER8>/HlppZo5kVgjyk}_ums+gsmVi~a!miu]`pwj(kg~7=<0<6:ZO\LY19&CeyQf2b]nevrbzV~d|"lvtd]`pwj(j`~Toy|c/blw8449;?1S@UGP60-JjvrXa;iTal}{es]wku)eq}oToy|c/ckw[frud&iex1?<>248\I^NW?;$Ec}{_h0`[hgt|lxTxb~ bxvf[frud&hbxRm{rm-`jq:6<79=7UBWI^42+Lht|Vc9oRcnsugq[qiw'ksiRm{rm-amqYd|{f$ocz314<01>^KP@U=="Gasu]j6fYjiz~n~Rz`p.`zp`Yd|{f$ndzPcupo+fhs484896VCXH]55*Oi{}Ub>nQbarvfvZrhx&hrxhQltsn,flrXk}xg#n`{<3<01>^KP@U=="Gasu]j6fYjiz~n~Rz`p.`zp`Yd|{f$ndzPcupo+fhs4:4896VCXH]55*Oi{}Ub>nQbarvfvZrhx&hrxhQltsn,flrXk}xg#n`{<5<01>^KP@U=="Gasu]j6fYjiz~n~Rz`p.`zp`Yd|{f$ndzPcupo+fhs4<4896VCXH]55*Oi{}Ub>nQbarvfvZrhx&hrxhQltsn,flrXk}xg#n`{<7<01>^KP@U=="Gasu]j6fYjiz~n~Rz`p.`zp`Yd|{f$ndzPcupo+fhs4>4896VCXH]55*Oi{}Ub>nQbarvfvZrhx&hrxhQltsn,flrXk}xg#n`{<9<01>^KP@U=="Gasu]j6fYjiz~n~Rz`p.`zp`Yd|{f$ndzPcupo+fhs404886VCXH]55*Oi{}Ub>nQbarvfvZrhx&hrxhQltsn,flrXk}xg#n`{_117?]J_AV<:#D`|t^k1gZkf{}oySya/c{waZesze%ieyQltsn,gkrX9:?0TAVF_73,MkusW`8hS`o|tdp\pjv(jp~nSnz}l.`jpZesze%hbyQ>0278\I^NW?;$Ec}{_h0`[hgt|lxTxb~ bxvf[frud&hbxRm{rm-`jqY69:?0TAVF_73,MkusW`8hS`o|tdp\pjv(jp~nSnz}l.`jpZesze%hbyQ>2278\I^NW?;$Ec}{_h0`[hgt|lxTxb~ bxvf[frud&hbxRm{rm-`jqY6;:?0TAVF_73,MkusW`8hS`o|tdp\pjv(jp~nSnz}l.`jpZesze%hbyQ>4278\I^NW?;$Ec}{_h0`[hgt|lxTxb~ bxvf[frud&hbxRm{rm-`jqY6=:>0TAVF_73,MkusW`8hS`o|tdp\pjv(jp~nSnz}l.`jpZesze%hbyQ=359[H]OX>8%Bb~zPi3a\idusm{Uc}!myug\gqtk'kcSnz}l.ampZ54<2RGTDQ91.KmwqYn:jUfm~zjr^vlt*d~|lUhxb bhv\gqtk'jdS9=;;YN[MZ06'@dxxRg=c^obwqcuW}e{#ow{e^awvi)ea}Uhxb cov\162^KP@U=="Gasu]j6fYjiz~n~Rz`p.`zp`Yd|{f$ndzPcupo+fhsW19?7UBWI^42+Lht|Vc9oRcnsugq[qiw'ksiRm{rm-amqYd|{f$oczP9218\I^NW?;$Ec}{_h0`[hgt|lxTxb~ bxvf[frud&hbxRm{rm-gWFJ4;2RGTDQ91.KmwqYn:jUfm~zjr^vlt*d~|lUhxb bhv\gqtk'mYOM>=4XMZJ[37(AgySd^KP@U=="Gasu]j6fYjiz~n~Rz`p.`zp`Yd|{f$ndzPcupo+air|Vxxx}a{369[H]OX>8%Bb~zPi3a\idusm{Uc}!myug\gqtk'kcSnz}l.fpgiYhmg997UBWI^42+Lht|Vc9oRcnsugq[qiw'ksiRm{rm-amqYd|{f$elb<7:ZO\LY19&CeyQf2b]nevrbzV~d|"lvtd]`pwj(j`~Toy|c/hq`hZibf=k0TAVF_73,MkusW`8hS`o|tdp\pjv(jp~nSnz}l.`jpZesze%bnbPodl\TRTX:>UdS@[W_332[j5b3QFSER8>/HlppZo5kVgjyk}_ums+gsmVi~a!miu]`pwj(azigSbka_sqwtjr312RGTDQ91.KmwqYn:jUfm~zjr^vlt*d~|lUhxb bhv\gqtk'`yh`Rajn^qoescXhcSB\P4^m7e>^KP@U=="Gasu]j6fYjiz~n~Rz`p.`zp`Yd|{f$ndzPcupo+luddVenbR}cawg\sdosWFXT8Ra>369[H]OX>8%Bb~zPi3a\idusm{Uc}!myug\gqtk'kcSnz}l.kp`dYhmg9n7UBWI^42+Lht|Vc9oRcnsugq[qiw'ksiRm{rm-amqYd|{f$e~jn_ngm[wusxf~?>6VCXH]55*Oi{}Ub>nQbarvfvZrhx&hrxhQltsn,flrXk}xg#d}ka^mfjZtt|yeS^Y?3d9[H]OX>8%Bb~zPi3a\idusm{Uc}!myug\gqtk'kcSnz}l.pppZofdVEYS8>Po2d8\I^NW?;$Ec}{_h0`[hgt|lxTxb~ bxvf[frud&hbxRm{rm-qwqYnieUD^R;?_n377>^KP@U=="Gasu]j6fYjiz~n~Rz`p.`zp`Yd|{f$ndzPcupo+wusWzigS~wac^MQ[74Xg=>0TAVF_73,MkusW`8hS`o|tdp\pjv(jp~nSnz}l.`jpZesze%yyQ|cm]p}keXG[U9>Ra>459[H]OX>8%Bb~zPi3a\idusm{Uc}!myug\gqtk'kcSnz}l.pppZuddVyrbnQ@R^01[j43<2RGTDQ91.KmwqYn:jUfm~zjr^vlt*d~|lUhxb bhv\gqtk'{yS~mc_r{mgZIUW;8Tc>:;;YN[MZ06'@dxxRg=c^obwqcuW}e{#ow{e^awvi)ea}Uhxb rrv\wfjX{pdhSB\P23]l012?>5WLYK\24)Nfz~Te?mPm`qwawYsgy%iuykPcupo+gosWj~y`"}\CM65?]J_AV<:#D`|t^k1gZkf{}oySya/c{waZesze%ieyQltsn,wVEKWY]YS?9Po^OV\Z73=Ve8?6VCXH]55*Oi{}Ub>nQbarvfvZrhx&hrxhQltsn,flrXk}xg#~]KA558\I^NW?;$Ec}{_h0`[hgt|lxTxb~ bxvf[frud&hbxRm{rm-pWAGXOGNT=?;Po^OV\Z73?Ve?;6VCXH]55*Oi{}Ub>nQbarvfvZrhx&hrxhQltsn,flrXk}xg#~]KA^EM@Z75=VeTAXVP15:\k10=Sb=9;YN[MZ06'@dxxRg=c^obwqcuW}e{#ow{e^awvi)ea}Uhxb sec\gmm3i2RGTDQ91.KmwqYn:jUfm~zjr^vlt*d~|lUhxb bhv\gqtk'znjSnfd_FLG[442WfUFYUQ>52]l7a=_DQCT:8%Bb~zPi3a\idusm{Uc}!myug\gqtk'jeyiRmbd=2=74=_DQCT:8%Bb~zPi3a\idusm{Uc}!myug\gqtk'jeyiRmbd^204>^KP@U=="Gasu]j6fYjiz~n~Rz`p.`zp`Yd|{f$ob|j_bog[4573QFSER8>/HlppZo5kVgjyk}_ums+gsmVi~a!losg\ghbX:::0TAVF_73,MkusW`8hS`o|tdp\pjv(jp~nSnz}l.alv`YdemU8>h5WLYK\24)Nfz~Te?mPm`qwawYsgy%iuykPcupo+fiumV~sh?j4XMZJ[37(AgySdnQbarvfvZrhx&hrxhQltsn,`fhsS;WTKCJP136\kZkrpV2TCXZ32?0`?]J_AV<:#D`|t^k1gZkf{}oySya/c{waZesze%ooczP03a8\I^NW?;$Ec}{_h0`[hgt|lxTxb~ bxvf[frud&nhbyQ>2b9[H]OX>8%Bb~zPi3a\idusm{Uc}!myug\gqtk'miexR<=e:ZO\LY19&CeyQf2b]nevrbzV~d|"lvtd]`pwj(`fySlmd299[H]OX>8%Bb~zPi3a\idusm{Uc}!myug\gqtk'en9n6VCXH]55*Oi{}Ub>nQbarvfvZrhx&hrxhQltsn,wmoa|;h0TAVF_73,MkusW`8hS`o|tdp\pjv(jp~nSnz}l.qq8585j2RGTDQ91.KmwqYn:jUfm~zjr^vlt*d~|lUhxb ss>2:7d^KP@U=="Gasu]j6fYjiz~n~Rz`p.`zp`Yd|{f$2<>3`8\I^NW?;$Ec}{_h0`[hgt|lxTxb~ bxvf[frud&yy090=b:ZO\LY19&CeyQf2b]nevrbzV~d|"lvtd]`pwj({{6>2?l4XMZJ[37(AgySdnQbarvfvZrhx&hrxhQltsn,ww:06=80TAVF_73,MkusW`8hS`o|tdp\pjv(jp~nSnz}l.qq_2[XOGNT=?:Po^ov|Z5XG\^7<3:=;YN[MZ06'@dxxRg=c^obwqcuW}e{#ow{e^awvi)tzR=VSJ@K_007[jYj}qU8SB[[<0<76>^KP@U=="Gasu]j6fYjiz~n~Rz`p.`zp`Yd|{f$U8]^EM@Z759Q`_lw{[6YH]]6829<4XMZJ[37(AgySdWTKCJP136\kZkrpV9TCXZ34?61?]J_AV<:#D`|t^k1gZkf{}oySya/c{waZesze%x~V9R_FLG[443WfUfyuQ<_NWW8083:2RGTDQ91.KmwqYn:jUfm~zjr^vlt*d~|lUhxb ssY4YZAILV;98RaPmtz\7ZIR\5<58?5WLYK\24)Nfz~Te?mPm`qwawYsgy%iuykPcupo+vt\?TULBIQ>25]l[hsW:UDYY28>3c8\I^NW?;$Ec}{_h0`[hgt|lxTxb~ bxvf[frud&yyS=nQbarvfvZrhx&hrxhQltsn,wwY5:h1S@UGP60-JjvrXa;iTal}{es]wku)eq}oToy|c/rp\77gl5WLYK\24)Nfz~Te?mPm`qwawYsgy%iuykPcupo+vtX?<;0TAVF_73,MkusW`8hS`o|tdp\pjv(jp~nSnz}l.qweqcjijbbbh l_rvbp`]6UVMEHR?=4^m\IP^X:;:Tc8?4XMZJ[37(AgySd<7Po438\I^NW?;$Ec}{_h0`[hgt|lxTxb~ bxvf[frud&ymykbabjjj`(dWz~jxhU=]^EM@Z75478\I^NW?;$Ec}{_h0`[hgt|lxTxb~ bxvf[frud&ymykbabjjj`(dWz~jxhU=]^EM@Z75478\I^NW?;$Ec}{_h0`[hgt|lxTxb~ bxvf[frud&ymykbabjjj`(dWz~jxhU=]^EM@Z751S@UGP60-JjvrXa;iTal}{es]wku)eq}oToy|c/rvbp`kfkacei#mPsucwaZ@TEVLMh<#Fn064?]J_AV<:#D`|t^k1gZkf{}oySya/c{waZesze%xxlzjm`akmkc)kVymykPFRO\BCb6%@d98:5WLYK\24)Nfz~Te?mPm`qwawYsgy%iuykPcupo+vrf|lgjoegae/a\wqgsmVLXARHId0/Jj6243QFSER8>/HlppZo5kVgjyk}_ums+gsmVi~a!|t`vfideoago%oR}{aug\BVKXNOn98;5WLYK\24)Nfz~Te?mPm`qwawYsgy%iuykPcupo+vrf|lgjoegae/a\wqgsmVLXARHId3/Jj11/HlppZo5kVgjyk}_ums+gsmVi~a!|t`vfideoago%oR}{aug\BVKXNOn8!D`>499[H]OX>8%Bb~zPi3a\idusm{Uc}!myug\gqtk'z~jxhcncikma+eX{}kiRH\M^DE`6+Nf8;?;6VCXH]55*Oi{}Ub>nQbarvfvZrhx&hrxhQltsn,wqgsmdkhdd`j.b]ppdrbWOYFSKHk3,Km611^KP@U=="Gasu]j6fYjiz~n~Rz`p.aq848592RGTDQ91.KmwqYn:jUfm~zjr^vlt*eu4;49=6VCXH]55*Oi{}Ub>nQbarvfvZrhx&iy0>0=1:ZO\LY19&CeyQf2b]nevrbzV~d|"m}<5<15>^KP@U=="Gasu]j6fYjiz~n~Rz`p.aq808592RGTDQ91.KmwqYn:jUfm~zjr^vlt*eu4?49=6VCXH]55*Oi{}Ub>nQbarvfvZrhx&iy0:0<5:ZO\LY19&CeyQf2b]nevrbzV~d|"m}[6_\gw]0UVg~tR?8_NWW8584=2RGTDQ91.KmwqYn:jUfm~zjr^vlt*euS>WToU8]^ov|Z70WF__0<0<5:ZO\LY19&CeyQf2b]nevrbzV~d|"m}[6_\gw]0UVg~tR?8_NWW8784=2RGTDQ91.KmwqYn:jUfm~zjr^vlt*euS>WToU8]^ov|Z70WF__0>0<5:ZO\LY19&CeyQf2b]nevrbzV~d|"m}[6_\gw]0UVg~tR?8_NWW8184=2RGTDQ91.KmwqYn:jUfm~zjr^vlt*euS>WToU8]^ov|Z70WF__080<5:ZO\LY19&CeyQf2b]nevrbzV~d|"m}[6_\gw]0UVg~tR?8_NWW8384=2RGTDQ91.KmwqYn:jUfm~zjr^vlt*euS>WToU8]^ov|Z70WF__0:0=0:ZO\LY19&CeyQf2b]nevrbzV~d|"m}_103?]J_AV<:#D`|t^k1gZkf{}oySya/bp\576nQbarvfvZrhx&iyS9?5WLYK\24)Nfz~Te?mPm`qwawYsgy%hx2>>308\I^NW?;$Ec}{_h0`[hgt|lxTxb~ cup?6;453QFSER8>/HlppZo5kVgjyk}_ums+fru4:49>6VCXH]55*Oi{}Ub>nQbarvfvZrhx&i~1:1239[H]OX>8%Bb~zPi3a\idusm{Uc}!lts>6:747897UBWI^42+Lht|Vc9oRcnsugq[qiw'j~y0:0=1:ZO\LY19&CeyQf2b]nevrbzV~d|"m{r^215>^KP@U=="Gasu]j6fYjiz~n~Rz`p.awvZ7592RGTDQ91.KmwqYn:jUfm~zjr^vlt*eszV89=6VCXH]55*Oi{}Ub>nQbarvfvZrhx&i~R==1:ZO\LY19&CeyQf2b]nevrbzV~d|"m{r^615>^KP@U=="Gasu]j6fYjiz~n~Rz`p.awvZ3592RGTDQ91.KmwqYn:jUfm~zjr^vlt*eszV<9=6VCXH]55*Oi{}Ub>nQbarvfvZrhx&i~R9=d:ZO\LY19&CeyQf2b]nevrbzV~d|"g=c^co[djXG[U>8Ra=e:ZO\LY19&CeyQf2b]nevrbzV~d|"g=c^co[djXG[U>8Ra>239[H]OX>8%Bb~zPi3a\idusm{Uc}!fabi\k72o5WLYK\24)Nfz~Te?mPm`qwawYsgy%b~|Qil`e\vvrwg}8:7UBWI^42+Lht|Vc9oRcnsugq[qiw'ds=<<=;YN[MZ06'@dxxRg=c^obwqcuW}e{#`{w10317>^KP@U=="Gasu]j6fYjiz~n~Rz`p.ov|4769;90TAVF_73,MkusW`8hS`o|tdp\pjv(e|r:=<<=3:ZO\LY19&CeyQf2b]nevrbzV~d|"czx032774^KP@U=="Gasu]j6fYjiz~n~Rz`p.ov|776:;1S@UGP60-JjvrXa;iTal}{es]wku)j}q8:>??4XMZJ[37(AgySd/HlppZo5kVgjyk}_ums+hs;889=6VCXH]55*Oi{}Ub>nQbarvfvZrhx&g~t9?=2:ZO\LY19&CeyQf2b]nevrbzV~d|"czx53267=_DQCT:=?<4XMZJ[37(AgySd<5WLYK\24)Nfz~Te?mPm`qwawYsgy%fyu8>239[H]OX>8%Bb~zPi3a\idusm{Uc}!buy42574nQbarvfvZrhx&g~t:?<_F00?]J_AV<:#D`|t^k1gZkf{}oySya/qpfv969:=1S@UGP60-JjvrXa;iTal}{es]wku)wzlx7==0=4:ZO\LY19&CeyQf2b]nevrbzV~d|"~}es>25;433QFSER8>/HlppZo5kVgjyk}_ums+utbz5;92?:4XMZJ[37(AgySdnQbarvfvZrhx&zyi2>5?00?]J_AV<:#D`|t^k1gZkf{}oySya/qpfv979::1S@UGP60-JjvrXa;iTal}{es]wku)wzlx7>3<<;YN[MZ06'@dxxRg=c^obwqcuW}e{#}|jr=1=66=_DQCT:8%Bb~zPi3a\idusm{Uc}!rdp?2;443QFSER8>/HlppZo5kVgjyk}_ums+utbz5=5>>5WLYK\24)Nfz~Te?mPm`qwawYsgy%{~h|38?00?]J_AV<:#D`|t^k1gZkf{}oySya/qpfv9?9:;1S@UGP60-JjvrXa;iTal}{es]wku)wzlxT8%Bb~zPi3a\idusm{Uc}!rdp\50453QFSER8>/HlppZo5kVgjyk}_ums+utbzV89>6VCXH]55*Oi{}Ub>nQbarvfvZrhx&zyiQ<239[H]OX>8%Bb~zPi3a\idusm{Uc}!rdp\074nQbarvfvZrhx&~b|?<4XMZJ[37(AgySd?5WLYK\24)Nfz~Te?mPm`qwawYsgy%t2<>308\I^NW?;$Ec}{_h0`[hgt|lxTxb~ typ?0;453QFSER8>/HlppZo5kVgjyk}_ums+q~u4<49>6VCXH]55*Oi{}Ub>nQbarvfvZrhx&~s~181239[H]OX>8%Bb~zPi3a\idusm{Uc}!{xs>4:77nQbarvfvZrhx&}iSlj}_hY1YZAILV;9?RaPwhff[hsW8UDYY2>>518\I^NW?;$Ec}{_h0`[hgt|lxTxb~ wc]b`wYnS;WTKCJP131\kZqnllUfyuQ>_NWW8783;2RGTDQ91.KmwqYn:jUfm~zjr^vlt*qeWhnySdU=]^EM@Z75;VeT{djj_lw{[4YH]]6829=4XMZJ[37(AgySd^KP@U=="Gasu]j6fYjiz~n~Rz`p.ua[dbuW`Q9QRIAD^317ZiX`nnS`{w_0]LQQ:26=90TAVF_73,MkusW`8hS`o|tdp\pjv(kUjhQf[3_\CKBX9;9TcRyfdd]nq}Y6WF__0;0;3:ZO\LY19&CeyQf2b]nevrbzV~d|"ym_`fq[l]5UVMEHR?=3^m\slbbWdsS4:625^m262=_DQCT:1S@UGP60-JjvrXa;iTal}{es]wku)pjVnjxRa32?04?]J_AV<:#D`|t^k1gZkf{}oySya/v`\`drXg595>:5WLYK\24)Nfz~Te?mPm`qwawYsgy%|nRjnt^m?0;403QFSER8>/HlppZo5kVgjyk}_ums+rdXlh~Tc1;1269[H]OX>8%Bb~zPi3a\idusm{Uc}!xb^fbpZi;>78<7UBWI^42+Lht|Vc9oRcnsugq[qiw'~hThlzPo=5=63=_DQCT:/HlppZo5kVgjyk}_ums+rdXlh~TcR<=6:ZO\LY19&CeyQf2b]nevrbzV~d|"ym_ecw[jY4:?1S@UGP60-JjvrXa;iTal}{es]wku)pjVnjxRaP4348\I^NW?;$Ec}{_h0`[hgt|lxTxb~ wc]geqYhW<8=7UBWI^42+Lht|Vc9oRcnsugq[qiw'~hThlzPo^412>^KP@U=="Gasu]j6fYjiz~n~Rz`p.ua[agsWfU<>85WLYK\24)Nfz~Te?mPm`qwawYsgy%|nRgat`]l6f=_DQCT:^KP@U=="~fnRAO+vik&lm=<94XMZJ[37(x`dXOA!|yoa,bc46=2RGTDQ91.rjjVEK'zseo"}>7:ZO\LY19&zbb^JN/r{mg*`a98=0TAVF_73,tlhTLH%xucm fg021>^KP@U=="~fnRFB+vik&y:=6VCXH]55*uddVzjhRg>1:ZO\LY19&yomR~nd^ka?]J_FV>?51;1b:ZO\KY3<06=2o5WLYL\01?;?7h0TAVA_4;;858d3QFSBR;68=33:f=_DQDT946310<`?]J_FV?241?=>b9[H]HX=027=>0l;YN[JZ3>05;?2n5WLYL\1<>;9<4h7UBWN^7:<9716j1S@U@P58:?528d3QFSBR;68=3;:f=_DQDT94631810;e^KPGU>552=6?a8\I^IW<330?91c:ZO\KY2116943m4XMZM[0??4;35n6VCXO]6==:56j1S@U@P58:?758d3QFSBR;68=12:f=_DQDT946333<`?]J_FV?241=<>b9[H]HX=027?90l;YN[JZ3>059>2n5WLYL\1<>;;?4h7UBWN^7:<9506j1S@U@P58:?7=8d3QFSBR;68=1::g=_DQDT94633?a8\I^IW<3309>1c:ZO\KY2116?=3m4XMZM[0??4=85o6VCXO]6==:3;7i0TAVA_4;;8129k2RGTCQ:99>71;e^KPGU>552;7?a8\I^IW<330961c:ZO\KY2116?53l4XMZM[0??4=4h7UBWN^7:<9376j1S@U@P58:?148d3QFSBR;68=71:f=_DQDT946352;?7h0TAVA_4;;8=8e3QFSBR;68=;=`>^KPGU>542>01=>e9[H]HX=037===1d:ZO\KY2106:<90k;YN[JZ3>15;;93j4XMZM[0?>48:=2i5WLYL\12568c3QFSBR;69=320;b^KPGU>542>168?f8\I^IW<320e9[H]HX=037=?>1d:ZO\KY2106:><0k;YN[JZ3>15;9>3j4XMZM[0?>48882i5WLYL\15h6VCXO]6=<:6:<4o7UBWN^7:=975>7n0TAVA_4;:84406m1S@U@P58;?57>9l2RGTCQ:98>26<8c3QFSBR;69=304;b^KPGU>542>32e9[H]HX=037=>81d:ZO\KY2106:?:0k;YN[JZ3>15;843j4XMZM[0?>48922i5WLYL\12008c3QFSBR;69=372;b^KPGU>542>48>e9[H]HX=037=8<1d:ZO\KY2106:9>0k;YN[JZ3>15;>83j4XMZM[0?>48?>2i5WLYL\14o7UBWN^7:=97207n0TAVA_4;:843>6m1S@U@P58;?5369l2RGTCQ:98>2248c3QFSBR;69=356;b^KPGU>542:5?a8\I^IW<320881c:ZO\KY2106>;3m4XMZM[0?>4<25o6VCXO]6=<:217i0TAVA_4;:8369k2RGTCQ:98>55;e^KPGU>54293?a8\I^IW<320;:1c:ZO\KY2106=93m4XMZM[0?>4?<5o6VCXO]6=<:1?7i0TAVA_4;:83>9k2RGTCQ:98>5=;e^KPGU>54281?a8\I^IW<320:<1c:ZO\KY21064>>5o6VCXO]6=<:0=7i0TAVA_4;:8209k2RGTCQ:98>43;e^KPGU>54289?a8\I^IW<3205>1c:ZO\KY21063=3m4XMZM[0?>4185o6VCXO]6=<:?;7i0TAVA_4;:8=29k2RGTCQ:98>;1;e^KPGU>54277?a8\I^IW<320561c:ZO\KY2106353m4XMZM[0?>40:5o6VCXO]6=<:>97i0TAVA_4;:8<49k2RGTCQ:98>:7;e^KPGU>54265?a8\I^IW<320481c:ZO\KY21062;3m4XMZM[0?>4025o6VCXO]6=<:>17h0TAVA_723858e3QFSBR8?0=3=g>^KPGU=<=2=8?a8\I^IW?:;0?71b:ZO\KY189692n5WLYL\256;;94h7UBWN^4349566j1S@U@P612?778d3QFSBR8?0=10:f=_DQDT:=>335<`?]J_FV<;<1=:>c9[H]HX>9:7?3l4XMZM[3674=4i7UBWN^434939k2RGTCQ901>54;e?<73=1>^HZJS=7U][LH@2b>^T\VKOZL@LEE]NEFTHWHIHYRC|uc]EB2=_[]ULBI94XRV\RFE13QniSDj>0:ZgiZKfbfx]i}foo33?]bjWDcecXjrrklj6=_{}=0T~zPCm3;?]usWJf:<55Wsu]@h47?3QySNb>299[wqYDd8937U}{_Bn20==_{}UH`<;7;Yqw[Fj6>11SyQLl05;?]usWJf:455Wsu]@h4?03QySNb=8:ZppZEk:920T~zPCm02<>^t|VIg>?64Xrv\Gi4402RxxRMc25:8\vrXKe8>46V|t^Ao63>^t|VIg?55Wsu]@h66?3QySNb<199[wqYDd:837U}{_Bn07==_{}UH`>:7;Yqw[Fj4=11SyQLl24;?]usWJf8;55Wsu]@h6>?3QySNb<969[wqYDd=20T~zPCm63<>^t|VIg8<64Xrv\Gi2502RxxRMc42:8\vrXKe>?46V|t^Ao00>20T~zPCm6;<>^t|VIg8494Xrv\Gi3?3QySNb:099[wqYDd<;<7U}{_Bn53>^t|VIg;:5Wsu]@h=1;4_^][HKKXWV:TSRVCXH]55*Oi{}Ub>nQbarvfvZrhx&Ue<<=>_hlu5016_hlu503WTaxvP16]LQQ26<11TSRVCNL]\[43XWVRGTDQ91.KmwqYn:jUfm~zjr^vlt*Kj}qUh~V9R_bpX3XYj}qU:;RAZT3357>YXWQFEARQP17]\[]J_AV<:#D`|t^k1gZkf{}oySya/c{waZesze%ieyQltsn,IhsW`yomRajn^RTVZ40WfUFYUQ=13]l6ZUP8<80SRQWLOO\[Z70WVUS@UGP60-JjvrXa;iTal}{es]wku)eq}oToy|c/ckw[frud&iTyo{e^DPIZ@Al;'Bb>;<;^]\\IHJWVU:4RQPXMZJ[37(AgySd;^]\\IHJWVU:SRQWLYK\24)Nfz~Te?mPm`qwawYsgy%iuykPcupo+gosWj~y`"mPsucwaZ@TEVLMh?#Fn01;?ZYXPEDFSRQ=0^]\\I^NW?;$Ec}{_h0`[hgt|lxTxb~ Mlw{[Zh79:?3=>64_^][HKKXWV8:SRQWLYK\24)Nfz~Te?mPm`qwawYsgy%FaxvP_o227070;11TSRVCNL]\[74XWVRGTDQ91.KmwqYn:jUfm~zjr^vlt*Kj}qUTb=?<5530<>YXWQFEARQP22]\[]J_AV<:#D`|t^k1gZkf{}oySya/Lov|ZYi889>?<=7;^]\\IHJWVU98RQPXMZJ[37(AgySd>34527==XWVRGB@QP_34\[Z^KP@U=="Gasu]j6fYjiz~n~Rz`p.Onq}YXf9;89;?<8:]\[]JIEVUT>:QP_YN[MZ06'@dxxRg=c^obwqcuW}e{#@czx^]m4452=8<27RQPXMLN[ZY50VUTTAVF_73,MkusW`8hS`o|tdp\pjv(jp~nSnz}l.Onq}Yt|h~nalmgiog-gZusi}oP>PQHNE]261YhWdsS9:POTV2562b3VUTTA@B_^]1=ZYXPERBS;? Ioqw[l4dWdkxxh|Ptnr,f|rbWj~y`"lft^awvi)u{}UbmaQ@R^73[j72k2UTSUBAM^]\6ZYXPERBS;? Ioqw[l4dWdkxxh|Ptnr,f|rbWj~y`"lft^awvi)Je|rT^JN_FLG[442WfUFYUQ>49]l54543VUTTA@B_^]04ZYXPERBS87 sscn[lht|&ymykPFRO\BCb5%@d:?45P_^ZOJHYXW:;TSRVCXH]55*Oi{}Ub>nQbarvfvZrhx&xoSz|POS]61Zi6;81TSRVCNL]\[64XWVRGTDQ:9.qqehYnfz~$yo{e^]m44404;4:8k5P_^ZOJHYXW:9TSRVCXH]55*Oi{}Ub>nQbarvfvZrhx&hrxhQltsn,flrXk}xg#@m`uov\gkrXmxdT<<9?;^]\\IHJWVU88RQPXMZJ[37(AgySd8%Bb~zPi3a\idusm{Uc}!myug\gqtk'kcSnz}l.Onq}Ye}zUxxlzzs^awvi(a[MKP>PQ_WS]13ZiXe|rT=5Q@UU0235=XWVRGB@QP_24\[Z^KP@U=="Gasu]j6fYjiz~n~Rz`p.`zp`Yd|{f$ndzPcupo+HkrpVh~R}{auwp[frud'iXOAU?]^EM@Z75=VeTaxvP5^MVP47082UTSUBAM^]\72YXWQFSER8>/HlppZo5kVgjyk}_ums+gsmVi~a!miu]`pwj(EdsSo{|_rvbppuXk}xg"n]KAZ2^[BHCW88>SbQbuy]5[JSS98=;7RQPXMLN[ZY40VUTTAVF_73,MkusW`8hS`o|tdp\pjv(jp~nSnz}l.`jpZesze%FaxvPbtq\wqgs}zUhxb!fRFB_7[XX^XT>:Q`_lw{[4>XG\^:=8>4_^][HKKXWV92SRQWLYK\24)Nfz~Te?mPm`qwawYsgy%iuykPcupo+gosWj~y`"Clotlw[fhsWl{eS579\[Z^KFDUTS>QP_YN[MZ06'@dxxRg=c^obwqcuW}e{#ow{e^awvi)Je|rThn`{[3_\CKBX9;>TcRczx^:\KPR59<:0SRQWLOO\[Z27WVUS@UGP60-JjvrXa;iTal}{es]wku)eq}oToy|c/ckw[frud&Ghcx`{_blw[`wiW89:9=5P_^ZOJHYXW=;TSRVCXH]55*Oi{}Ub>nQbarvfvZrhx&hrxhQltsn,flrXk}xg#@m`uov\gkrXmxdT=8?;f:]\[]JIEVUT8?QP_YN[MZ06'@dxxRg=c^obwqcuW}e{#ow{e^awvi)ea}Uhxb MbmvjqYdf}Un}cQ=15d8[ZY_DGGTSR:<_^][H]OX>8%Bb~zPi3a\idusm{Uc}!myug\gqtk'kcSnz}l.O`kphsWjdSha_537b>YXWQFEARQP45]\[]J_AV<:#D`|t^k1gZkf{}oySya/c{waZesze%ieyQltsn,Ifirf}UhbyQjqo]551`_RU30d=XWVRGB@QP_55\[Z^KP@U>5"}}al]jjvr(EdsS~zntdY1YZ^X:?UdSzgke^ov|Z44WF__;R]X05c8[ZY_DGGTSR:7_^][H]OX=0%x~lcPioqw+HkrpVymykT2\][[70XgV}bhhQbuy]17ZIR\86QP_YNMIZYX&EcQ\W17`?ZYXPEDFSRQ:0^]\\I^NW?;$Ec}{_h0`[hgt|lxTxb~ bxvf[frud&hbxRm{rm-Nip~X{ZNJS]Y]_35\kZKRPV;?:Ra>17;8[ZY_DGGTSR;>_^][H]OX>8%Bb~zPi3a\idusm{Uc}!myug\gqtk'Dg~tR}{augnefnnfl$hS~zntdY1YZAILV;98RaPmtz\01YH]];:>><4_^][HKKXWV?9SRQWLYK\24)Nfz~Te?mPm`qwawYsgy%fyu?>1212?ZYXPEDFSRQ:3^]\\I^NW?;$Ec}{_h0`[hgt|lxTxb~ mtz556313VUTTA@B_^]60ZYXPERBS;? Ioqw[l4dWdkxxh|Ptnr,f|rbWj~y`"}{augnefnnfl$hS~zntd]EWHYANm;&Ec=85:]\[]JIEVUT9RQPXMZJ[37(AgySd27;54:2UTSUBAM^]\2ZYXPERBS87 sscn[lht|&GfyuQ|tsmaaZgcl{;::45P_^ZOJHYXW>UTSUBWI^42+Lht|Vc9oRcnsugq[qiw'ksiRm{rm-Nip~X{}ki`olhhlf*fYt|h~nW?SPGOF\572XgVg~tR:;_NWW5446>11TSRVCNL]\[=YXWQFSER8>/HlppZo5kVgjyk}_ums+gsmVi~a!Bmtz\wqgsmdkhdd`j.b]ppdrbS;WTKCJP136\kZkrpV>?SB[[8035f>YXWQFEARQP9^]\\I^NW?;$Ec}{_h0`[hgt|lxTxb~ bxvf[frud&GfyuQ|t`vfideoago%oR}{augX6XY@FMU:>9Q`_lw{[12XG\^:=>?>169`[vrf|l20oaeP1Ljy=>ekcV3=Aetk;bnh[judW:8Fdw?=;bnh[vtkeaTob_vg27>ekcVyrnbd_rpbiZqbf:1oh`k4eyv\tlhtW`d7<3?=;dzw[uoi{Vce0<>?:1<24>c|Vzbb~Qfn=334;`g9f|qYwagyTec2=1?d8a}rXx`dxSd`323c|Vzbb~Qfn=07:c=bp}U{ec}Pio>11;`;1f:g{pZvnfzUbb1=9>g9f|qYwagyTec2<7?d8a}rXx`dxSd`339c|Vzbb~Qfn=1=b>c|Vzbb~Qfn=63:c=bp}U{ec}Pio>75;`32k5jxu]smkuXag6?53k4eyv\tlhtW`d783h4eyv\tlhtW`d79=0i;dzw[uoi{Vce08?1f:g{pZvnfzUbb1;=>g9f|qYwagyTec2:3?d8a}rXx`dxSd`355c|Vzbb~Qfn=75:c=bp}U{ec}Pio>63;`;4m7hv{_qkmwZoi4?95j6kwt^rjjvYnf5g9f|qYwagyTec299?g8a}rXx`dxSd`36?d8a}rXx`dxSd`371c|Vzbb~Qfn=51:c=bp}U{ec}Pio>47;`35i6kwt^rjjvYnf5=5j6kwt^rjjvYnf52;2k5jxu]smkuXag63=3h4eyv\tlhtW`d74?0i;dzw[uoi{Vce05=1f:g{pZvnfzUbb16;>g9f|qYwagyTec275?d8a}rXx`dxSd`387c|Vzbb~Qfn=:;:c=bp}U{ec}Pio>;=;c;7l0iuzPphlp[lh;1=4m7hv{_qkmwZoi40?5j6kwt^rjjvYnf53=2k5jxu]smkuXag62;3h4eyv\tlhtW`d7550i;dzw[uoi{Vce0471e:g{pZvnfzUbb171139f|qYwagyTecQ>_H@VB44008a}rXx`dxSd``uu>25;753lrS}gas^kmkpr;9;4:>6kwt^rjjvYnff0<=1139f|qYwagyTecazt=37:442:g{pZvnfzUbbb{{<05=57=bp}U{ec}Piomvp97?6880iuzPphlp[lhh}}6:53?>;dzw[uoi{Vcecxz31?31?`~sWyceRgaotv?6586:2osxR~fnr]jjjss4;;5=?5jxu]smkuXage~x1<=>008a}rXx`dxSd``uu>17;753lrS}gas^kmkpr;:=4:>6kwt^rjjvYnff0?;1139f|qYwagyTecazt=05:4450>2:g{pZvnfzUbbb{{<3;=54=bp}U{ec}Piomvp9499;1ntyQioq\mkir|59;2<<4eyv\tlhtW`ddyy2<1?31?`~sWyceRgaotv?7786:2osxR~fnr]jjjss4:95=?5jxu]smkuXage~x1=;>008a}rXx`dxSd``uu>01;753lrS}gas^kmkpr;;?4:>6kwt^rjjvYnff0>91139f|qYwagyTecazt=1;:44c|Vzbb~Qfnnww81799;1ntyQioq\mkir|5>92<<4eyv\tlhtW`ddyy2;3?31?`~sWyceRgaotv?0186:2osxR~fnr]jjjss4=?5=?5jxu]smkuXage~x1:9>008a}rXx`dxSd``uu>73;753lrS}gas^kmkpr;<14:>6kwt^rjjvYnff0971109f|qYwagyTecazt=6=57=bp}U{ec}Piomvp9376880iuzPphlp[lhh}}6>=3?=;dzw[uoi{Vcecxz353<26>c|Vzbb~Qfnnww80599;1ntyQioq\mkir|5??2<<4eyv\tlhtW`ddyy2:5?31?`~sWyceRgaotv?1386:2osxR~fnr]jjjss4<=5=?5jxu]smkuXage~x1;7>008a}rXx`dxSd``uu>6=;763lrS}gas^kmkpr;=7;97hv{_qkmwZoig|~7:=0>2:g{pZvnfzUbbb{{<73=57=bp}U{ec}Piomvp9056880iuzPphlp[lhh}}6=?3?=;dzw[uoi{Vcecxz365<26>c|Vzbb~Qfnnww83399;1ntyQioq\mkir|5<=2<<4eyv\tlhtW`ddyy297?31?`~sWyceRgaotv?2=86:2osxR~fnr]jjjss4?35=<5jxu]smkuXage~x181139f|qYwagyTecazt=53:442:g{pZvnfzUbbb{{<61=57=bp}U{ec}Piomvp9136880iuzPphlp[lhh}}6<93?=;dzw[uoi{Vcecxz377<26>c|Vzbb~Qfnnww82199;1ntyQioq\mkir|5=32<<4eyv\tlhtW`ddyy289?32?`~sWyceRgaotv?3;753lrS}gas^kmkpr;094:>6kwt^rjjvYnff05?1139f|qYwagyTecazt=:1:442:g{pZvnfzUbbb{{<97=57=bp}U{ec}Piomvp9>16880iuzPphlp[lhh}}63;3?=;dzw[uoi{Vcecxz389<26>c|Vzbb~Qfnnww8=?9981ntyQioq\mkir|525=?5jxu]smkuXage~x17?>008a}rXx`dxSd``uu>:5;753lrS}gas^kmkpr;1;4:>6kwt^rjjvYnff04=1139f|qYwagyTecazt=;7:44=7;97hv{_qkmwZoig|~75;0>2:g{pZvnfzUbbb{{<85=57=bp}U{ec}Piomvp9??6880iuzPphlp[lhh}}6253?>;dzw[uoi{Vcecxz39?35?`~sWyceRgaotv\4ZOHJ\L:46kwt^rjjvYnffS<>?_N@VBQ703lrS}gas^kmkprX99UBCO[I169f|qYwagyTecazt^32[JDRN];<7hv{_qkmwZoig|~T=?Q@BTDW52=bp}U{ec}PiomvpZ74WFH^JY?8;dzw[uoi{VcecxzP15]LFP@S9>1ntyQioq\mkir|V;>SBLZFU34?`~sWyceRgaotv\53YHJ\L_=:5jxu]smkuXage~xR?8_N@VBQ703lrS}gas^kmkprX91UDNXH[169f|qYwagyTecazt^3:[JDRN];=7hv{_qkmwZoig|~T=RG@BTD23>c|Vzbb~Qfnnww[76XGK_MX<94eyv\tlhtW`ddyyQ=1^MAQCR6?2osxR~fnr]jjjssW;8TCO[IT058a}rXx`dxSd``uu]17ZIE]O^:;6kwt^rjjvYnffS?:POCWEP417:g{pZvnfzUbbb{{_34\KGSA\8=0iuzPphlp[lhh}}U9;RAMUGV23>c|Vzbb~Qfnnww[7>XGK_MX<94eyv\tlhtW`ddyyQ=9^MAQCR6>2osxR~fnr]jjjssW;UBCO[I169f|qYwagyTecazt^13[JDRN];<7hv{_qkmwZoig|~T?1ntyQioq\mkir|V9?SBLZFU34?`~sWyceRgaotv\70YHJ\L_=:5jxu]smkuXage~xR=9_N@VBQ703lrS}gas^kmkprX;>UDNXH[169f|qYwagyTecazt^1;[JDRN];<7hv{_qkmwZoig|~T?4Q@BTDW53=bp}U{ec}PiomvpZ5XAFH^J<94eyv\tlhtW`ddyyQ;0^MAQCR6?2osxR~fnr]jjjssW=;TCO[IT058a}rXx`dxSd``uu]76ZIE]O^:;6kwt^rjjvYnffS9=POCWEP417:g{pZvnfzUbbb{{_57\KGSA\8=0iuzPphlp[lhh}}U?:RAMUGV23>c|Vzbb~Qfnnww[11XGK_MX<94eyv\tlhtW`ddyyQ;8^MAQCR6?2osxR~fnr]jjjssW=3TCO[IT048a}rXx`dxSd``uu]7[LIE]O;<7hv{_qkmwZoig|~T9=Q@BTDW52=bp}U{ec}PiomvpZ36WFH^JY?8;dzw[uoi{VcecxzP53]LFP@S9>1ntyQioq\mkir|V?8SBLZFU34?`~sWyceRgaotv\11YHJ\L_=:5jxu]smkuXage~xR;:_N@VBQ703lrS}gas^kmkprX=?UDNXH[169f|qYwagyTecazt^74[JDRN];<7hv{_qkmwZoig|~T95Q@BTDW52=bp}U{ec}PiomvpZ3>WFH^JY?9;dzw[uoi{VcecxzP5^KLFP@6?2osxR~fnr]jjjssW?:TCO[IT058a}rXx`dxSd``uu]55ZIE]O^:;6kwt^rjjvYnffS;7:g{pZvnfzUbbb{{_76\KGSA\8=0iuzPphlp[lhh}}U=9RAMUGV23>c|Vzbb~Qfnnww[30XGK_MX<94eyv\tlhtW`ddyyQ97^MAQCR6?2osxR~fnr]jjjssW?2TCO[IT058a}rXx`dxSd``uu]5=ZIE]O^::6kwt^rjjvYnffS;QFOCWE52=bp}U{ec}PiomvpZ17WFH^JY?8;dzw[uoi{VcecxzP70]LFP@S9>1ntyQioq\mkir|V=9SBLZFU34?`~sWyceRgaotv\36YHJ\L_=:5jxu]smkuXage~xR9;_N@VBQ703lrS}gas^kmkprX?7:g{pZvnfzUbbb{{_91\KGSA\8=0iuzPphlp[lhh}}U38RAMUGV23>c|Vzbb~Qfnnww[=3XGK_MX<94eyv\tlhtW`ddyyQ76^MAQCR6?2osxR~fnr]jjjssW1=TCO[IT058a}rXx`dxSd``uu];1ntyQioq\mkir|V3:SBLZFU34?`~sWyceRgaotv\=7YHJ\L_=:5jxu]smkuXage~xR7<_N@VBQ703lrS}gas^kmkprX1=UDNXH[169f|qYwagyTecazt^;6[JDRN];<7hv{_qkmwZoig|~T5;Q@BTDW52=bp}U{ec}PiomvpZ?0WFH^JY?8;dzw[uoi{VcecxzP99]LFP@S9>1ntyQioq\mkir|V32SBLZFU35?`~sWyceRgaotv\=ZOHJ\Lm7hv{_qkmwZir|5:5=>5jxu]smkuXg|~7==>50?32?`~sWyceRazt=334;773lrS}gas^mvp97768:0iuzPphlp[jss48;5==5jxu]smkuXg|~7=?0>0:g{pZvnfzUdyy2>3?33?`~sWyceRazt=37:46028a}rXx`dxSb{{<0;=b>c|Vzbb~Q`uu>2:463??;dzw[uoi{Ve~x1<<>028a}rXx`dxSb{{<36=55=bp}U{ec}Potv?608682osxR~fnr]lqq:5>7;;7hv{_qkmwZir|58<2<>4eyv\tlhtWf0?61119f|qYwagyTcxz3284eyv\tlhtWf0>=1119f|qYwagyTcxz335<24>c|Vzbb~Q`uu>01;773lrS}gas^mvp95168:0iuzPphlp[jss4:=5==5jxu]smkuXg|~7?50>0:g{pZvnfzUdyy2<9?d8a}rXx`dxSb{{<2<24>c|Vzbb~Q`uu>74;773lrS}gas^mvp92668:0iuzPphlp[jss4=85==5jxu]smkuXg|~78>0>0:g{pZvnfzUdyy2;4?33?`~sWyceRazt=66:464:<6kwt^rjjvYh}}6?43??;dzw[uoi{Ve~x1:6>g9f|qYwagyTcxz34?33?`~sWyceRazt=73:46?3??;dzw[uoi{Ve~x1;;>028a}rXx`dxSb{{<47=55=bp}U{ec}Potv?138682osxR~fnr]lqq:2?7;;7hv{_qkmwZir|5?32<>4eyv\tlhtWf0871f:g{pZvnfzUdyy2:>028a}rXx`dxSb{{<72=55=bp}U{ec}Potv?248682osxR~fnr]lqq:1:7;;7hv{_qkmwZir|5<82<>4eyv\tlhtWf0;:1119f|qYwagyTcxz364<24>c|Vzbb~Q`uu>52;773lrS}gas^mvp90068:0iuzPphlp[jss4?25==5jxu]smkuXg|~7:40i;dzw[uoi{Ve~x181119f|qYwagyTcxz371<24>c|Vzbb~Q`uu>45;773lrS}gas^mvp91568:0iuzPphlp[jss4>95==5jxu]smkuXg|~7;90>0:g{pZvnfzUdyy285?33?`~sWyceRazt=55:460:g{pZvnfzUdyy270?33?`~sWyceRazt=:2:46028a}rXx`dxSb{{<94=55=bp}U{ec}Potv?<28682osxR~fnr]lqq:?07;;7hv{_qkmwZir|5222k5jxu]smkuXg|~743??;dzw[uoi{Ve~x17?>028a}rXx`dxSb{{<83=55=bp}U{ec}Potv?=78682osxR~fnr]lqq:>;7;;7hv{_qkmwZir|53?2<>4eyv\tlhtWf04;1119f|qYwagyTcxz397<24>c|Vzbb~Q`uu>:3;773lrS}gas^mvp9??68:0iuzPphlp[jss4035j6kwt^rjjvYh}}622<:4eyv\tlhtWfS<7POCWE51=bp}U{ec}Potv\65YHJ\L:86kwt^rjjvYh}}U9=RAMUG37?`~sWyceRazt^73[JDRN8>0iuzPphlp[jssW<;TCO[I159f|qYwagyTcxzP53]LFP@6<2osxR~fnr]lqqY2;VEIYK?;;dzw[uoi{Ve~xR;;_N@VB42c|Vzbb~Q`uu]63ZIE]O;?7hv{_qkmwZir|V?3SBLZF068a}rXx`dxSb{{_4;\KGSA9=1ntyQioq\kprX>9UDNXH>4:g{pZvnfzUdyyQ91^MAQC733lrS}gas^mvpZ05WFH^J<:4eyv\tlhtWfS;=POCWE51=bp}U{ec}Potv\21YHJ\L:86kwt^rjjvYh}}U=9RAMUG37?`~sWyceRazt^45[JDRN8>0iuzPphlp[jssW?=TCO[I159f|qYwagyTcxzP69]LFP@6<2osxR~fnr]lqqY11VEIYK?;;dzw[uoi{Ve~xR9?_N@VB`=`x`eTnx}Pio>3:463??;frjkZdr{Vce0<><>028cuohWkxSd`3116=55=`x`eTnx}Pio>2408682m{ebQmur]jj977>7;;7j~fo^`vwZoi48:<2<>4gqkl[gstW`d7==61119dtliXj|yTec2>082558682m{ebQmur]jj97697;;7j~fo^`vwZoi48;92<>4gqkl[gstW`d7=<=1119dtliXj|yTec2>15<24>awafUiy~Qfn=321;773nzbcRlzs^km847168:0k}g`_cwp[lh;98=5==5hphm\fpuXag6:=50>0:esmjYe}zUbb1?>9?d8cuohWkxSd`310<24>awafUiy~Qfn=314;773nzbcRlzs^km844668:0k}g`_cwp[lh;9;85==5hphm\fpuXag6:>>0>0:esmjYe}zUbb1?=4?33?bvngVh~Rga<006:464:<6iin]aqvYnf5;943??;frjkZdr{Vce0<<6>g9dtliXj|yTec2>2?33?bvngVh~Rga<013:46028cuohWkxSd`3127=55=`x`eTnx}Pio>2738682m{ebQmur]jj974?7;;7j~fo^`vwZoi48932<>4gqkl[gstW`d7=>71f:esmjYe}zUbb1?<>028cuohWkxSd`3152=55=`x`eTnx}Pio>2048682m{ebQmur]jj973:7;;7j~fo^`vwZoi48>82<>4gqkl[gstW`d7=9:1119dtliXj|yTec2>44<24>awafUiy~Qfn=372;773nzbcRlzs^km842068:0k}g`_cwp[lh;9=25==5hphm\fpuXag6:840i;frjkZdr{Vce0<:1119dtliXj|yTec2>51<24>awafUiy~Qfn=365;773nzbcRlzs^km843568:0k}g`_cwp[lh;9<95==5hphm\fpuXag6:990>0:esmjYe}zUbb1?:5?33?bvngVh~Rga<075:4653h4gqkl[gstW`d7=80>0:esmjYe}zUbb1?90?33?bvngVh~Rga<042:46:4:<6iin]aqvYnf5;=83??;frjkZdr{Vce0<8:>028cuohWkxSd`3174=55=`x`eTnx}Pio>2228682m{ebQmur]jj97107;;7j~fo^`vwZoi48<22k5hphm\fpuXag6::3??;frjkZdr{Vce0<9?>028cuohWkxSd`3163=55=`x`eTnx}Pio>2378682m{ebQmur]jj970;7;;7j~fo^`vwZoi48=?2<>4gqkl[gstW`d7=:;1119dtliXj|yTec2>77<24>awafUiy~Qfn=343;773nzbcRlzs^km841?68:0k}g`_cwp[lh;9>35j6iin]aqvYnf5;<2<>4gqkl[gstW`d7=5>1119dtliXj|yTec2>80<24>awafUiy~Qfn=3;6;773nzbcRlzs^km84>468:0k}g`_cwp[lh;91>5==5hphm\fpuXag6:480>0:esmjYe}zUbb1?76?33?bvngVh~Rga<0:4:469991l|daPbtq\mk:6004m7j~fo^`vwZoi4825==5hphm\fpuXag6:5=0>0:esmjYe}zUbb1?61?33?bvngVh~Rga<0;1:46028cuohWkxSd`3185=55=`x`eTnx}Pio>2==8682m{ebQmur]jj97>17l0k}g`_cwp[lh;904n7j~fo^`vwZoi484:>6iin]aqvYnf58;<7>1119dtliXj|yTec2=01awafUiy~Qfn=02:c=`x`eTnx}Pio>16;`7l0k}g`_cwp[lh;:>4m7j~fo^`vwZoi4;25j6iin]aqvYnf5822h5hphm\fpuXag692k5hphm\fpuXag68<3h4gqkl[gstW`d7?<0i;frjkZdr{Vce0><1f:esmjYe}zUbb1=<>g9dtliXj|yTec2<4?d8cuohWkxSd`334awafUiy~Qfn=14:c=`x`eTnx}Pio>0<;`5j6iin]aqvYnf5>>2k5hphm\fpuXag6?:3h4gqkl[gstW`d78:0i;frjkZdr{Vce0961f:esmjYe}zUbb1:6>d9dtliXj|yTec2;>g9dtliXj|yTec2:0?d8cuohWkxSd`350awafUiy~Qfn=70:c=`x`eTnx}Pio>60;`3h4gqkl[gstW`d7:>0i;frjkZdr{Vce0;:1f:esmjYe}zUbb18:>g9dtliXj|yTec296?d8cuohWkxSd`366awafUiy~Qfn=4::`=`x`eTnx}Pio>5:c=`x`eTnx}Pio>44;`<5j6iin]aqvYnf5=<2k5hphm\fpuXag6<43h4gqkl[gstW`d7;40j;frjkZdr{Vce0:0i;frjkZdr{Vce05>1f:esmjYe}zUbb16>>g9dtliXj|yTec272?d8cuohWkxSd`382awafUiy~Qfn=:6:c=`x`eTnx}Pio>;2;`9n2m{ebQmur]jj9>>6l1l|daPbtq\mk:?6o1l|daPbtq\mk:>87l0k}g`_cwp[lh;184m7j~fo^`vwZoi4085j6iin]aqvYnf5382k5hphm\fpuXag6283h4gqkl[gstW`d7580i;frjkZdr{Vce0481f:esmjYe}zUbb178>g9dtliXj|yTec268?d8cuohWkxSd`3989981l|daPbtq\kpr;9935==5hphm\fpuXg|~7==0>1:esmjYe}zUdyy2>11<25>awafUiy~Q`uu>2548692m{ebQmur]lqq:69;4:=6iin]aqvYh}}6:=>0>1:esmjYe}zUdyy2>15<25>awafUiy~Q`uu>2508692m{ebQmur]lqq:69?4:=6iin]aqvYh}}6:=:0>1:esmjYe}zUdyy2>19<25>awafUiy~Q`uu>25<8682m{ebQmur]lqq:697;:7j~fo^`vwZir|5;9<3?>;frjkZdr{Ve~x1?=1?32?bvngVh~Razt=316;763nzbcRlzs^mvp975;7;:7j~fo^`vwZir|5;983?>;frjkZdr{Ve~x1?=5?32?bvngVh~Razt=312;763nzbcRlzs^mvp975?7;:7j~fo^`vwZir|5;943?>;frjkZdr{Ve~x1?=9?33?bvngVh~Razt=31:47038cuohWkxSb{{<010:472038cuohWkxSb{{<014:474gqkl[gstWf0<=1109dtliXj|yTcxz3152=54=`x`eTnx}Potv?5179981l|daPbtq\kpr;9=85=<5hphm\fpuXg|~7=9=1109dtliXj|yTcxz3156=54=`x`eTnx}Potv?5139981l|daPbtq\kpr;9=<5=<5hphm\fpuXg|~7=991109dtliXj|yTcxz315:=54=`x`eTnx}Potv?51?9991l|daPbtq\kpr;9=4:=6iin]aqvYh}}6:9=0>1:esmjYe}zUdyy2>50<25>awafUiy~Q`uu>2178692m{ebQmur]lqq:6=:4:=6iin]aqvYh}}6:990>1:esmjYe}zUdyy2>54<25>awafUiy~Q`uu>2138692m{ebQmur]lqq:6=>4:=6iin]aqvYh}}6:950>1:esmjYe}zUdyy2>58<24>awafUiy~Q`uu>21;763nzbcRlzs^mvp97187;:7j~fo^`vwZir|5;==3?>;frjkZdr{Ve~x1?92?32?bvngVh~Razt=357;763nzbcRlzs^mvp971<7;:7j~fo^`vwZir|5;=93?>;frjkZdr{Ve~x1?96?32?bvngVh~Razt=353;763nzbcRlzs^mvp97107;:7j~fo^`vwZir|5;=53??;frjkZdr{Ve~x1?9>038cuohWkxSb{{<053:47038cuohWkxSb{{<057:47038cuohWkxSb{{<05;:4768:0k}g`_cwp[jss48=5=<5hphm\fpuXg|~7=5>1109dtliXj|yTcxz3193=54=`x`eTnx}Potv?5=49981l|daPbtq\kpr;9195=<5hphm\fpuXg|~7=5:1109dtliXj|yTcxz3197=54=`x`eTnx}Potv?5=09981l|daPbtq\kpr;91=5=<5hphm\fpuXg|~7=561109dtliXj|yTcxz319;=55=`x`eTnx}Potv?5=8692m{ebQmur]lqq:6194:=6iin]aqvYh}}6:5<0>1:esmjYe}zUdyy2>93<25>awafUiy~Q`uu>2=68692m{ebQmur]lqq:61=4:=6iin]aqvYh}}6:580>1:esmjYe}zUdyy2>97<25>awafUiy~Q`uu>2=28692m{ebQmur]lqq:6114:=6iin]aqvYh}}6:540>0:esmjYe}zUdyy2>9?d8cuohWkxSb{{<0<27>awafUiy~Q`uu>145<768;0k}g`_cwp[jss4;:;2<>4gqkl[gstWf0?>1119dtliXj|yTcxz320<24>awafUiy~Q`uu>16;773nzbcRlzs^mvp94468:0k}g`_cwp[jss4;>5==5hphm\fpuXg|~7>80>0:esmjYe}zUdyy2=6?33?bvngVh~Razt=04:469991l|daPbtq\kpr;:04m7j~fo^`vwZir|585==5hphm\fpuXg|~7?=0>0:esmjYe}zUdyy2<1?33?bvngVh~Razt=11:46028cuohWkxSb{{<25=55=`x`eTnx}Potv?7=8682m{ebQmur]lqq:417l0k}g`_cwp[jss4:4:<6iin]aqvYh}}6?<3??;frjkZdr{Ve~x1:>>028cuohWkxSb{{<50=55=`x`eTnx}Potv?068682m{ebQmur]lqq:3<7;;7j~fo^`vwZir|5>>2<>4gqkl[gstWf0981119dtliXj|yTcxz346<24>awafUiy~Q`uu>7<;773nzbcRlzs^mvp92>6o1l|daPbtq\kpr;<7;;7j~fo^`vwZir|5?;2<>4gqkl[gstWf08?1119dtliXj|yTcxz353<24>awafUiy~Q`uu>67;773nzbcRlzs^mvp93368:0k}g`_cwp[jss40:esmjYe}zUdyy2:7?33?bvngVh~Razt=7;:460:esmjYe}zUdyy292?33?bvngVh~Razt=40:46<4:<6iin]aqvYh}}6=:3??;frjkZdr{Ve~x188>028cuohWkxSb{{<7:=55=`x`eTnx}Potv?2<8a3nzbcRlzs^mvp909991l|daPbtq\kpr;?94:<6iin]aqvYh}}6<=3??;frjkZdr{Ve~x19=>028cuohWkxSb{{<61=55=`x`eTnx}Potv?318682m{ebQmur]lqq:0=7;;7j~fo^`vwZir|5==2<>4gqkl[gstWf0:91119dtliXj|yTcxz379<24>awafUiy~Q`uu>4=;`4gqkl[gstWf05<1119dtliXj|yTcxz382<24>awafUiy~Q`uu>;0;773nzbcRlzs^mvp9>268:0k}g`_cwp[jss41<5==5hphm\fpuXg|~74:0>0:esmjYe}zUdyy278?33?bvngVh~Razt=:::c=`x`eTnx}Potv?<;773nzbcRlzs^mvp9?768:0k}g`_cwp[jss40;5==5hphm\fpuXg|~75?0>0:esmjYe}zUdyy263?33?bvngVh~Razt=;7:46028cuohWkxSb{{<8;=b>awafUiy~Q`uu>::45uuidUhxb7d:qqehYpjVkhgRa>0:qqehYpjVko~Rg30?32?vtfeV}iSlj}_h>24;763zxjaRym_`fq[l:697;:7~|nm^ua[dbuW`6:>3?>;rpbiZqeWhnySd2>3?32?vtfeV}iSlj}_h>20;763zxjaRym_`fq[l:6=7;:7~|nm^ua[dbuW`6::3?>;rpbiZqeWhnySd2>7?32?vtfeV}iSlj}_h>2<;763zxjaRym_`fq[l:617;;7~|nm^ua[dbuW`6:2038wwgjW~hTmi|Pi=02:47<{{kfSzlPaep\m94568;0ob_v`\eatXa5882038wwgjW~hTmi|Pi=06:47<{{kfSzlPaep\m9416890ob_v`\eatXa58<6=0>1:qqehYpjVko~Rg326<24>uuidU|nRokr^k?6;773zxjaRym_`fq[l:468:0ob_v`\eatXa5>5==5|r`o\sgYfl{Ub080>0:qqehYpjVko~Rg36?33?vtfeV}iSlj}_h>4:46<{{kfSzlPaep\m9>9991x~lcPwc]b`wYn404o7~|nm^ua[fjlW`n0ob_v`\g|eXa8:0ob_v`\`drXa5:5=<5|r`o\sgYci}Ub0<>1109pvdkXkUomyQf<03=54=tzhgT{oQkau]j8449981x~lcPwc]geqYn4895=<5|r`o\sgYci}Ub0<:1109pvdkXkUomyQf<07=54=tzhgT{oQkau]j8409981x~lcPwc]geqYn48=5=<5|r`o\sgYci}Ub0<61109pvdkXkUomyQf<0;=55=tzhgT{oQkau]j848692yym`Qxb^fbpZo;:94:=6}}al]tfZbf|Vc7><0>1:qqehYpjVnjxRg323<25>uuidU|nRjnt^k?668692yym`Qxb^fbpZo;:=4:=6}}al]tfZbf|Vc7>80>1:qqehYpjVnjxRg327<25>uuidU|nRjnt^k?628692yym`Qxb^fbpZo;:14:=6}}al]tfZbf|Vc7>40>0:qqehYpjVnjxRg32?32?vtfeV}iSio{_h>04;743zxjaRym_ecw[l:493:5=<5|r`o\sgYci}Ub0>?1119pvdkXkUomyQf<2<24>uuidU|nRjnt^k?0;773zxjaRym_ecw[l:268:0ob_v`\`drXa5<5==5|r`o\sgYci}Ub0:0>0:qqehYpjVnjxRg38?33?vtfeV}iSio{_h>::46<{{kfSzlPd`v\k969981x~lcPwc]geqYh48:5=<5|r`o\sgYci}Ud05=<5|r`o\sgYci}Ud0<;1109pvdkXkUomyQ`<04=54=tzhgT{oQkau]l8419981x~lcPwc]geqYh4825=<5|r`o\sgYci}Ud0<71119pvdkXkUomyQ`<0<25>uuidU|nRjnt^m?658692yym`Qxb^fbpZi;:84:=6}}al]tfZbf|Ve7>?0>1:qqehYpjVnjxRa322<25>uuidU|nRjnt^m?618692yym`Qxb^fbpZi;:<4:=6}}al]tfZbf|Ve7>;0>1:qqehYpjVnjxRa326<25>uuidU|nRjnt^m?6=8692yym`Qxb^fbpZi;:04:<6}}al]tfZbf|Ve7>3?>;rpbiZqeWmkSb2<0?30?vtfeV}iSio{_n>05?69981x~lcPwc]geqYh4:;5==5|r`o\sgYci}Ud0>0>0:qqehYpjVnjxRa34?33?vtfeV}iSio{_n>6:46<{{kfSzlPd`v\k909991x~lcPwc]geqYh4>4:<6}}al]tfZbf|Ve743??;rpbiZqeWmkSb26>e9pvdkXkUyyQf119pvdkXkUxiaQf<1<24>uuidU|nR}jl^k?5;773zxjaRym_rgo[l:56880ob_v`\w`jXa591<3??;rpbiZqeWzogSd2<>g9pvdkXkUxxlbc_nf8wwgjW~hTylPib9pvdkXkU|iRg:;rvbp`733z~jxhcncikma+eX{}ki?j4u`pw[lht|&lbjbQfnrvbjfc(E{kfS`kbos{\mkurdh~n0^km8586i2}bel`nd]phjrX99Ubb1??0;2=5==pazbicckPsmmw[46Xag6:<=0>7:ujwmdhflUx`bzP11]jj97768=0{d}gbnlf[vjh|V;;Sd`310<23>qn{ahdbhQ|lnv\55Ynf5;92<94whqkfjhbWzfdxR??_hl?5686?2}bel`nd]phjrX99Ubb1?;>058sluojfdnS~b`t^33[lh;9<4:;6yfsi`lj`Ytdf~T==Qfn=35:41<`ycnb`j_rnlpZ77W`d7=:0>7:ujwmdhflUx`bzP11]jj97?68=0{d}gbnlf[vjh|V;;Sd`318<22>qn{ahdbhQ|lnv\55Ynf5;5=:5xirjakkcX{eeS<>Pio>14;703~cxdoaae^qokqY68Vce0??1169tmvneggoTaa{_02\mk:5:7;<7zg|hcmmaZukg}U:0^km87399>1|e~fmoog\wiisW8:Tec2=6?34?rot`keeiR}cou]24Zoi4;=5=:5xirjakkcX{eeS<>Pio>1<;703~cxdoaae^qokqY68Vce0?71179tmvneggoTaa{_02\mk:568=0{d}gbnlf[vjh|V;;Sd`331<23>qn{ahdbhQ|lnv\55Ynf59:2<94whqkfjhbWzfdxR??_hl?7786?2}bel`nd]phjrX99Ubb1=<>058sluojfdnS~b`t^33[lh;;=4:;6yfsi`lj`Ytdf~T==Qfn=16:41<`ycnb`j_rnlpZ77W`d7?;0>7:ujwmdhflUx`bzP11]jj95068=0{d}gbnlf[vjh|V;;Sd`339<23>qn{ahdbhQ|lnv\55Ynf5922<84whqkfjhbWzfdxR??_hl?7;703~cxdoaae^qokqY68Vce09>1169tmvneggoTaa{_02\mk:397;<7zg|hcmmaZukg}U:0^km81299>1|e~fmoog\wiisW8:Tec2;5?34?rot`keeiR}cou]24Zoi4=<5=:5xirjakkcX{eeS<>Pio>73;703~cxdoaae^qokqY68Vce0961169tmvneggoTaa{_02\mk:317;=7zg|hcmmaZukg}U:qn{ahdbhQ|lnv\55Ynf5?;2<94whqkfjhbWzfdxR??_hl?1486?2}bel`nd]phjrX99Ubb1;=>058sluojfdnS~b`t^33[lh;=:4:;6yfsi`lj`Ytdf~T==Qfn=77:41<`ycnb`j_rnlpZ77W`d7980>7:ujwmdhflUx`bzP11]jj93168=0{d}gbnlf[vjh|V;;Sd`356<23>qn{ahdbhQ|lnv\55Ynf5?32<94whqkfjhbWzfdxR??_hl?1<86>2}bel`nd]phjrX99Ubb1;1169tmvneggoTaa{_02\mk:187;<7zg|hcmmaZukg}U:3?8;vkplgiimVygcyQ>0^km83599>1|e~fmoog\wiisW8:Tec294?34?rot`keeiR}cou]24Zoi4??5=:5xirjakkcX{eeS<>Pio>52;703~cxdoaae^qokqY68Vce0;91169tmvneggoTaa{_02\mk:107;<7zg|hcmmaZukg}U:>058sluojfdnS~b`t^33[lh;?;4:;6yfsi`lj`Ytdf~T==Qfn=50:41<`ycnb`j_rnlpZ77W`d7;90>7:ujwmdhflUx`bzP11]jj91268=0{d}gbnlf[vjh|V;;Sd`377<23>qn{ahdbhQ|lnv\55Ynf5=<2<94whqkfjhbWzfdxR??_hl?3=86?2}bel`nd]phjrX99Ubb196>048sluojfdnS~b`t^33[lh;?7;<7zg|hcmmaZukg}U:0^km8=499>1|e~fmoog\wiisW8:Tec273?34?rot`keeiR}cou]24Zoi41>5=:5xirjakkcX{eeS<>Pio>;1;703~cxdoaae^qokqY68Vce0581169tmvneggoTaa{_02\mk:??7;<7zg|hcmmaZukg}U:0^km8=86?2}bel`nd]phjrX99Ubb17?>058sluojfdnS~b`t^33[lh;184:;6yfsi`lj`Ytdf~T==Qfn=;1:41<`ycnb`j_rnlpZ77W`d75>0>7:ujwmdhflUx`bzP11]jj9?368=0{d}gbnlf[vjh|V;;Sd`394<23>qn{ahdbhQ|lnv\55Ynf53=2<94whqkfjhbWzfdxR??_hl?=286?2}bel`nd]phjrX99Ubb177>058sluojfdnS~b`t^33[lh;104::6yfsi`lj`Ytdf~T==Qfn=;=52=pazbicckPsmmw[46Xg|~7<3?m;vkplgiimVygcyQ>0^mvp97783:5=45xirjakkcX{eeS<>Potv?5569911|e~fmoog\wiisW8:Tcxz311<2<>qn{ahdbhQ|lnv\55Yh}}6:=3?7;vkplgiimVygcyQ>0^mvp9756820{d}gbnlf[vjh|V;;Sb{{<01=5==pazbicckPsmmw[46Xg|~7=90>8:ujwmdhflUx`bzP11]lqq:6=7;37zg|hcmmaZukg}U:<`ycnb`j_rnlpZ77Wf0<91199tmvneggoTaa{_02\kpr;914:46yfsi`lj`Ytdf~T==Q`uu>2=;703~cxdoaae^qokqY68Ve~x1?1199tmvneggoTaa{_02\kpr;:94:46yfsi`lj`Ytdf~T==Q`uu>15;7?3~cxdoaae^qokqY68Ve~x1<=>0:8sluojfdnS~b`t^33[jss4;95=55xirjakkcX{eeS<>Potv?618602}bel`nd]phjrX99Udyy2=5?3;?rot`keeiR}cou]24Zir|58=2<64whqkfjhbWzfdxR??_nww8719911|e~fmoog\wiisW8:Tcxz329<2<>qn{ahdbhQ|lnv\55Yh}}6953?8;vkplgiimVygcyQ>0^mvp949911|e~fmoog\wiisW8:Tcxz331<2<>qn{ahdbhQ|lnv\55Yh}}68=3?7;vkplgiimVygcyQ>0^mvp9556820{d}gbnlf[vjh|V;;Sb{{<21=5==pazbicckPsmmw[46Xg|~7?90>8:ujwmdhflUx`bzP11]lqq:4=7;37zg|hcmmaZukg}U:<`ycnb`j_rnlpZ77Wf0>91199tmvneggoTaa{_02\kpr;;14:46yfsi`lj`Ytdf~T==Q`uu>0=;703~cxdoaae^qokqY68Ve~x1=1199tmvneggoTaa{_02\kpr;<94:46yfsi`lj`Ytdf~T==Q`uu>75;7?3~cxdoaae^qokqY68Ve~x1:=>0:8sluojfdnS~b`t^33[jss4=95=55xirjakkcX{eeS<>Potv?018602}bel`nd]phjrX99Udyy2;5?3;?rot`keeiR}cou]24Zir|5>=2<64whqkfjhbWzfdxR??_nww8119911|e~fmoog\wiisW8:Tcxz349<2<>qn{ahdbhQ|lnv\55Yh}}6?53?8;vkplgiimVygcyQ>0^mvp929911|e~fmoog\wiisW8:Tcxz351<2<>qn{ahdbhQ|lnv\55Yh}}6>=3?7;vkplgiimVygcyQ>0^mvp9356820{d}gbnlf[vjh|V;;Sb{{<41=5==pazbicckPsmmw[46Xg|~7990>8:ujwmdhflUx`bzP11]lqq:2=7;37zg|hcmmaZukg}U:<`ycnb`j_rnlpZ77Wf0891199tmvneggoTaa{_02\kpr;=14:46yfsi`lj`Ytdf~T==Q`uu>6=;703~cxdoaae^qokqY68Ve~x1;1199tmvneggoTaa{_02\kpr;>94:46yfsi`lj`Ytdf~T==Q`uu>55;7?3~cxdoaae^qokqY68Ve~x18=>0:8sluojfdnS~b`t^33[jss4?95=55xirjakkcX{eeS<>Potv?218602}bel`nd]phjrX99Udyy295?3;?rot`keeiR}cou]24Zir|5<=2<64whqkfjhbWzfdxR??_nww8319911|e~fmoog\wiisW8:Tcxz369<2<>qn{ahdbhQ|lnv\55Yh}}6=53?8;vkplgiimVygcyQ>0^mvp909911|e~fmoog\wiisW8:Tcxz371<2<>qn{ahdbhQ|lnv\55Yh}}6<=3?7;vkplgiimVygcyQ>0^mvp9156820{d}gbnlf[vjh|V;;Sb{{<61=5==pazbicckPsmmw[46Xg|~7;90>8:ujwmdhflUx`bzP11]lqq:0=7;37zg|hcmmaZukg}U:<`ycnb`j_rnlpZ77Wf0:91199tmvneggoTaa{_02\kpr;?14:46yfsi`lj`Ytdf~T==Q`uu>4=;703~cxdoaae^qokqY68Ve~x191199tmvneggoTaa{_02\kpr;094:46yfsi`lj`Ytdf~T==Q`uu>;5;7?3~cxdoaae^qokqY68Ve~x16=>0:8sluojfdnS~b`t^33[jss4195=55xirjakkcX{eeS<>Potv?<18602}bel`nd]phjrX99Udyy275?3;?rot`keeiR}cou]24Zir|52=2<64whqkfjhbWzfdxR??_nww8=19911|e~fmoog\wiisW8:Tcxz389<2<>qn{ahdbhQ|lnv\55Yh}}6353?8;vkplgiimVygcyQ>0^mvp9>9911|e~fmoog\wiisW8:Tcxz391<2<>qn{ahdbhQ|lnv\55Yh}}62=3?7;vkplgiimVygcyQ>0^mvp9?56820{d}gbnlf[vjh|V;;Sb{{<81=5==pazbicckPsmmw[46Xg|~7590>8:ujwmdhflUx`bzP11]lqq:>=7;37zg|hcmmaZukg}U:<`ycnb`j_rnlpZ77Wf0491199tmvneggoTaa{_02\kpr;114:46yfsi`lj`Ytdf~T==Q`uu>:=;703~cxdoaae^qokqY68Ve~x171179tmvneggoTaa{_03\mk:768k0{d}gbnlf[vjh|V;:Sd`311294;7?3~cxdoaae^qokqY69Vce0<>?>058sluojfdnS~b`t^32[lh;994:;6yfsi`lj`Ytdf~T=7:ujwmdhflUx`bzP10]jj97468=0{d}gbnlf[vjh|V;:Sd`315<23>qn{ahdbhQ|lnv\54Ynf5;>2<94whqkfjhbWzfdxR?>_hl?5386?2}bel`nd]phjrX98Ubb1?8>058sluojfdnS~b`t^32[lh;914:;6yfsi`lj`Ytdf~T=1^km87699>1|e~fmoog\wiisW8;Tec2=1?34?rot`keeiR}cou]25Zoi4;85=:5xirjakkcX{eeS17;703~cxdoaae^qokqY69Vce0?:1169tmvneggoTaa{_03\mk:5=7;<7zg|hcmmaZukg}U:=Rga<34=52=pazbicckPsmmw[47Xag69;3?8;vkplgiimVygcyQ>1^km87>99>1|e~fmoog\wiisW8;Tec2=9?35?rot`keeiR}cou]25Zoi4;4:;6yfsi`lj`Ytdf~T=7:ujwmdhflUx`bzP10]jj95568=0{d}gbnlf[vjh|V;:Sd`332<23>qn{ahdbhQ|lnv\54Ynf59?2<94whqkfjhbWzfdxR?>_hl?7086?2}bel`nd]phjrX98Ubb1=9>058sluojfdnS~b`t^32[lh;;>4:;6yfsi`lj`Ytdf~T=6:ujwmdhflUx`bzP10]jj9599>1|e~fmoog\wiisW8;Tec2;0?34?rot`keeiR}cou]25Zoi4=;5=:5xirjakkcX{eeS76;703~cxdoaae^qokqY69Vce09=1169tmvneggoTaa{_03\mk:3<7;<7zg|hcmmaZukg}U:=Rga<57=52=pazbicckPsmmw[47Xag6?:3?8;vkplgiimVygcyQ>1^km81199>1|e~fmoog\wiisW8;Tec2;8?34?rot`keeiR}cou]25Zoi4=35=;5xirjakkcX{eeS7:41<`ycnb`j_rnlpZ76W`d79=0>7:ujwmdhflUx`bzP10]jj93668=0{d}gbnlf[vjh|V;:Sd`353<23>qn{ahdbhQ|lnv\54Ynf5?82<94whqkfjhbWzfdxR?>_hl?1186?2}bel`nd]phjrX98Ubb1;:>058sluojfdnS~b`t^32[lh;=?4:;6yfsi`lj`Ytdf~T=7:ujwmdhflUx`bzP10]jj93>68<0{d}gbnlf[vjh|V;:Sd`35?34?rot`keeiR}cou]25Zoi4?:5=:5xirjakkcX{eeS55;703~cxdoaae^qokqY69Vce0;<1169tmvneggoTaa{_03\mk:1;7;<7zg|hcmmaZukg}U:=Rga<76=52=pazbicckPsmmw[47Xag6=93?8;vkplgiimVygcyQ>1^km83099>1|e~fmoog\wiisW8;Tec297?34?rot`keeiR}cou]25Zoi4?25=:5xirjakkcX{eeS5=;713~cxdoaae^qokqY69Vce0;0>7:ujwmdhflUx`bzP10]jj91768=0{d}gbnlf[vjh|V;:Sd`370<23>qn{ahdbhQ|lnv\54Ynf5=92<94whqkfjhbWzfdxR?>_hl?3686?2}bel`nd]phjrX98Ubb19;>058sluojfdnS~b`t^32[lh;?<4:;6yfsi`lj`Ytdf~T=7:ujwmdhflUx`bzP10]jj91?68=0{d}gbnlf[vjh|V;:Sd`378<22>qn{ahdbhQ|lnv\54Ynf5=5=:5xirjakkcX{eeS;4;703~cxdoaae^qokqY69Vce05?1169tmvneggoTaa{_03\mk:?:7;<7zg|hcmmaZukg}U:=Rga<91=52=pazbicckPsmmw[47Xag6383?8;vkplgiimVygcyQ>1^km8=399>1|e~fmoog\wiisW8;Tec276?34?rot`keeiR}cou]25Zoi41=5=:5xirjakkcX{eeS;<;703~cxdoaae^qokqY69Vce0571179tmvneggoTaa{_03\mk:?68=0{d}gbnlf[vjh|V;:Sd`391<23>qn{ahdbhQ|lnv\54Ynf53:2<94whqkfjhbWzfdxR?>_hl?=786?2}bel`nd]phjrX98Ubb17<>058sluojfdnS~b`t^32[lh;1=4:;6yfsi`lj`Ytdf~T=7:ujwmdhflUx`bzP10]jj9?068=0{d}gbnlf[vjh|V;:Sd`399<23>qn{ahdbhQ|lnv\54Ynf5322<84whqkfjhbWzfdxR?>_hl?=;703~cxdoaae^qokqY69Ve~x1>11c9tmvneggoTaa{_03\kpr;99:1<3?6;vkplgiimVygcyQ>1^mvp97787;37zg|hcmmaZukg}U:=Razt=33:4><`ycnb`j_rnlpZ76Wf027;7?3~cxdoaae^qokqY69Ve~x1?;>0:8sluojfdnS~b`t^32[jss48?5=55xirjakkcX{eeS7?3;?rot`keeiR}cou]25Zir|5;32<64whqkfjhbWzfdxR?>_nww84?99>1|e~fmoog\wiisW8;Tcxz31?3;?rot`keeiR}cou]25Zir|58;2<64whqkfjhbWzfdxR?>_nww8779911|e~fmoog\wiisW8;Tcxz323<2<>qn{ahdbhQ|lnv\54Yh}}69?3?7;vkplgiimVygcyQ>1^mvp9436820{d}gbnlf[vjh|V;:Sb{{<37=5==pazbicckPsmmw[47Xg|~7>;0>8:ujwmdhflUx`bzP10]lqq:5?7;37zg|hcmmaZukg}U:=Razt=0;:4><`ycnb`j_rnlpZ76Wf0?71169tmvneggoTaa{_03\kpr;:7;37zg|hcmmaZukg}U:=Razt=13:4><`ycnb`j_rnlpZ76Wf0>?1199tmvneggoTaa{_03\kpr;;;4:46yfsi`lj`Ytdf~T=07;7?3~cxdoaae^qokqY69Ve~x1=;>0:8sluojfdnS~b`t^32[jss4:?5=55xirjakkcX{eeS_nww86?99>1|e~fmoog\wiisW8;Tcxz33?3;?rot`keeiR}cou]25Zir|5>;2<64whqkfjhbWzfdxR?>_nww8179911|e~fmoog\wiisW8;Tcxz343<2<>qn{ahdbhQ|lnv\54Yh}}6??3?7;vkplgiimVygcyQ>1^mvp9236820{d}gbnlf[vjh|V;:Sb{{<57=5==pazbicckPsmmw[47Xg|~78;0>8:ujwmdhflUx`bzP10]lqq:3?7;37zg|hcmmaZukg}U:=Razt=6;:4><`ycnb`j_rnlpZ76Wf0971169tmvneggoTaa{_03\kpr;<7;37zg|hcmmaZukg}U:=Razt=73:4><`ycnb`j_rnlpZ76Wf08?1199tmvneggoTaa{_03\kpr;=;4:46yfsi`lj`Ytdf~T=67;7?3~cxdoaae^qokqY69Ve~x1;;>0:8sluojfdnS~b`t^32[jss4_nww80?99>1|e~fmoog\wiisW8;Tcxz35?3;?rot`keeiR}cou]25Zir|5<;2<64whqkfjhbWzfdxR?>_nww8379911|e~fmoog\wiisW8;Tcxz363<2<>qn{ahdbhQ|lnv\54Yh}}6=?3?7;vkplgiimVygcyQ>1^mvp9036820{d}gbnlf[vjh|V;:Sb{{<77=5==pazbicckPsmmw[47Xg|~7:;0>8:ujwmdhflUx`bzP10]lqq:1?7;37zg|hcmmaZukg}U:=Razt=4;:4><`ycnb`j_rnlpZ76Wf0;71169tmvneggoTaa{_03\kpr;>7;37zg|hcmmaZukg}U:=Razt=53:4><`ycnb`j_rnlpZ76Wf0:?1199tmvneggoTaa{_03\kpr;?;4:46yfsi`lj`Ytdf~T=47;7?3~cxdoaae^qokqY69Ve~x19;>0:8sluojfdnS~b`t^32[jss4>?5=55xirjakkcX{eeS_nww82?99>1|e~fmoog\wiisW8;Tcxz37?3;?rot`keeiR}cou]25Zir|52;2<64whqkfjhbWzfdxR?>_nww8=79911|e~fmoog\wiisW8;Tcxz383<2<>qn{ahdbhQ|lnv\54Yh}}63?3?7;vkplgiimVygcyQ>1^mvp9>36820{d}gbnlf[vjh|V;:Sb{{<97=5==pazbicckPsmmw[47Xg|~74;0>8:ujwmdhflUx`bzP10]lqq:??7;37zg|hcmmaZukg}U:=Razt=:;:4><`ycnb`j_rnlpZ76Wf0571169tmvneggoTaa{_03\kpr;07;37zg|hcmmaZukg}U:=Razt=;3:4><`ycnb`j_rnlpZ76Wf04?1199tmvneggoTaa{_03\kpr;1;4:46yfsi`lj`Ytdf~T=:7;7?3~cxdoaae^qokqY69Ve~x17;>0:8sluojfdnS~b`t^32[jss40?5=55xirjakkcX{eeS_nww81|e~fmoog\wiisW8;Tcxz39?35?rot`keeiR}cou]26Zoi494:m6yfsi`lj`Ytdf~T=?Qfn=334?69911|e~fmoog\wiisW88Tec2>01<23>qn{ahdbhQ|lnv\57Ynf5;;2<94whqkfjhbWzfdxR?=_hl?5486?2}bel`nd]phjrX9;Ubb1?=>058sluojfdnS~b`t^31[lh;9:4:;6yfsi`lj`Ytdf~T=?Qfn=37:41<`ycnb`j_rnlpZ75W`d7=80>7:ujwmdhflUx`bzP13]jj97168=0{d}gbnlf[vjh|V;9Sd`316<23>qn{ahdbhQ|lnv\57Ynf5;32<94whqkfjhbWzfdxR?=_hl?5<86>2}bel`nd]phjrX9;Ubb1?1169tmvneggoTaa{_00\mk:587;<7zg|hcmmaZukg}U:>Rga<33=52=pazbicckPsmmw[44Xag69>3?8;vkplgiimVygcyQ>2^km87599>1|e~fmoog\wiisW88Tec2=4?34?rot`keeiR}cou]26Zoi4;?5=:5xirjakkcX{eeS<12;703~cxdoaae^qokqY6:Vce0?91169tmvneggoTaa{_00\mk:507;<7zg|hcmmaZukg}U:>Rga<3;=53=pazbicckPsmmw[44Xag692<94whqkfjhbWzfdxR?=_hl?7586?2}bel`nd]phjrX9;Ubb1=>>058sluojfdnS~b`t^31[lh;;;4:;6yfsi`lj`Ytdf~T=?Qfn=10:41<`ycnb`j_rnlpZ75W`d7?90>7:ujwmdhflUx`bzP13]jj95268=0{d}gbnlf[vjh|V;9Sd`337<23>qn{ahdbhQ|lnv\57Ynf59<2<94whqkfjhbWzfdxR?=_hl?7=86?2}bel`nd]phjrX9;Ubb1=6>048sluojfdnS~b`t^31[lh;;7;<7zg|hcmmaZukg}U:>Rga<52=52=pazbicckPsmmw[44Xag6?=3?8;vkplgiimVygcyQ>2^km81499>1|e~fmoog\wiisW88Tec2;3?34?rot`keeiR}cou]26Zoi4=>5=:5xirjakkcX{eeS<71;703~cxdoaae^qokqY6:Vce0981169tmvneggoTaa{_00\mk:3?7;<7zg|hcmmaZukg}U:>Rga<5:=52=pazbicckPsmmw[44Xag6?53?9;vkplgiimVygcyQ>2^km8186?2}bel`nd]phjrX9;Ubb1;?>058sluojfdnS~b`t^31[lh;=84:;6yfsi`lj`Ytdf~T=?Qfn=71:41<`ycnb`j_rnlpZ75W`d79>0>7:ujwmdhflUx`bzP13]jj93368=0{d}gbnlf[vjh|V;9Sd`354<23>qn{ahdbhQ|lnv\57Ynf5?=2<94whqkfjhbWzfdxR?=_hl?1286?2}bel`nd]phjrX9;Ubb1;7>058sluojfdnS~b`t^31[lh;=04::6yfsi`lj`Ytdf~T=?Qfn=7=52=pazbicckPsmmw[44Xag6=<3?8;vkplgiimVygcyQ>2^km83799>1|e~fmoog\wiisW88Tec292?34?rot`keeiR}cou]26Zoi4?95=:5xirjakkcX{eeS<50;703~cxdoaae^qokqY6:Vce0;;1169tmvneggoTaa{_00\mk:1>7;<7zg|hcmmaZukg}U:>Rga<75=52=pazbicckPsmmw[44Xag6=43?8;vkplgiimVygcyQ>2^km83?99?1|e~fmoog\wiisW88Tec29>058sluojfdnS~b`t^31[lh;?94:;6yfsi`lj`Ytdf~T=?Qfn=52:41<`ycnb`j_rnlpZ75W`d7;?0>7:ujwmdhflUx`bzP13]jj91468=0{d}gbnlf[vjh|V;9Sd`375<23>qn{ahdbhQ|lnv\57Ynf5=>2<94whqkfjhbWzfdxR?=_hl?3386?2}bel`nd]phjrX9;Ubb198>058sluojfdnS~b`t^31[lh;?14:;6yfsi`lj`Ytdf~T=?Qfn=5::40<`ycnb`j_rnlpZ75W`d7;3?8;vkplgiimVygcyQ>2^km8=699>1|e~fmoog\wiisW88Tec271?34?rot`keeiR}cou]26Zoi4185=:5xirjakkcX{eeS<;7;703~cxdoaae^qokqY6:Vce05:1169tmvneggoTaa{_00\mk:?=7;<7zg|hcmmaZukg}U:>Rga<94=52=pazbicckPsmmw[44Xag63;3?8;vkplgiimVygcyQ>2^km8=>99>1|e~fmoog\wiisW88Tec279?35?rot`keeiR}cou]26Zoi414:;6yfsi`lj`Ytdf~T=?Qfn=;3:41<`ycnb`j_rnlpZ75W`d75<0>7:ujwmdhflUx`bzP13]jj9?568=0{d}gbnlf[vjh|V;9Sd`392<23>qn{ahdbhQ|lnv\57Ynf53?2<94whqkfjhbWzfdxR?=_hl?=086?2}bel`nd]phjrX9;Ubb179>058sluojfdnS~b`t^31[lh;1>4:;6yfsi`lj`Ytdf~T=?Qfn=;;:41<`ycnb`j_rnlpZ75W`d7540>6:ujwmdhflUx`bzP13]jj9?99>1|e~fmoog\wiisW88Tcxz30?3a?rot`keeiR}cou]26Zir|5;;<7>1189tmvneggoTaa{_00\kpr;99:5=55xirjakkcX{eeS<1?3;?rot`keeiR}cou]26Zir|5;92<64whqkfjhbWzfdxR?=_nww8459911|e~fmoog\wiisW88Tcxz315<2<>qn{ahdbhQ|lnv\57Yh}}6:93?7;vkplgiimVygcyQ>2^mvp9716820{d}gbnlf[vjh|V;9Sb{{<05=5==pazbicckPsmmw[44Xg|~7=50>8:ujwmdhflUx`bzP13]lqq:617;<7zg|hcmmaZukg}U:>Razt=3=5==pazbicckPsmmw[44Xg|~7>=0>8:ujwmdhflUx`bzP13]lqq:597;37zg|hcmmaZukg}U:>Razt=01:4><`ycnb`j_rnlpZ75Wf0?=1199tmvneggoTaa{_00\kpr;:=4:46yfsi`lj`Ytdf~T=?Q`uu>11;7?3~cxdoaae^qokqY6:Ve~x1<9>0:8sluojfdnS~b`t^31[jss4;=5=55xirjakkcX{eeS<qn{ahdbhQ|lnv\57Yh}}6893?7;vkplgiimVygcyQ>2^mvp9516820{d}gbnlf[vjh|V;9Sb{{<25=5==pazbicckPsmmw[44Xg|~7?50>8:ujwmdhflUx`bzP13]lqq:417;<7zg|hcmmaZukg}U:>Razt=1=5==pazbicckPsmmw[44Xg|~78=0>8:ujwmdhflUx`bzP13]lqq:397;37zg|hcmmaZukg}U:>Razt=61:4><`ycnb`j_rnlpZ75Wf09=1199tmvneggoTaa{_00\kpr;<=4:46yfsi`lj`Ytdf~T=?Q`uu>71;7?3~cxdoaae^qokqY6:Ve~x1:9>0:8sluojfdnS~b`t^31[jss4==5=55xirjakkcX{eeS<5=55xirjakkcX{eeS<qn{ahdbhQ|lnv\57Yh}}6>93?7;vkplgiimVygcyQ>2^mvp9316820{d}gbnlf[vjh|V;9Sb{{<45=5==pazbicckPsmmw[44Xg|~7950>8:ujwmdhflUx`bzP13]lqq:217;<7zg|hcmmaZukg}U:>Razt=7=5==pazbicckPsmmw[44Xg|~7:=0>8:ujwmdhflUx`bzP13]lqq:197;37zg|hcmmaZukg}U:>Razt=41:4><`ycnb`j_rnlpZ75Wf0;=1199tmvneggoTaa{_00\kpr;>=4:46yfsi`lj`Ytdf~T=?Q`uu>51;7?3~cxdoaae^qokqY6:Ve~x189>0:8sluojfdnS~b`t^31[jss4?=5=55xirjakkcX{eeS<qn{ahdbhQ|lnv\57Yh}}6<93?7;vkplgiimVygcyQ>2^mvp9116820{d}gbnlf[vjh|V;9Sb{{<65=5==pazbicckPsmmw[44Xg|~7;50>8:ujwmdhflUx`bzP13]lqq:017;<7zg|hcmmaZukg}U:>Razt=5=5==pazbicckPsmmw[44Xg|~74=0>8:ujwmdhflUx`bzP13]lqq:?97;37zg|hcmmaZukg}U:>Razt=:1:4><`ycnb`j_rnlpZ75Wf05=1199tmvneggoTaa{_00\kpr;0=4:46yfsi`lj`Ytdf~T=?Q`uu>;1;7?3~cxdoaae^qokqY6:Ve~x169>0:8sluojfdnS~b`t^31[jss41=5=55xirjakkcX{eeS<qn{ahdbhQ|lnv\57Yh}}6293?7;vkplgiimVygcyQ>2^mvp9?16820{d}gbnlf[vjh|V;9Sb{{<85=5==pazbicckPsmmw[44Xg|~7550>8:ujwmdhflUx`bzP13]lqq:>17;<7zg|hcmmaZukg}U:>Razt=;=53=pazbicckPsmmw[45Xag6;27:ujwmdhflUx`bzP12]jj97668=0{d}gbnlf[vjh|V;8Sd`313<23>qn{ahdbhQ|lnv\56Ynf5;82<94whqkfjhbWzfdxR?<_hl?5186?2}bel`nd]phjrX9:Ubb1?:>058sluojfdnS~b`t^30[lh;9?4:;6yfsi`lj`Ytdf~T=>Qfn=34:41<`ycnb`j_rnlpZ74W`d7=50>7:ujwmdhflUx`bzP12]jj97>68<0{d}gbnlf[vjh|V;8Sd`31?34?rot`keeiR}cou]27Zoi4;:5=:5xirjakkcX{eeS<=Pio>15;703~cxdoaae^qokqY6;Vce0?<1169tmvneggoTaa{_01\mk:5;7;<7zg|hcmmaZukg}U:?Rga<36=52=pazbicckPsmmw[45Xag6993?8;vkplgiimVygcyQ>3^km87099>1|e~fmoog\wiisW89Tec2=7?34?rot`keeiR}cou]27Zoi4;25=:5xirjakkcX{eeS<=Pio>1=;713~cxdoaae^qokqY6;Vce0?0>7:ujwmdhflUx`bzP12]jj95768=0{d}gbnlf[vjh|V;8Sd`330<23>qn{ahdbhQ|lnv\56Ynf5992<94whqkfjhbWzfdxR?<_hl?7686?2}bel`nd]phjrX9:Ubb1=;>058sluojfdnS~b`t^30[lh;;<4:;6yfsi`lj`Ytdf~T=>Qfn=15:41<`ycnb`j_rnlpZ74W`d7?:0>7:ujwmdhflUx`bzP12]jj95?68=0{d}gbnlf[vjh|V;8Sd`338<22>qn{ahdbhQ|lnv\56Ynf595=:5xirjakkcX{eeS<=Pio>74;703~cxdoaae^qokqY6;Vce09?1169tmvneggoTaa{_01\mk:3:7;<7zg|hcmmaZukg}U:?Rga<51=52=pazbicckPsmmw[45Xag6?83?8;vkplgiimVygcyQ>3^km81399>1|e~fmoog\wiisW89Tec2;6?34?rot`keeiR}cou]27Zoi4==5=:5xirjakkcX{eeS<=Pio>7<;703~cxdoaae^qokqY6;Vce0971179tmvneggoTaa{_01\mk:368=0{d}gbnlf[vjh|V;8Sd`351<23>qn{ahdbhQ|lnv\56Ynf5?:2<94whqkfjhbWzfdxR?<_hl?1786?2}bel`nd]phjrX9:Ubb1;<>058sluojfdnS~b`t^30[lh;==4:;6yfsi`lj`Ytdf~T=>Qfn=76:41<`ycnb`j_rnlpZ74W`d79;0>7:ujwmdhflUx`bzP12]jj93068=0{d}gbnlf[vjh|V;8Sd`359<23>qn{ahdbhQ|lnv\56Ynf5?22<84whqkfjhbWzfdxR?<_hl?1;703~cxdoaae^qokqY6;Vce0;>1169tmvneggoTaa{_01\mk:197;<7zg|hcmmaZukg}U:?Rga<70=52=pazbicckPsmmw[45Xag6=?3?8;vkplgiimVygcyQ>3^km83299>1|e~fmoog\wiisW89Tec295?34?rot`keeiR}cou]27Zoi4?<5=:5xirjakkcX{eeS<=Pio>53;703~cxdoaae^qokqY6;Vce0;61169tmvneggoTaa{_01\mk:117;=7zg|hcmmaZukg}U:?Rga<7<23>qn{ahdbhQ|lnv\56Ynf5=;2<94whqkfjhbWzfdxR?<_hl?3486?2}bel`nd]phjrX9:Ubb19=>058sluojfdnS~b`t^30[lh;?:4:;6yfsi`lj`Ytdf~T=>Qfn=57:41<`ycnb`j_rnlpZ74W`d7;80>7:ujwmdhflUx`bzP12]jj91168=0{d}gbnlf[vjh|V;8Sd`376<23>qn{ahdbhQ|lnv\56Ynf5=32<94whqkfjhbWzfdxR?<_hl?3<86>2}bel`nd]phjrX9:Ubb191169tmvneggoTaa{_01\mk:?87;<7zg|hcmmaZukg}U:?Rga<93=52=pazbicckPsmmw[45Xag63>3?8;vkplgiimVygcyQ>3^km8=599>1|e~fmoog\wiisW89Tec274?34?rot`keeiR}cou]27Zoi41?5=:5xirjakkcX{eeS<=Pio>;2;703~cxdoaae^qokqY6;Vce0591169tmvneggoTaa{_01\mk:?07;<7zg|hcmmaZukg}U:?Rga<9;=53=pazbicckPsmmw[45Xag632<94whqkfjhbWzfdxR?<_hl?=586?2}bel`nd]phjrX9:Ubb17>>058sluojfdnS~b`t^30[lh;1;4:;6yfsi`lj`Ytdf~T=>Qfn=;0:41<`ycnb`j_rnlpZ74W`d7590>7:ujwmdhflUx`bzP12]jj9?268=0{d}gbnlf[vjh|V;8Sd`397<23>qn{ahdbhQ|lnv\56Ynf53<2<94whqkfjhbWzfdxR?<_hl?==86?2}bel`nd]phjrX9:Ubb176>048sluojfdnS~b`t^30[lh;17;<7zg|hcmmaZukg}U:?Razt=2=5g=pazbicckPsmmw[45Xg|~7==>50?3:?rot`keeiR}cou]27Zir|5;;<3?7;vkplgiimVygcyQ>3^mvp9776820{d}gbnlf[vjh|V;8Sb{{<03=5==pazbicckPsmmw[45Xg|~7=?0>8:ujwmdhflUx`bzP12]lqq:6;7;37zg|hcmmaZukg}U:?Razt=37:4><`ycnb`j_rnlpZ74Wf0<;1199tmvneggoTaa{_01\kpr;9?4:46yfsi`lj`Ytdf~T=>Q`uu>23;7?3~cxdoaae^qokqY6;Ve~x1?7>0:8sluojfdnS~b`t^30[jss4835=:5xirjakkcX{eeS<=Potv?5;7?3~cxdoaae^qokqY6;Ve~x10:8sluojfdnS~b`t^30[jss4;;5=55xirjakkcX{eeS<=Potv?678602}bel`nd]phjrX9:Udyy2=3?3;?rot`keeiR}cou]27Zir|58?2<64whqkfjhbWzfdxR?<_nww8739911|e~fmoog\wiisW89Tcxz327<2<>qn{ahdbhQ|lnv\56Yh}}69;3?7;vkplgiimVygcyQ>3^mvp94?6820{d}gbnlf[vjh|V;8Sb{{<3;=52=pazbicckPsmmw[45Xg|~7>3?7;vkplgiimVygcyQ>3^mvp9576820{d}gbnlf[vjh|V;8Sb{{<23=5==pazbicckPsmmw[45Xg|~7??0>8:ujwmdhflUx`bzP12]lqq:4;7;37zg|hcmmaZukg}U:?Razt=17:4><`ycnb`j_rnlpZ74Wf0>;1199tmvneggoTaa{_01\kpr;;?4:46yfsi`lj`Ytdf~T=>Q`uu>03;7?3~cxdoaae^qokqY6;Ve~x1=7>0:8sluojfdnS~b`t^30[jss4:35=:5xirjakkcX{eeS<=Potv?7;7?3~cxdoaae^qokqY6;Ve~x1:?>0:8sluojfdnS~b`t^30[jss4=;5=55xirjakkcX{eeS<=Potv?078602}bel`nd]phjrX9:Udyy2;3?3;?rot`keeiR}cou]27Zir|5>?2<64whqkfjhbWzfdxR?<_nww8139911|e~fmoog\wiisW89Tcxz347<2<>qn{ahdbhQ|lnv\56Yh}}6?;3?7;vkplgiimVygcyQ>3^mvp92?6820{d}gbnlf[vjh|V;8Sb{{<5;=52=pazbicckPsmmw[45Xg|~783?7;vkplgiimVygcyQ>3^mvp9376820{d}gbnlf[vjh|V;8Sb{{<43=5==pazbicckPsmmw[45Xg|~79?0>8:ujwmdhflUx`bzP12]lqq:2;7;37zg|hcmmaZukg}U:?Razt=77:4><`ycnb`j_rnlpZ74Wf08;1199tmvneggoTaa{_01\kpr;=?4:46yfsi`lj`Ytdf~T=>Q`uu>63;7?3~cxdoaae^qokqY6;Ve~x1;7>0:8sluojfdnS~b`t^30[jss4<35=:5xirjakkcX{eeS<=Potv?1;7?3~cxdoaae^qokqY6;Ve~x18?>0:8sluojfdnS~b`t^30[jss4?;5=55xirjakkcX{eeS<=Potv?278602}bel`nd]phjrX9:Udyy293?3;?rot`keeiR}cou]27Zir|5qn{ahdbhQ|lnv\56Yh}}6=;3?7;vkplgiimVygcyQ>3^mvp90?6820{d}gbnlf[vjh|V;8Sb{{<7;=52=pazbicckPsmmw[45Xg|~7:3?7;vkplgiimVygcyQ>3^mvp9176820{d}gbnlf[vjh|V;8Sb{{<63=5==pazbicckPsmmw[45Xg|~7;?0>8:ujwmdhflUx`bzP12]lqq:0;7;37zg|hcmmaZukg}U:?Razt=57:4><`ycnb`j_rnlpZ74Wf0:;1199tmvneggoTaa{_01\kpr;??4:46yfsi`lj`Ytdf~T=>Q`uu>43;7?3~cxdoaae^qokqY6;Ve~x197>0:8sluojfdnS~b`t^30[jss4>35=:5xirjakkcX{eeS<=Potv?3;7?3~cxdoaae^qokqY6;Ve~x16?>0:8sluojfdnS~b`t^30[jss41;5=55xirjakkcX{eeS<=Potv?<78602}bel`nd]phjrX9:Udyy273?3;?rot`keeiR}cou]27Zir|52?2<64whqkfjhbWzfdxR?<_nww8=39911|e~fmoog\wiisW89Tcxz387<2<>qn{ahdbhQ|lnv\56Yh}}63;3?7;vkplgiimVygcyQ>3^mvp9>?6820{d}gbnlf[vjh|V;8Sb{{<9;=52=pazbicckPsmmw[45Xg|~743?7;vkplgiimVygcyQ>3^mvp9?76820{d}gbnlf[vjh|V;8Sb{{<83=5==pazbicckPsmmw[45Xg|~75?0>8:ujwmdhflUx`bzP12]lqq:>;7;37zg|hcmmaZukg}U:?Razt=;7:4><`ycnb`j_rnlpZ74Wf04;1199tmvneggoTaa{_01\kpr;1?4:46yfsi`lj`Ytdf~T=>Q`uu>:3;7?3~cxdoaae^qokqY6;Ve~x177>0:8sluojfdnS~b`t^30[jss4035=:5xirjakkcX{eeS<=Potv?=;713~cxdoaae^qokqY6a:ujwmdhflUx`bzP15]jj97783:5=55xirjakkcX{eeS<:Pio>24586?2}bel`nd]phjrX9=Ubb1??>058sluojfdnS~b`t^37[lh;984:;6yfsi`lj`Ytdf~T=9Qfn=31:41<`ycnb`j_rnlpZ73W`d7=>0>7:ujwmdhflUx`bzP15]jj97368=0{d}gbnlf[vjh|V;?Sd`314<23>qn{ahdbhQ|lnv\51Ynf5;=2<94whqkfjhbWzfdxR?;_hl?5286?2}bel`nd]phjrX9=Ubb1?7>058sluojfdnS~b`t^37[lh;904::6yfsi`lj`Ytdf~T=9Qfn=3=52=pazbicckPsmmw[42Xag69<3?8;vkplgiimVygcyQ>4^km87799>1|e~fmoog\wiisW8>Tec2=2?34?rot`keeiR}cou]20Zoi4;95=:5xirjakkcX{eeS<:Pio>10;703~cxdoaae^qokqY67;<7zg|hcmmaZukg}U:8Rga<35=52=pazbicckPsmmw[42Xag6943?8;vkplgiimVygcyQ>4^km87?99?1|e~fmoog\wiisW8>Tec2=>058sluojfdnS~b`t^37[lh;;94:;6yfsi`lj`Ytdf~T=9Qfn=12:41<`ycnb`j_rnlpZ73W`d7??0>7:ujwmdhflUx`bzP15]jj95468=0{d}gbnlf[vjh|V;?Sd`335<23>qn{ahdbhQ|lnv\51Ynf59>2<94whqkfjhbWzfdxR?;_hl?7386?2}bel`nd]phjrX9=Ubb1=8>058sluojfdnS~b`t^37[lh;;14:;6yfsi`lj`Ytdf~T=9Qfn=1::40<`ycnb`j_rnlpZ73W`d7?3?8;vkplgiimVygcyQ>4^km81699>1|e~fmoog\wiisW8>Tec2;1?34?rot`keeiR}cou]20Zoi4=85=:5xirjakkcX{eeS<:Pio>77;703~cxdoaae^qokqY64^km81>99>1|e~fmoog\wiisW8>Tec2;9?35?rot`keeiR}cou]20Zoi4=4:;6yfsi`lj`Ytdf~T=9Qfn=73:41<`ycnb`j_rnlpZ73W`d79<0>7:ujwmdhflUx`bzP15]jj93568=0{d}gbnlf[vjh|V;?Sd`352<23>qn{ahdbhQ|lnv\51Ynf5??2<94whqkfjhbWzfdxR?;_hl?1086?2}bel`nd]phjrX9=Ubb1;9>058sluojfdnS~b`t^37[lh;=>4:;6yfsi`lj`Ytdf~T=9Qfn=7;:41<`ycnb`j_rnlpZ73W`d7940>6:ujwmdhflUx`bzP15]jj9399>1|e~fmoog\wiisW8>Tec290?34?rot`keeiR}cou]20Zoi4?;5=:5xirjakkcX{eeS<:Pio>56;703~cxdoaae^qokqY64^km83199>1|e~fmoog\wiisW8>Tec298?34?rot`keeiR}cou]20Zoi4?35=;5xirjakkcX{eeS<:Pio>5:41<`ycnb`j_rnlpZ73W`d7;=0>7:ujwmdhflUx`bzP15]jj91668=0{d}gbnlf[vjh|V;?Sd`373<23>qn{ahdbhQ|lnv\51Ynf5=82<94whqkfjhbWzfdxR?;_hl?3186?2}bel`nd]phjrX9=Ubb19:>058sluojfdnS~b`t^37[lh;??4:;6yfsi`lj`Ytdf~T=9Qfn=54:41<`ycnb`j_rnlpZ73W`d7;50>7:ujwmdhflUx`bzP15]jj91>68<0{d}gbnlf[vjh|V;?Sd`37?34?rot`keeiR}cou]20Zoi41:5=:5xirjakkcX{eeS<:Pio>;5;703~cxdoaae^qokqY64^km8=099>1|e~fmoog\wiisW8>Tec277?34?rot`keeiR}cou]20Zoi4125=:5xirjakkcX{eeS<:Pio>;=;713~cxdoaae^qokqY67:ujwmdhflUx`bzP15]jj9?768=0{d}gbnlf[vjh|V;?Sd`390<23>qn{ahdbhQ|lnv\51Ynf5392<94whqkfjhbWzfdxR?;_hl?=686?2}bel`nd]phjrX9=Ubb17;>058sluojfdnS~b`t^37[lh;1<4:;6yfsi`lj`Ytdf~T=9Qfn=;5:41<`ycnb`j_rnlpZ73W`d75:0>7:ujwmdhflUx`bzP15]jj9??68=0{d}gbnlf[vjh|V;?Sd`398<22>qn{ahdbhQ|lnv\51Ynf535=:5xirjakkcX{eeS<:Potv?4;7e3~cxdoaae^qokqY61199tmvneggoTaa{_06\kpr;994:46yfsi`lj`Ytdf~T=9Q`uu>25;7?3~cxdoaae^qokqY60:8sluojfdnS~b`t^37[jss4895=55xirjakkcX{eeS<:Potv?518602}bel`nd]phjrX9=Udyy2>5?3;?rot`keeiR}cou]20Zir|5;=2<64whqkfjhbWzfdxR?;_nww8419911|e~fmoog\wiisW8>Tcxz319<2<>qn{ahdbhQ|lnv\51Yh}}6:53?8;vkplgiimVygcyQ>4^mvp979911|e~fmoog\wiisW8>Tcxz321<2<>qn{ahdbhQ|lnv\51Yh}}69=3?7;vkplgiimVygcyQ>4^mvp9456820{d}gbnlf[vjh|V;?Sb{{<31=5==pazbicckPsmmw[42Xg|~7>90>8:ujwmdhflUx`bzP15]lqq:5=7;37zg|hcmmaZukg}U:8Razt=05:4><`ycnb`j_rnlpZ73Wf0?91199tmvneggoTaa{_06\kpr;:14:46yfsi`lj`Ytdf~T=9Q`uu>1=;703~cxdoaae^qokqY605;7?3~cxdoaae^qokqY60:8sluojfdnS~b`t^37[jss4:95=55xirjakkcX{eeS<:Potv?718602}bel`nd]phjrX9=Udyy2<5?3;?rot`keeiR}cou]20Zir|59=2<64whqkfjhbWzfdxR?;_nww8619911|e~fmoog\wiisW8>Tcxz339<2<>qn{ahdbhQ|lnv\51Yh}}6853?8;vkplgiimVygcyQ>4^mvp959911|e~fmoog\wiisW8>Tcxz341<2<>qn{ahdbhQ|lnv\51Yh}}6?=3?7;vkplgiimVygcyQ>4^mvp9256820{d}gbnlf[vjh|V;?Sb{{<51=5==pazbicckPsmmw[42Xg|~7890>8:ujwmdhflUx`bzP15]lqq:3=7;37zg|hcmmaZukg}U:8Razt=65:4><`ycnb`j_rnlpZ73Wf0991199tmvneggoTaa{_06\kpr;<14:46yfsi`lj`Ytdf~T=9Q`uu>7=;703~cxdoaae^qokqY665;7?3~cxdoaae^qokqY60:8sluojfdnS~b`t^37[jss4<95=55xirjakkcX{eeS<:Potv?118602}bel`nd]phjrX9=Udyy2:5?3;?rot`keeiR}cou]20Zir|5?=2<64whqkfjhbWzfdxR?;_nww8019911|e~fmoog\wiisW8>Tcxz359<2<>qn{ahdbhQ|lnv\51Yh}}6>53?8;vkplgiimVygcyQ>4^mvp939911|e~fmoog\wiisW8>Tcxz361<2<>qn{ahdbhQ|lnv\51Yh}}6==3?7;vkplgiimVygcyQ>4^mvp9056820{d}gbnlf[vjh|V;?Sb{{<71=5==pazbicckPsmmw[42Xg|~7:90>8:ujwmdhflUx`bzP15]lqq:1=7;37zg|hcmmaZukg}U:8Razt=45:4><`ycnb`j_rnlpZ73Wf0;91199tmvneggoTaa{_06\kpr;>14:46yfsi`lj`Ytdf~T=9Q`uu>5=;703~cxdoaae^qokqY645;7?3~cxdoaae^qokqY60:8sluojfdnS~b`t^37[jss4>95=55xirjakkcX{eeS<:Potv?318602}bel`nd]phjrX9=Udyy285?3;?rot`keeiR}cou]20Zir|5==2<64whqkfjhbWzfdxR?;_nww8219911|e~fmoog\wiisW8>Tcxz379<2<>qn{ahdbhQ|lnv\51Yh}}6<53?8;vkplgiimVygcyQ>4^mvp919911|e~fmoog\wiisW8>Tcxz381<2<>qn{ahdbhQ|lnv\51Yh}}63=3?7;vkplgiimVygcyQ>4^mvp9>56820{d}gbnlf[vjh|V;?Sb{{<91=5==pazbicckPsmmw[42Xg|~7490>8:ujwmdhflUx`bzP15]lqq:?=7;37zg|hcmmaZukg}U:8Razt=:5:4><`ycnb`j_rnlpZ73Wf0591199tmvneggoTaa{_06\kpr;014:46yfsi`lj`Ytdf~T=9Q`uu>;=;703~cxdoaae^qokqY6:5;7?3~cxdoaae^qokqY60:8sluojfdnS~b`t^37[jss4095=55xirjakkcX{eeS<:Potv?=18602}bel`nd]phjrX9=Udyy265?3;?rot`keeiR}cou]20Zir|53=2<64whqkfjhbWzfdxR?;_nww8<19911|e~fmoog\wiisW8>Tcxz399<2<>qn{ahdbhQ|lnv\51Yh}}6253?8;vkplgiimVygcyQ>4^mvp9?99<1|e~fmoog\wiisW1189tmvneggoTaa{_4]jj97783:5=:5xirjakkcX{eeS8Qfn=334;713~cxdoaae^qokqY2W`d7==0>6:ujwmdhflUx`bzP5^km84799?1|e~fmoog\wiisW048sluojfdnS~b`t^7\mk:6;7;=7zg|hcmmaZukg}U>Sd`315<22>qn{ahdbhQ|lnv\1Zoi48?5=;5xirjakkcX{eeS8Qfn=35:40<`ycnb`j_rnlpZ3Xag6:;3?9;vkplgiimVygcyQ:_hl?5=86>2}bel`nd]phjrX=Vce0<71149tmvneggoTaa{_4]jj9799?1|e~fmoog\wiisW048sluojfdnS~b`t^7\mk:597;=7zg|hcmmaZukg}U>Sd`323<22>qn{ahdbhQ|lnv\1Zoi4;95=;5xirjakkcX{eeS8Qfn=07:40<`ycnb`j_rnlpZ3Xag6993?9;vkplgiimVygcyQ:_hl?6386>2}bel`nd]phjrX=Vce0?91179tmvneggoTaa{_4]jj94?68<0{d}gbnlf[vjh|V?Tec2=9?36?rot`keeiR}cou]6[lh;:7;=7zg|hcmmaZukg}U>Sd`331<22>qn{ahdbhQ|lnv\1Zoi4:;5=;5xirjakkcX{eeS8Qfn=11:40<`ycnb`j_rnlpZ3Xag68?3?9;vkplgiimVygcyQ:_hl?7186>2}bel`nd]phjrX=Vce0>;1179tmvneggoTaa{_4]jj95168<0{d}gbnlf[vjh|V?Tec2<7?35?rot`keeiR}cou]6[lh;;14::6yfsi`lj`Ytdf~T9Rga<2;=50=pazbicckPsmmw[0Ynf595=;5xirjakkcX{eeS8Qfn=63:40<`ycnb`j_rnlpZ3Xag6?=3?9;vkplgiimVygcyQ:_hl?0786>2}bel`nd]phjrX=Vce09=1179tmvneggoTaa{_4]jj92368<0{d}gbnlf[vjh|V?Tec2;5?35?rot`keeiR}cou]6[lh;32<84whqkfjhbWzfdxR;Pio>7=;723~cxdoaae^qokqY2W`d783?9;vkplgiimVygcyQ:_hl?1586>2}bel`nd]phjrX=Vce08?1179tmvneggoTaa{_4]jj93568<0{d}gbnlf[vjh|V?Tec2:3?35?rot`keeiR}cou]6[lh;==4::6yfsi`lj`Ytdf~T9Rga<47=53=pazbicckPsmmw[0Ynf5?=2<84whqkfjhbWzfdxR;Pio>63;713~cxdoaae^qokqY2W`d7950>6:ujwmdhflUx`bzP5^km80?99<1|e~fmoog\wiisW;4::6yfsi`lj`Ytdf~T9Rga<71=53=pazbicckPsmmw[0Ynf551;713~cxdoaae^qokqY2W`d7:;0>6:ujwmdhflUx`bzP5^km83199?1|e~fmoog\wiisW048sluojfdnS~b`t^7\mk:117;>7zg|hcmmaZukg}U>Sd`36?35?rot`keeiR}cou]6[lh;?94::6yfsi`lj`Ytdf~T9Rga<63=53=pazbicckPsmmw[0Ynf5=92<84whqkfjhbWzfdxR;Pio>47;713~cxdoaae^qokqY2W`d7;90>6:ujwmdhflUx`bzP5^km82399?1|e~fmoog\wiisW048sluojfdnS~b`t^7\mk:0?7;=7zg|hcmmaZukg}U>Sd`379<22>qn{ahdbhQ|lnv\1Zoi4>35=85xirjakkcX{eeS8Qfn=5=53=pazbicckPsmmw[0Ynf52;2<84whqkfjhbWzfdxR;Pio>;5;713~cxdoaae^qokqY2W`d74?0>6:ujwmdhflUx`bzP5^km8=599?1|e~fmoog\wiisW048sluojfdnS~b`t^7\mk:?=7;=7zg|hcmmaZukg}U>Sd`387<22>qn{ahdbhQ|lnv\1Zoi41=5=;5xirjakkcX{eeS8Qfn=:;:40<`ycnb`j_rnlpZ3Xag6353?:;vkplgiimVygcyQ:_hl?<;713~cxdoaae^qokqY2W`d75=0>6:ujwmdhflUx`bzP5^km8<799?1|e~fmoog\wiisW048sluojfdnS~b`t^7\mk:>;7;=7zg|hcmmaZukg}U>Sd`395<22>qn{ahdbhQ|lnv\1Zoi40?5=;5xirjakkcX{eeS8Qfn=;5:40<`ycnb`j_rnlpZ3Xag62;3?9;vkplgiimVygcyQ:_hl?==86>2}bel`nd]phjrX=Vce0471149tmvneggoTaa{_4]jj9?99?1|e~fmoog\wiisW0c8sluojfdnS~b`t^7\kpr;99:1<3?7;vkplgiimVygcyQ:_nww846768=0{d}gbnlf[vjh|V?Tcxz311<23>qn{ahdbhQ|lnv\1Zir|5;:2<94whqkfjhbWzfdxR;Potv?5786?2}bel`nd]phjrX=Ve~x1?<>058sluojfdnS~b`t^7\kpr;9=4:;6yfsi`lj`Ytdf~T9Razt=36:41<`ycnb`j_rnlpZ3Xg|~7=;0>7:ujwmdhflUx`bzP5^mvp97068=0{d}gbnlf[vjh|V?Tcxz319<23>qn{ahdbhQ|lnv\1Zir|5;22<84whqkfjhbWzfdxR;Potv?5;703~cxdoaae^qokqY2Wf0?>1169tmvneggoTaa{_4]lqq:597;<7zg|hcmmaZukg}U>Sb{{<30=52=pazbicckPsmmw[0Yh}}69?3?8;vkplgiimVygcyQ:_nww87299>1|e~fmoog\wiisW13;703~cxdoaae^qokqY2Wf0?61169tmvneggoTaa{_4]lqq:517;=7zg|hcmmaZukg}U>Sb{{<3<23>qn{ahdbhQ|lnv\1Zir|59;2<94whqkfjhbWzfdxR;Potv?7486?2}bel`nd]phjrX=Ve~x1==>058sluojfdnS~b`t^7\kpr;;:4:;6yfsi`lj`Ytdf~T9Razt=17:41<`ycnb`j_rnlpZ3Xg|~7?80>7:ujwmdhflUx`bzP5^mvp95168=0{d}gbnlf[vjh|V?Tcxz336<23>qn{ahdbhQ|lnv\1Zir|5932<94whqkfjhbWzfdxR;Potv?7<86>2}bel`nd]phjrX=Ve~x1=1169tmvneggoTaa{_4]lqq:387;<7zg|hcmmaZukg}U>Sb{{<53=52=pazbicckPsmmw[0Yh}}6?>3?8;vkplgiimVygcyQ:_nww81599>1|e~fmoog\wiisW72;703~cxdoaae^qokqY2Wf0991169tmvneggoTaa{_4]lqq:307;<7zg|hcmmaZukg}U>Sb{{<5;=53=pazbicckPsmmw[0Yh}}6?2<94whqkfjhbWzfdxR;Potv?1586?2}bel`nd]phjrX=Ve~x1;>>058sluojfdnS~b`t^7\kpr;=;4:;6yfsi`lj`Ytdf~T9Razt=70:41<`ycnb`j_rnlpZ3Xg|~7990>7:ujwmdhflUx`bzP5^mvp93268=0{d}gbnlf[vjh|V?Tcxz357<23>qn{ahdbhQ|lnv\1Zir|5?<2<94whqkfjhbWzfdxR;Potv?1=86?2}bel`nd]phjrX=Ve~x1;6>048sluojfdnS~b`t^7\kpr;=7;<7zg|hcmmaZukg}U>Sb{{<72=52=pazbicckPsmmw[0Yh}}6==3?8;vkplgiimVygcyQ:_nww83499>1|e~fmoog\wiisW5=:5xirjakkcX{eeS8Q`uu>51;703~cxdoaae^qokqY2Wf0;81169tmvneggoTaa{_4]lqq:1?7;<7zg|hcmmaZukg}U>Sb{{<7:=52=pazbicckPsmmw[0Yh}}6=53?9;vkplgiimVygcyQ:_nww8386?2}bel`nd]phjrX=Ve~x19?>058sluojfdnS~b`t^7\kpr;?84:;6yfsi`lj`Ytdf~T9Razt=51:41<`ycnb`j_rnlpZ3Xg|~7;>0>7:ujwmdhflUx`bzP5^mvp91368=0{d}gbnlf[vjh|V?Tcxz374<23>qn{ahdbhQ|lnv\1Zir|5==2<94whqkfjhbWzfdxR;Potv?3286?2}bel`nd]phjrX=Ve~x197>058sluojfdnS~b`t^7\kpr;?04::6yfsi`lj`Ytdf~T9Razt=5=52=pazbicckPsmmw[0Yh}}63<3?8;vkplgiimVygcyQ:_nww8=799>1|e~fmoog\wiisW;0;703~cxdoaae^qokqY2Wf05;1169tmvneggoTaa{_4]lqq:?>7;<7zg|hcmmaZukg}U>Sb{{<95=52=pazbicckPsmmw[0Yh}}6343?8;vkplgiimVygcyQ:_nww8=?99?1|e~fmoog\wiisW058sluojfdnS~b`t^7\kpr;194:;6yfsi`lj`Ytdf~T9Razt=;2:41<`ycnb`j_rnlpZ3Xg|~75?0>7:ujwmdhflUx`bzP5^mvp9?468=0{d}gbnlf[vjh|V?Tcxz395<23>qn{ahdbhQ|lnv\1Zir|53>2<94whqkfjhbWzfdxR;Potv?=386?2}bel`nd]phjrX=Ve~x178>058sluojfdnS~b`t^7\kpr;114:;6yfsi`lj`Ytdf~T9Razt=;::40<`ycnb`j_rnlpZ3Xg|~753?:;vkplgiimVygcyQ9_hl?4;7>3~cxdoaae^qokqY1W`d7==>50?34?rot`keeiR}cou]5[lh;99:5=;5xirjakkcX{eeS;Qfn=33:40<`ycnb`j_rnlpZ0Xag6:=3?9;vkplgiimVygcyQ9_hl?5786>2}bel`nd]phjrX>Vce0<=1179tmvneggoTaa{_7]jj97368<0{d}gbnlf[vjh|V5?35?rot`keeiR}cou]5[lh;9?4::6yfsi`lj`Ytdf~T:Rga<05=53=pazbicckPsmmw[3Ynf5;32<84whqkfjhbWzfdxR8Pio>2=;723~cxdoaae^qokqY1W`d7=3?9;vkplgiimVygcyQ9_hl?6586>2}bel`nd]phjrX>Vce0??1179tmvneggoTaa{_7]jj94568<0{d}gbnlf[vjh|V13;713~cxdoaae^qokqY1W`d7>50>6:ujwmdhflUx`bzP6^km87?99<1|e~fmoog\wiisW?Ubb1<1179tmvneggoTaa{_7]jj95768<0{d}gbnlf[vjh|V01;713~cxdoaae^qokqY1W`d7?;0>6:ujwmdhflUx`bzP6^km86199?1|e~fmoog\wiisW?Ubb1=7>048sluojfdnS~b`t^4\mk:417;>7zg|hcmmaZukg}U=Sd`33?35?rot`keeiR}cou]5[lh;<94::6yfsi`lj`Ytdf~T:Rga<53=53=pazbicckPsmmw[3Ynf5>92<84whqkfjhbWzfdxR8Pio>77;713~cxdoaae^qokqY1W`d7890>6:ujwmdhflUx`bzP6^km81399?1|e~fmoog\wiisW?Ubb1:9>048sluojfdnS~b`t^4\mk:3?7;=7zg|hcmmaZukg}U=Sd`349<22>qn{ahdbhQ|lnv\2Zoi4=35=85xirjakkcX{eeS;Qfn=6=53=pazbicckPsmmw[3Ynf5?;2<84whqkfjhbWzfdxR8Pio>65;713~cxdoaae^qokqY1W`d79?0>6:ujwmdhflUx`bzP6^km80599?1|e~fmoog\wiisW?Ubb1;;>048sluojfdnS~b`t^4\mk:2=7;=7zg|hcmmaZukg}U=Sd`357<22>qn{ahdbhQ|lnv\2Zoi4<=5=;5xirjakkcX{eeS;Qfn=7;:40<`ycnb`j_rnlpZ0Xag6>53?:;vkplgiimVygcyQ9_hl?1;713~cxdoaae^qokqY1W`d7:=0>6:ujwmdhflUx`bzP6^km83799?1|e~fmoog\wiisW?Ubb18=>048sluojfdnS~b`t^4\mk:1;7;=7zg|hcmmaZukg}U=Sd`365<22>qn{ahdbhQ|lnv\2Zoi4??5=;5xirjakkcX{eeS;Qfn=45:40<`ycnb`j_rnlpZ0Xag6=;3?9;vkplgiimVygcyQ9_hl?2=86>2}bel`nd]phjrX>Vce0;71149tmvneggoTaa{_7]jj9099?1|e~fmoog\wiisW?Ubb19?>048sluojfdnS~b`t^4\mk:097;=7zg|hcmmaZukg}U=Sd`373<22>qn{ahdbhQ|lnv\2Zoi4>95=;5xirjakkcX{eeS;Qfn=57:40<`ycnb`j_rnlpZ0Xag6<93?9;vkplgiimVygcyQ9_hl?3386>2}bel`nd]phjrX>Vce0:91179tmvneggoTaa{_7]jj91?68<0{d}gbnlf[vjh|Vqn{ahdbhQ|lnv\2Zoi41;5=;5xirjakkcX{eeS;Qfn=:1:40<`ycnb`j_rnlpZ0Xag63?3?9;vkplgiimVygcyQ9_hl?<186>2}bel`nd]phjrX>Vce05;1179tmvneggoTaa{_7]jj9>168<0{d}gbnlf[vjh|V2}bel`nd]phjrX>Vce04=1179tmvneggoTaa{_7]jj9?368<0{d}gbnlf[vjh|V:=;723~cxdoaae^qokqY1W`d753?9;vkplgiimVygcyQ9_nww8586i2}bel`nd]phjrX>Ve~x1??0;2=5==pazbicckPsmmw[3Yh}}6:<=0>7:ujwmdhflUx`bzP6^mvp97768=0{d}gbnlf[vjh|Vqn{ahdbhQ|lnv\2Zir|5;92<94whqkfjhbWzfdxR8Potv?5686?2}bel`nd]phjrX>Ve~x1?;>058sluojfdnS~b`t^4\kpr;9<4:;6yfsi`lj`Ytdf~T:Razt=35:41<`ycnb`j_rnlpZ0Xg|~7=:0>7:ujwmdhflUx`bzP6^mvp97?68=0{d}gbnlf[vjh|Vqn{ahdbhQ|lnv\2Zir|5;5=:5xirjakkcX{eeS;Q`uu>14;703~cxdoaae^qokqY1Wf0??1169tmvneggoTaa{_7]lqq:5:7;<7zg|hcmmaZukg}U=Sb{{<31=52=pazbicckPsmmw[3Yh}}6983?8;vkplgiimVygcyQ9_nww87399>1|e~fmoog\wiisW?Udyy2=6?34?rot`keeiR}cou]5[jss4;=5=:5xirjakkcX{eeS;Q`uu>1<;703~cxdoaae^qokqY1Wf0?71179tmvneggoTaa{_7]lqq:568=0{d}gbnlf[vjh|Vqn{ahdbhQ|lnv\2Zir|59:2<94whqkfjhbWzfdxR8Potv?7786?2}bel`nd]phjrX>Ve~x1=<>058sluojfdnS~b`t^4\kpr;;=4:;6yfsi`lj`Ytdf~T:Razt=16:41<`ycnb`j_rnlpZ0Xg|~7?;0>7:ujwmdhflUx`bzP6^mvp95068=0{d}gbnlf[vjh|Vqn{ahdbhQ|lnv\2Zir|5922<84whqkfjhbWzfdxR8Potv?7;703~cxdoaae^qokqY1Wf09>1169tmvneggoTaa{_7]lqq:397;<7zg|hcmmaZukg}U=Sb{{<50=52=pazbicckPsmmw[3Yh}}6??3?8;vkplgiimVygcyQ9_nww81299>1|e~fmoog\wiisW?Udyy2;5?34?rot`keeiR}cou]5[jss4=<5=:5xirjakkcX{eeS;Q`uu>73;703~cxdoaae^qokqY1Wf0961169tmvneggoTaa{_7]lqq:317;=7zg|hcmmaZukg}U=Sb{{<5<23>qn{ahdbhQ|lnv\2Zir|5?;2<94whqkfjhbWzfdxR8Potv?1486?2}bel`nd]phjrX>Ve~x1;=>058sluojfdnS~b`t^4\kpr;=:4:;6yfsi`lj`Ytdf~T:Razt=77:41<`ycnb`j_rnlpZ0Xg|~7980>7:ujwmdhflUx`bzP6^mvp93168=0{d}gbnlf[vjh|Vqn{ahdbhQ|lnv\2Zir|5?32<94whqkfjhbWzfdxR8Potv?1<86>2}bel`nd]phjrX>Ve~x1;1169tmvneggoTaa{_7]lqq:187;<7zg|hcmmaZukg}U=Sb{{<73=52=pazbicckPsmmw[3Yh}}6=>3?8;vkplgiimVygcyQ9_nww83599>1|e~fmoog\wiisW?Udyy294?34?rot`keeiR}cou]5[jss4??5=:5xirjakkcX{eeS;Q`uu>52;703~cxdoaae^qokqY1Wf0;91169tmvneggoTaa{_7]lqq:107;<7zg|hcmmaZukg}U=Sb{{<7;=53=pazbicckPsmmw[3Yh}}6=2<94whqkfjhbWzfdxR8Potv?3586?2}bel`nd]phjrX>Ve~x19>>058sluojfdnS~b`t^4\kpr;?;4:;6yfsi`lj`Ytdf~T:Razt=50:41<`ycnb`j_rnlpZ0Xg|~7;90>7:ujwmdhflUx`bzP6^mvp91268=0{d}gbnlf[vjh|Vqn{ahdbhQ|lnv\2Zir|5=<2<94whqkfjhbWzfdxR8Potv?3=86?2}bel`nd]phjrX>Ve~x196>048sluojfdnS~b`t^4\kpr;?7;<7zg|hcmmaZukg}U=Sb{{<92=52=pazbicckPsmmw[3Yh}}63=3?8;vkplgiimVygcyQ9_nww8=499>1|e~fmoog\wiisW?Udyy273?34?rot`keeiR}cou]5[jss41>5=:5xirjakkcX{eeS;Q`uu>;1;703~cxdoaae^qokqY1Wf0581169tmvneggoTaa{_7]lqq:??7;<7zg|hcmmaZukg}U=Sb{{<9:=52=pazbicckPsmmw[3Yh}}6353?9;vkplgiimVygcyQ9_nww8=86?2}bel`nd]phjrX>Ve~x17?>058sluojfdnS~b`t^4\kpr;184:;6yfsi`lj`Ytdf~T:Razt=;1:41<`ycnb`j_rnlpZ0Xg|~75>0>7:ujwmdhflUx`bzP6^mvp9?368=0{d}gbnlf[vjh|Vqn{ahdbhQ|lnv\2Zir|53=2<94whqkfjhbWzfdxR8Potv?=286?2}bel`nd]phjrX>Ve~x177>058sluojfdnS~b`t^4\kpr;104::6yfsi`lj`Ytdf~T:Razt=;=50=pazbicckPsmmw[=Ynf5:5=45xirjakkcX{eeS5Qfn=334?699>1|e~fmoog\wiisW1Ubb1??0?35?rot`keeiR}cou];[lh;994::6yfsi`lj`Ytdf~T4Rga<03=53=pazbicckPsmmw[=Ynf5;92<84whqkfjhbWzfdxR6Pio>27;713~cxdoaae^qokqY?W`d7=90>6:ujwmdhflUx`bzP8^km84399?1|e~fmoog\wiisW1Ubb1?9>048sluojfdnS~b`t^:\mk:6?7;=7zg|hcmmaZukg}U3Sd`319<22>qn{ahdbhQ|lnv\15;713~cxdoaae^qokqY?W`d7>?0>6:ujwmdhflUx`bzP8^km87599?1|e~fmoog\wiisW1Ubb1<;>048sluojfdnS~b`t^:\mk:5=7;=7zg|hcmmaZukg}U3Sd`327<22>qn{ahdbhQ|lnv\Xag6953?:;vkplgiimVygcyQ7_hl?6;713~cxdoaae^qokqY?W`d7?=0>6:ujwmdhflUx`bzP8^km86799?1|e~fmoog\wiisW1Ubb1==>048sluojfdnS~b`t^:\mk:4;7;=7zg|hcmmaZukg}U3Sd`335<22>qn{ahdbhQ|lnv\Xag68;3?9;vkplgiimVygcyQ7_hl?7=86>2}bel`nd]phjrX0Vce0>71149tmvneggoTaa{_9]jj9599?1|e~fmoog\wiisW1Ubb1:?>048sluojfdnS~b`t^:\mk:397;=7zg|hcmmaZukg}U3Sd`343<22>qn{ahdbhQ|lnv\Xag6?93?9;vkplgiimVygcyQ7_hl?0386>2}bel`nd]phjrX0Vce0991179tmvneggoTaa{_9]jj92?68<0{d}gbnlf[vjh|V2Tec2;9?36?rot`keeiR}cou];[lh;<7;=7zg|hcmmaZukg}U3Sd`351<22>qn{ahdbhQ|lnv\Xag6>?3?9;vkplgiimVygcyQ7_hl?1186>2}bel`nd]phjrX0Vce08;1179tmvneggoTaa{_9]jj93168<0{d}gbnlf[vjh|V2Tec2:7?35?rot`keeiR}cou];[lh;=14::6yfsi`lj`Ytdf~T4Rga<4;=50=pazbicckPsmmw[=Ynf5?5=;5xirjakkcX{eeS5Qfn=43:40<`ycnb`j_rnlpZ>Xag6==3?9;vkplgiimVygcyQ7_hl?2786>2}bel`nd]phjrX0Vce0;=1179tmvneggoTaa{_9]jj90368<0{d}gbnlf[vjh|V2Tec295?35?rot`keeiR}cou];[lh;>?4::6yfsi`lj`Ytdf~T4Rga<75=53=pazbicckPsmmw[=Ynf5<32<84whqkfjhbWzfdxR6Pio>5=;723~cxdoaae^qokqY?W`d7:3?9;vkplgiimVygcyQ7_hl?3586>2}bel`nd]phjrX0Vce0:?1179tmvneggoTaa{_9]jj91568<0{d}gbnlf[vjh|V2Tec283?35?rot`keeiR}cou];[lh;?=4::6yfsi`lj`Ytdf~T4Rga<67=53=pazbicckPsmmw[=Ynf5==2<84whqkfjhbWzfdxR6Pio>43;713~cxdoaae^qokqY?W`d7;50>6:ujwmdhflUx`bzP8^km82?99<1|e~fmoog\wiisW1Ubb191179tmvneggoTaa{_9]jj9>768<0{d}gbnlf[vjh|V2Tec271?35?rot`keeiR}cou];[lh;0;4::6yfsi`lj`Ytdf~T4Rga<91=53=pazbicckPsmmw[=Ynf52?2<84whqkfjhbWzfdxR6Pio>;1;713~cxdoaae^qokqY?W`d74;0>6:ujwmdhflUx`bzP8^km8=199?1|e~fmoog\wiisW1Ubb167>048sluojfdnS~b`t^:\mk:?17;>7zg|hcmmaZukg}U3Sd`38?35?rot`keeiR}cou];[lh;194::6yfsi`lj`Ytdf~T4Rga<83=53=pazbicckPsmmw[=Ynf5392<84whqkfjhbWzfdxR6Pio>:7;713~cxdoaae^qokqY?W`d7590>6:ujwmdhflUx`bzP8^km8<399?1|e~fmoog\wiisW1Ubb179>048sluojfdnS~b`t^:\mk:>?7;=7zg|hcmmaZukg}U3Sd`399<22>qn{ahdbhQ|lnv\Xg|~7==0>7:ujwmdhflUx`bzP8^mvp97668=0{d}gbnlf[vjh|V2Tcxz313<23>qn{ahdbhQ|lnv\058sluojfdnS~b`t^:\kpr;9?4:;6yfsi`lj`Ytdf~T4Razt=34:41<`ycnb`j_rnlpZ>Xg|~7=50>7:ujwmdhflUx`bzP8^mvp97>68<0{d}gbnlf[vjh|V2Tcxz31?34?rot`keeiR}cou];[jss4;:5=:5xirjakkcX{eeS5Q`uu>15;703~cxdoaae^qokqY?Wf0?<1169tmvneggoTaa{_9]lqq:5;7;<7zg|hcmmaZukg}U3Sb{{<36=52=pazbicckPsmmw[=Yh}}6993?8;vkplgiimVygcyQ7_nww87099>1|e~fmoog\wiisW1Udyy2=7?34?rot`keeiR}cou];[jss4;25=:5xirjakkcX{eeS5Q`uu>1=;713~cxdoaae^qokqY?Wf0?0>7:ujwmdhflUx`bzP8^mvp95768=0{d}gbnlf[vjh|V2Tcxz330<23>qn{ahdbhQ|lnv\058sluojfdnS~b`t^:\kpr;;<4:;6yfsi`lj`Ytdf~T4Razt=15:41<`ycnb`j_rnlpZ>Xg|~7?:0>7:ujwmdhflUx`bzP8^mvp95?68=0{d}gbnlf[vjh|V2Tcxz338<22>qn{ahdbhQ|lnv\74;703~cxdoaae^qokqY?Wf09?1169tmvneggoTaa{_9]lqq:3:7;<7zg|hcmmaZukg}U3Sb{{<51=52=pazbicckPsmmw[=Yh}}6?83?8;vkplgiimVygcyQ7_nww81399>1|e~fmoog\wiisW1Udyy2;6?34?rot`keeiR}cou];[jss4==5=:5xirjakkcX{eeS5Q`uu>7<;703~cxdoaae^qokqY?Wf0971179tmvneggoTaa{_9]lqq:368=0{d}gbnlf[vjh|V2Tcxz351<23>qn{ahdbhQ|lnv\058sluojfdnS~b`t^:\kpr;==4:;6yfsi`lj`Ytdf~T4Razt=76:41<`ycnb`j_rnlpZ>Xg|~79;0>7:ujwmdhflUx`bzP8^mvp93068=0{d}gbnlf[vjh|V2Tcxz359<23>qn{ahdbhQ|lnv\1169tmvneggoTaa{_9]lqq:197;<7zg|hcmmaZukg}U3Sb{{<70=52=pazbicckPsmmw[=Yh}}6=?3?8;vkplgiimVygcyQ7_nww83299>1|e~fmoog\wiisW1Udyy295?34?rot`keeiR}cou];[jss4?<5=:5xirjakkcX{eeS5Q`uu>53;703~cxdoaae^qokqY?Wf0;61169tmvneggoTaa{_9]lqq:117;=7zg|hcmmaZukg}U3Sb{{<7<23>qn{ahdbhQ|lnv\058sluojfdnS~b`t^:\kpr;?:4:;6yfsi`lj`Ytdf~T4Razt=57:41<`ycnb`j_rnlpZ>Xg|~7;80>7:ujwmdhflUx`bzP8^mvp91168=0{d}gbnlf[vjh|V2Tcxz376<23>qn{ahdbhQ|lnv\2}bel`nd]phjrX0Ve~x191169tmvneggoTaa{_9]lqq:?87;<7zg|hcmmaZukg}U3Sb{{<93=52=pazbicckPsmmw[=Yh}}63>3?8;vkplgiimVygcyQ7_nww8=599>1|e~fmoog\wiisW1Udyy274?34?rot`keeiR}cou];[jss41?5=:5xirjakkcX{eeS5Q`uu>;2;703~cxdoaae^qokqY?Wf0591169tmvneggoTaa{_9]lqq:?07;<7zg|hcmmaZukg}U3Sb{{<9;=53=pazbicckPsmmw[=Yh}}632<94whqkfjhbWzfdxR6Potv?=586?2}bel`nd]phjrX0Ve~x17>>058sluojfdnS~b`t^:\kpr;1;4:;6yfsi`lj`Ytdf~T4Razt=;0:41<`ycnb`j_rnlpZ>Xg|~7590>7:ujwmdhflUx`bzP8^mvp9?268=0{d}gbnlf[vjh|V2Tcxz397<23>qn{ahdbhQ|lnv\048sluojfdnS~b`t^:\kpr;17;>7zg|hcmmaZukg}U2Sd`30?3:?rot`keeiR}cou]:[lh;99:1<3?8;vkplgiimVygcyQ6_hl?55699?1|e~fmoog\wiisW0Ubb1??>048sluojfdnS~b`t^;\mk:697;=7zg|hcmmaZukg}U2Sd`313<22>qn{ahdbhQ|lnv\=Zoi4895=;5xirjakkcX{eeS4Qfn=37:40<`ycnb`j_rnlpZ?Xag6:93?9;vkplgiimVygcyQ6_hl?5386>2}bel`nd]phjrX1Vce0<91179tmvneggoTaa{_8]jj97?68<0{d}gbnlf[vjh|V3Tec2>9?36?rot`keeiR}cou]:[lh;97;=7zg|hcmmaZukg}U2Sd`321<22>qn{ahdbhQ|lnv\=Zoi4;;5=;5xirjakkcX{eeS4Qfn=01:40<`ycnb`j_rnlpZ?Xag69?3?9;vkplgiimVygcyQ6_hl?6186>2}bel`nd]phjrX1Vce0?;1179tmvneggoTaa{_8]jj94168<0{d}gbnlf[vjh|V3Tec2=7?35?rot`keeiR}cou]:[lh;:14::6yfsi`lj`Ytdf~T5Rga<3;=50=pazbicckPsmmw[2}bel`nd]phjrX1Vce0>=1179tmvneggoTaa{_8]jj95368<0{d}gbnlf[vjh|V3Tec2<5?35?rot`keeiR}cou]:[lh;;?4::6yfsi`lj`Ytdf~T5Rga<25=53=pazbicckPsmmw[0=;723~cxdoaae^qokqY>W`d7?3?9;vkplgiimVygcyQ6_hl?0586>2}bel`nd]phjrX1Vce09?1179tmvneggoTaa{_8]jj92568<0{d}gbnlf[vjh|V3Tec2;3?35?rot`keeiR}cou]:[lh;<=4::6yfsi`lj`Ytdf~T5Rga<57=53=pazbicckPsmmw[=2<84whqkfjhbWzfdxR7Pio>73;713~cxdoaae^qokqY>W`d7850>6:ujwmdhflUx`bzP9^km81?99<1|e~fmoog\wiisW0Ubb1:1179tmvneggoTaa{_8]jj93768<0{d}gbnlf[vjh|V3Tec2:1?35?rot`keeiR}cou]:[lh;=;4::6yfsi`lj`Ytdf~T5Rga<41=53=pazbicckPsmmw[61;713~cxdoaae^qokqY>W`d79;0>6:ujwmdhflUx`bzP9^km80199?1|e~fmoog\wiisW0Ubb1;7>048sluojfdnS~b`t^;\mk:217;>7zg|hcmmaZukg}U2Sd`35?35?rot`keeiR}cou]:[lh;>94::6yfsi`lj`Ytdf~T5Rga<73=53=pazbicckPsmmw[57;713~cxdoaae^qokqY>W`d7:90>6:ujwmdhflUx`bzP9^km83399?1|e~fmoog\wiisW0Ubb189>048sluojfdnS~b`t^;\mk:1?7;=7zg|hcmmaZukg}U2Sd`369<22>qn{ahdbhQ|lnv\=Zoi4?35=85xirjakkcX{eeS4Qfn=4=53=pazbicckPsmmw[45;713~cxdoaae^qokqY>W`d7;?0>6:ujwmdhflUx`bzP9^km82599?1|e~fmoog\wiisW0Ubb19;>048sluojfdnS~b`t^;\mk:0=7;=7zg|hcmmaZukg}U2Sd`377<22>qn{ahdbhQ|lnv\=Zoi4>=5=;5xirjakkcX{eeS4Qfn=5;:40<`ycnb`j_rnlpZ?Xag6<53?:;vkplgiimVygcyQ6_hl?3;713~cxdoaae^qokqY>W`d74=0>6:ujwmdhflUx`bzP9^km8=799?1|e~fmoog\wiisW0Ubb16=>048sluojfdnS~b`t^;\mk:?;7;=7zg|hcmmaZukg}U2Sd`385<22>qn{ahdbhQ|lnv\=Zoi41?5=;5xirjakkcX{eeS4Qfn=:5:40<`ycnb`j_rnlpZ?Xag63;3?9;vkplgiimVygcyQ6_hl?<=86>2}bel`nd]phjrX1Vce0571149tmvneggoTaa{_8]jj9>99?1|e~fmoog\wiisW0Ubb17?>048sluojfdnS~b`t^;\mk:>97;=7zg|hcmmaZukg}U2Sd`393<22>qn{ahdbhQ|lnv\=Zoi4095=;5xirjakkcX{eeS4Qfn=;7:40<`ycnb`j_rnlpZ?Xag6293?9;vkplgiimVygcyQ6_hl?=386>2}bel`nd]phjrX1Vce0491179tmvneggoTaa{_8]jj9??68<0{d}gbnlf[vjh|V3Tec269?36?rot`keeiR}cou]:[lh;17;=7zg|hcmmaZukg}U2Sb{{<1<2e>qn{ahdbhQ|lnv\=Zir|5;;<7>1199tmvneggoTaa{_8]lqq:6894:;6yfsi`lj`Ytdf~T5Razt=33:41<`ycnb`j_rnlpZ?Xg|~7=<0>7:ujwmdhflUx`bzP9^mvp97568=0{d}gbnlf[vjh|V3Tcxz312<23>qn{ahdbhQ|lnv\=Zir|5;?2<94whqkfjhbWzfdxR7Potv?5086?2}bel`nd]phjrX1Ve~x1?9>058sluojfdnS~b`t^;\kpr;9>4:;6yfsi`lj`Ytdf~T5Razt=3;:41<`ycnb`j_rnlpZ?Xg|~7=40>6:ujwmdhflUx`bzP9^mvp9799>1|e~fmoog\wiisW0Udyy2=0?34?rot`keeiR}cou]:[jss4;;5=:5xirjakkcX{eeS4Q`uu>16;703~cxdoaae^qokqY>Wf0?=1169tmvneggoTaa{_8]lqq:5<7;<7zg|hcmmaZukg}U2Sb{{<37=52=pazbicckPsmmw[1|e~fmoog\wiisW0Udyy2=8?34?rot`keeiR}cou]:[jss4;35=;5xirjakkcX{eeS4Q`uu>1:41<`ycnb`j_rnlpZ?Xg|~7?=0>7:ujwmdhflUx`bzP9^mvp95668=0{d}gbnlf[vjh|V3Tcxz333<23>qn{ahdbhQ|lnv\=Zir|5982<94whqkfjhbWzfdxR7Potv?7186?2}bel`nd]phjrX1Ve~x1=:>058sluojfdnS~b`t^;\kpr;;?4:;6yfsi`lj`Ytdf~T5Razt=14:41<`ycnb`j_rnlpZ?Xg|~7?50>7:ujwmdhflUx`bzP9^mvp95>68<0{d}gbnlf[vjh|V3Tcxz33?34?rot`keeiR}cou]:[jss4=:5=:5xirjakkcX{eeS4Q`uu>75;703~cxdoaae^qokqY>Wf09<1169tmvneggoTaa{_8]lqq:3;7;<7zg|hcmmaZukg}U2Sb{{<56=52=pazbicckPsmmw[1|e~fmoog\wiisW0Udyy2;7?34?rot`keeiR}cou]:[jss4=25=:5xirjakkcX{eeS4Q`uu>7=;713~cxdoaae^qokqY>Wf090>7:ujwmdhflUx`bzP9^mvp93768=0{d}gbnlf[vjh|V3Tcxz350<23>qn{ahdbhQ|lnv\=Zir|5?92<94whqkfjhbWzfdxR7Potv?1686?2}bel`nd]phjrX1Ve~x1;;>058sluojfdnS~b`t^;\kpr;=<4:;6yfsi`lj`Ytdf~T5Razt=75:41<`ycnb`j_rnlpZ?Xg|~79:0>7:ujwmdhflUx`bzP9^mvp93?68=0{d}gbnlf[vjh|V3Tcxz358<22>qn{ahdbhQ|lnv\=Zir|5?5=:5xirjakkcX{eeS4Q`uu>54;703~cxdoaae^qokqY>Wf0;?1169tmvneggoTaa{_8]lqq:1:7;<7zg|hcmmaZukg}U2Sb{{<71=52=pazbicckPsmmw[1|e~fmoog\wiisW0Udyy296?34?rot`keeiR}cou]:[jss4?=5=:5xirjakkcX{eeS4Q`uu>5<;703~cxdoaae^qokqY>Wf0;71179tmvneggoTaa{_8]lqq:168=0{d}gbnlf[vjh|V3Tcxz371<23>qn{ahdbhQ|lnv\=Zir|5=:2<94whqkfjhbWzfdxR7Potv?3786?2}bel`nd]phjrX1Ve~x19<>058sluojfdnS~b`t^;\kpr;?=4:;6yfsi`lj`Ytdf~T5Razt=56:41<`ycnb`j_rnlpZ?Xg|~7;;0>7:ujwmdhflUx`bzP9^mvp91068=0{d}gbnlf[vjh|V3Tcxz379<23>qn{ahdbhQ|lnv\=Zir|5=22<84whqkfjhbWzfdxR7Potv?3;703~cxdoaae^qokqY>Wf05>1169tmvneggoTaa{_8]lqq:?97;<7zg|hcmmaZukg}U2Sb{{<90=52=pazbicckPsmmw[1|e~fmoog\wiisW0Udyy275?34?rot`keeiR}cou]:[jss41<5=:5xirjakkcX{eeS4Q`uu>;3;703~cxdoaae^qokqY>Wf0561169tmvneggoTaa{_8]lqq:?17;=7zg|hcmmaZukg}U2Sb{{<9<23>qn{ahdbhQ|lnv\=Zir|53;2<94whqkfjhbWzfdxR7Potv?=486?2}bel`nd]phjrX1Ve~x17=>058sluojfdnS~b`t^;\kpr;1:4:;6yfsi`lj`Ytdf~T5Razt=;7:41<`ycnb`j_rnlpZ?Xg|~7580>7:ujwmdhflUx`bzP9^mvp9?168=0{d}gbnlf[vjh|V3Tcxz396<23>qn{ahdbhQ|lnv\=Zir|5332<94whqkfjhbWzfdxR7Potv?=<86>2}bel`nd]phjrX1Ve~x171189tmvneggoTaa{_wkgajYnf5:5=i5xirjakkcX{eeS{gken]jj97783:5=o5xirjakkcX{eeS{gken]jj97787;j7zg|hcmmaZukg}U}eik`_hl?5586i2}bel`nd]phjrX~`nncRga<03=5d=pazbicckPsmmw[socmfUbb1?=>0c8sluojfdnS~b`t^tj``iXag6:?3?n;vkplgiimVygcyQyiegl[lh;9=4:m6yfsi`lj`Ytdf~Tzdjjo^km84399h1|e~fmoog\wiisWcoibQfn=35:4g<`ycnb`j_rnlpZpnlleTec2>7?3b?rot`keeiR}cou]umachW`d7=50>a:ujwmdhflUx`bzPvhffkZoi4835=45xirjakkcX{eeS{gken]jj9799h1|e~fmoog\wiisWcoibQfn=03:4g<`ycnb`j_rnlpZpnlleTec2=1?3b?rot`keeiR}cou]umachW`d7>?0>a:ujwmdhflUx`bzPvhffkZoi4;95=l5xirjakkcX{eeS{gken]jj94368k0{d}gbnlf[vjh|V|bhhaPio>11;7f3~cxdoaae^qokqYqamodSd`327<2e>qn{ahdbhQ|lnv\rlbbgVce0?911`9tmvneggoTaa{_wkgajYnf5832qn{ahdbhQ|lnv\rlbbgVce0>?11`9tmvneggoTaa{_wkgajYnf59920c8sluojfdnS~b`t^tj``iXag68;3?n;vkplgiimVygcyQyiegl[lh;;14:m6yfsi`lj`Ytdf~Tzdjjo^km86?9901|e~fmoog\wiisWcoibQfn=1=5d=pazbicckPsmmw[socmfUbb1:?>0c8sluojfdnS~b`t^tj``iXag6?=3?n;vkplgiimVygcyQyiegl[lh;<;4:m6yfsi`lj`Ytdf~Tzdjjo^km81599h1|e~fmoog\wiisWcoibQfn=67:4g<`ycnb`j_rnlpZpnlleTec2;5?3b?rot`keeiR}cou]umachW`d78;0>a:ujwmdhflUx`bzPvhffkZoi4==5=l5xirjakkcX{eeS{gken]jj92?68k0{d}gbnlf[vjh|V|bhhaPio>7=;7>3~cxdoaae^qokqYqamodSd`34?3b?rot`keeiR}cou]umachW`d79=0>a:ujwmdhflUx`bzPvhffkZoi4<;5=l5xirjakkcX{eeS{gken]jj93568k0{d}gbnlf[vjh|V|bhhaPio>67;7f3~cxdoaae^qokqYqamodSd`355<2e>qn{ahdbhQ|lnv\rlbbgVce08;11`9tmvneggoTaa{_wkgajYnf5?=20c8sluojfdnS~b`t^tj``iXag6=93?n;vkplgiimVygcyQyiegl[lh;>?4:m6yfsi`lj`Ytdf~Tzdjjo^km83199h1|e~fmoog\wiisWcoibQfn=4;:4g<`ycnb`j_rnlpZpnlleTec299?3:?rot`keeiR}cou]umachW`d7:3?n;vkplgiimVygcyQyiegl[lh;?94:m6yfsi`lj`Ytdf~Tzdjjo^km82799h1|e~fmoog\wiisWcoibQfn=51:4g<`ycnb`j_rnlpZpnlleTec283?3b?rot`keeiR}cou]umachW`d7;90>a:ujwmdhflUx`bzPvhffkZoi4>?5=l5xirjakkcX{eeS{gken]jj91168k0{d}gbnlf[vjh|V|bhhaPio>43;7f3~cxdoaae^qokqYqamodSd`379<2e>qn{ahdbhQ|lnv\rlbbgVce0:71189tmvneggoTaa{_wkgajYnf5=5=l5xirjakkcX{eeS{gken]jj9>768k0{d}gbnlf[vjh|V|bhhaPio>;5;7f3~cxdoaae^qokqYqamodSd`383<2e>qn{ahdbhQ|lnv\rlbbgVce05=11`9tmvneggoTaa{_wkgajYnf52?20c8sluojfdnS~b`t^tj``iXag6353?6;vkplgiimVygcyQyiegl[lh;07;j7zg|hcmmaZukg}U}eik`_hl?=586i2}bel`nd]phjrX~`nncRga<83=5d=pazbicckPsmmw[socmfUbb17=>0c8sluojfdnS~b`t^tj``iXag62?3?n;vkplgiimVygcyQyiegl[lh;1=4:m6yfsi`lj`Ytdf~Tzdjjo^km8<399h1|e~fmoog\wiisWcoibQfn=;5:4g<`ycnb`j_rnlpZpnlleTec267?3b?rot`keeiR}cou]umachW`d7550>a:ujwmdhflUx`bzPvhffkZoi4035=45xirjakkcX{eeS{gken]jj9?99h1|e~fmoog\wiisWcoibQ`uu>3:4c<`ycnb`j_rnlpZpnlleTcxz311294;7d3~cxdoaae^qokqYqamodSb{{<023:4d<`ycnb`j_rnlpZpnlleTcxz311<2f>qn{ahdbhQ|lnv\rlbbgVe~x1?>>0`8sluojfdnS~b`t^tj``iXg|~7=?0>b:ujwmdhflUx`bzPvhffkZir|5;82qn{ahdbhQ|lnv\rlbbgVe~x1?6>0c8sluojfdnS~b`t^tj``iXg|~7=3?m;vkplgiimVygcyQyiegl[jss4;:5=o5xirjakkcX{eeS{gken]lqq:597;i7zg|hcmmaZukg}U}eik`_nww87499k1|e~fmoog\wiisWcoibQ`uu>17;7e3~cxdoaae^qokqYqamodSb{{<36=5g=pazbicckPsmmw[socmfUdyy2=5?3a?rot`keeiR}cou]umachWf0?811c9tmvneggoTaa{_wkgajYh}}69;3?m;vkplgiimVygcyQyiegl[jss4;25=o5xirjakkcX{eeS{gken]lqq:517;j7zg|hcmmaZukg}U}eik`_nww8786j2}bel`nd]phjrX~`nncRazt=13:4d<`ycnb`j_rnlpZpnlleTcxz330<2f>qn{ahdbhQ|lnv\rlbbgVe~x1==>0`8sluojfdnS~b`t^tj``iXg|~7?>0>b:ujwmdhflUx`bzPvhffkZir|59?2qn{ahdbhQ|lnv\rlbbgVe~x1=11c9tmvneggoTaa{_wkgajYh}}6?<3?m;vkplgiimVygcyQyiegl[jss4=;5=o5xirjakkcX{eeS{gken]lqq:3:7;i7zg|hcmmaZukg}U}eik`_nww81599k1|e~fmoog\wiisWcoibQ`uu>70;7e3~cxdoaae^qokqYqamodSb{{<57=5g=pazbicckPsmmw[socmfUdyy2;6?3a?rot`keeiR}cou]umachWf09911c9tmvneggoTaa{_wkgajYh}}6?43?m;vkplgiimVygcyQyiegl[jss4=35=l5xirjakkcX{eeS{gken]lqq:368h0{d}gbnlf[vjh|V|bhhaPotv?1586j2}bel`nd]phjrX~`nncRazt=72:4d<`ycnb`j_rnlpZpnlleTcxz353<2f>qn{ahdbhQ|lnv\rlbbgVe~x1;<>0`8sluojfdnS~b`t^tj``iXg|~7990>b:ujwmdhflUx`bzPvhffkZir|5?>211c9tmvneggoTaa{_wkgajYh}}6==3?m;vkplgiimVygcyQyiegl[jss4?85=o5xirjakkcX{eeS{gken]lqq:1;7;i7zg|hcmmaZukg}U}eik`_nww83299k1|e~fmoog\wiisWcoibQ`uu>51;7e3~cxdoaae^qokqYqamodSb{{<74=5g=pazbicckPsmmw[socmfUdyy297?3a?rot`keeiR}cou]umachWf0;611c9tmvneggoTaa{_wkgajYh}}6=53?n;vkplgiimVygcyQyiegl[jss4?4:n6yfsi`lj`Ytdf~Tzdjjo^mvp91768h0{d}gbnlf[vjh|V|bhhaPotv?3486j2}bel`nd]phjrX~`nncRazt=51:4d<`ycnb`j_rnlpZpnlleTcxz372<2f>qn{ahdbhQ|lnv\rlbbgVe~x19;>0`8sluojfdnS~b`t^tj``iXg|~7;80>b:ujwmdhflUx`bzPvhffkZir|5==24:n6yfsi`lj`Ytdf~Tzdjjo^mvp91?68h0{d}gbnlf[vjh|V|bhhaPotv?3<86i2}bel`nd]phjrX~`nncRazt=5=5g=pazbicckPsmmw[socmfUdyy270?3a?rot`keeiR}cou]umachWf05?11c9tmvneggoTaa{_wkgajYh}}63>3?m;vkplgiimVygcyQyiegl[jss4195=o5xirjakkcX{eeS{gken]lqq:?<7;i7zg|hcmmaZukg}U}eik`_nww8=399k1|e~fmoog\wiisWcoibQ`uu>;2;7e3~cxdoaae^qokqYqamodSb{{<95=5g=pazbicckPsmmw[socmfUdyy278?3a?rot`keeiR}cou]umachWf05711`9tmvneggoTaa{_wkgajYh}}632qn{ahdbhQ|lnv\rlbbgVe~x17:>0`8sluojfdnS~b`t^tj``iXg|~75;0>b:ujwmdhflUx`bzPvhffkZir|53<268k0{d}gbnlf[vjh|V|bhhaPotv?=;773qi=av6-3/wub73<:?0v}{fnn-ytpoig&id~h!labjf+fgd`lgna"C}al]QEH7Xagy~`lzj3278~usnff%q|xgao.alv`)dijbn#nolhdofi*KuidUYM@?Pioqvhdrb0:?0v}{fnn-ytpoig&id~h!labjf+fgd`lgna"C}al]QEH4Xagy~`lzj4278~usnff%q|xgao.alv`)dijbn#nolhdofi*KuidUYM@:80v}{fnn-ytpoig&id~h!labjf+qg`elg$Aob_SCN[lht}eki<=<;{rvmki(rybbb!losg,gdeom&~jk`kb/LpbiZTFEVcexbntd336d=}x|cec"tuhll+uthe&xda"C}al]QEH7Xagy~`lzj43c8~usnff%q|xgao.rqkh)ugd%F~lcPR@O2[lht}eki:=4zqwjjj)}x|cec"}{abi,wqgdc{kfW=S!suc`ohcjW`dxyao{e0306>|w}`dd#w~ziom,wqgdc&ymne}alY2Y+usijafi`Qfnrwoeqc6;:1q|xgao.xsqlhh'z~jof!|t`ahvdk\9T$xxlmdmdo\mkurdh~n====;{rvmki(rybbb!|t`ah+vrfkbxjaV|w}`dd#w~ziom,wqgdc&ymne}alY1Y+usijafi`Qfnrwoeqc>;;1q|xgao.xsqlhh'z~jof!|t`ahvdk\;T$xxlmdmdo\mkurdh~n?><4zqwjjj)}x|cec"}{abi,wqgdc{kfW>S!suc`ohcjW`dxyao{e9CDu42i>1KLu?6d;D96?7|[lo1;8o5185956500131>n?>dzl41=<63g=>5784$674>4d43tYno79:a;3:3?74;>23570:?>978881g47b3^:m84?:082>11asZon6:;n:0;4>454?1226?m>1d9'5g7=9;i0(<77:01;6>d61m0;6<89:25`>11asA;jj6*>ad82=a=]l=08w1?55+1`193=cn:6=4+18c93a65<#90k1;i>4n0;:>4=5<#90k1;i>4n0;:>6=5<#90k1;i>4n0;:>0=5<#90k1;i>4n0;:>2=5<#90k1;i>4n0;:><=5<#90k1;i>4n0;:>g=5<#90k1;i>4n0;:>a=6=4+18c93a65<#90k1;i>4n0;:>c=4;h:16?6=,83j6:j?;o3:=?7632c3><4?:%3:e?1c82d:544>2:9j<76=83.:5l48d19m56l3:1(<7n:6f3?k7>13;>76g71b83>!7>i3=o<6`>98822>=n08h1<7*>9`84`5=i9031=:54i93b>5<#90k1;i>4n0;:>4><3`2:57>5$0;b>2b73g;257?6;:k;5=<72-;2m79k0:l2=<<6i21b4<950;&2=d<0l91e=4751c98m=71290/=4o57e28j4?>28i07d6>5;29 4?f2>n;7c?69;3g?>o?9=0;6)?6a;5g4>h6100:i65f80094?"61h04;h:24?6=,83j6:j?;o3:=?4632c3k:18'57k3:1(<7n:6f3?k7>138>76g70c83>!7>i3=o<6`>98812>=n09k1<7*>9`84`5=i9031>:54i92:>5<#90k1;i>4n0;:>7><3`2;;7>5$0;b>2b73g;257<6;:k;43<72-;2m79k0:l2=<<5i21b4=;50;&2=d<0l91e=4752c98m=63290/=4o57e28j4?>2;i07d6?3;29 4?f2>n;7c?69;0g?>o?8;0;6)?6a;5g4>h61009i65f81394?"61h0>4;h5eb?6=,83j6:j?;o3:=?5632c139>76g8f883>!7>i3=o<6`>98802>=n?o21<7*>9`84`5=i9031?:54i6d4>5<#90k1;i>4n0;:>6><3`=m:7>5$0;b>2b73g;257=6;:k4b0<72-;2m79k0:l2=<<4i21b;k:50;&2=d<0l91e=4753c98m2`4290/=4o57e28j4?>2:i07d9i1;29 4?f2>n;7c?69;1g?>o0n90;6)?6a;5g4>h61008i65f7dd94?"61h0on6=4+18c93a64;h5f`?6=,83j6:j?;o3:=?2632c13>>76g8e983>!7>i3=o<6`>98872>=n?l<1<7*>9`84`5=i90318:54i6g6>5<#90k1;i>4n0;:>1><3`=n87>5$0;b>2b73g;257:6;:k4a6<72-;2m79k0:l2=<<3i21b;h<50;&2=d<0l91e=4754c98m2c6290/=4o57e28j4?>2=i07d9j0;29 4?f2>n;7c?69;6g?>o0lo0;6)?6a;5g4>h6100?i65f7eg94?"61h0no6=4+18c93a64;h5gf?6=,83j6:j?;o3:=?3632c13?>76g8d783>!7>i3=o<6`>98862>=n?m?1<7*>9`84`5=i90319:54i6f7>5<#90k1;i>4n0;:>0><3`=o?7>5$0;b>2b73g;257;6;:k4`7<72-;2m79k0:l2=<<2i21b4>:50;&2=d<0l91e=4755c98m=4>290/=4o57e28j4?>2e;29 4?f2>n;7c?69;7g?>o?9:0;6)?6a;5g4>h6100>i65f81:94?"61h0lo6=4+18c93a64;h5e6?6=,83j6:j?;o3:=?0632c:10e:mi:18'5;:18'52810c48::18'52:10c48<:18'52<10c48>:18'52>10c4;i:18'52010c4;k:18'52k10c4;n:18'5290/=4o59118j4?>2m10c4;7:18'52o10c4;9:18'513;:76a65583>!7>i33;?6`>98826>=h1<91<7*>9`8:46=i9031=>54o871>5<#90k15==4n0;:>42<3f3><7>5$0;b><643g;257?:;:m:0c<72-;2m77?3:l2=<<6>21d59k50;&2=d<>8:1e=4751698k<2c290/=4o59118j4?>28207b7;c;29 4?f20:87c?69;3:?>i>h6100:m65`95c94?"61h02<>5a18;95g=26=4+18c9=55<;o3:=?7c32e28:4?:%3:e??7;2d:544>e:9l=13=83.:5l46029m5138:76a64383>!7>i33;?6`>98816>=h1=;1<7*>9`8:46=i9031>>54o863>5<#90k15==4n0;:>72<3f38j7>5$0;b><643g;257<:;:m:7`<72-;2m77?3:l2=<<5>21d5>j50;&2=d<>8:1e=4752698k<5d290/=4o59118j4?>2;207b7i>;00;6)?6a;;37>h61009m65`92:94?"61h02<>5a18;96g=<;o3:=?4c32e2?84?:%3:e??7;2d:544=e:9l=62=83.:5l46029m5139:76a63083>!7>i33;?6`>98806>=h1;l1<7*>9`8:46=i9031?>54o80f>5<#90k15==4n0;:>62<3f39h7>5$0;b><643g;257=:;:m:6f<72-;2m77?3:l2=<<4>21d5?l50;&2=d<>8:1e=4753698k<4f290/=4o59118j4?>2:207b7=9;29 4?f20:87c?69;1:?>i>:10;6)?6a;;37>h61008m65`93594?"61h02<>5a18;97g=m4;n;10?6=,83j64><;o3:=?5c32e2>>4?:%3:e??7;2d:544:18'513>:76a61g83>!7>i33;?6`>98876>=h18o1<7*>9`8:46=i90318>54o83g>5<#90k15==4n0;:>12<3f3:o7>5$0;b><643g;257::;:m:5g<72-;2m77?3:l2=<<3>21d5<750;&2=d<>8:1e=4754698k<7?290/=4o59118j4?>2=207b7>7;29 4?f20:87c?69;6:?>i>9?0;6)?6a;;37>h6100?m65`90794?"61h02<>5a18;90g=<;o3:=?2c32e2=?4?:%3:e??7;2d:544;e:9l=47=83.:5l46029m513?:76a60e83>!7>i33;?6`>98866>=h19i1<7*>9`8:46=i90319>54o82a>5<#90k15==4n0;:>02<3f3;m7>5$0;b><643g;257;:;:m:4<<72-;2m77?3:l2=<<2>21d5=650;&2=d<>8:1e=4755698k<60290/=4o59118j4?>2<207b7?6;29 4?f20:87c?69;7:?>i>8<0;6)?6a;;37>h6100>m65`97594?"61h02<>5a18;91g=<;o3:=?3c32e28;4?:%3:e??7;2d:544:e:9l=6d=83.:5l46029m513<:76a61`83>!7>i33;?6`>98856>=h19l1<7*>9`8:46=i9031:>54o821>5<#90k15==4n0;:>32<3"2857>5$0;b>=5?3g;257>4;*::f?6=,83j65=7;o3:=?7<3"22m7>5$0;b>=5?3g;257<4;*::=?6=,83j65=7;o3:=?5<3"2247>5$0;b>=5?3g;257:4;*::3?6=,83j65=7;o3:=?3<3"22:7>5$0;b>=5?3g;25784;*::1?6=,83j65=7;o3:=?1<3"2287>5$0;b>=5?3g;25764;*::7?6=,83j65=7;o3:=??<3"22>7>5$0;b>=5?3g;257o4;*::4?6=,83j65=7;o3:=?d<3"23j7>5$0;b>=5?3g;257m4;*:;a?6=,83j65=7;o3:=?b<3"23h7>5$0;b>=5?3g;257k4;*:;g?6=,83j65=7;o3:=?`<3"23n7>5$0;b>=5?3g;257??;:);?290/=4o582:8j4?>28907&677;29 4?f21937c?69;37?>-?0<0;6)?6a;:0<>h6100:965$89694?"61h03?55a18;953=<#1286=4+18c9<6>402d:544>9:9(<=6=83.:5l47399m50m3:1(<7n:91;?k7>13;h76%77e83>!7>i32846`>9882`>=,0>i1<7*>9`8;7==i9031=h54+95b>5<#90k14>64n0;:>4`<3"2<57>5$0;b>=5?3g;2572;907&685;29 4?f21937c?69;07?>-??=0;6)?6a;:0<>h61009965$86194?"61h03?55a18;963=<#1=96=4+18c9<6>402d:544=9:9(<3c=83.:5l47399m51k3:1(<7n:91;?k7>138h76%76c83>!7>i32846`>9881`>=,0?k1<7*>9`8;7==i9031>h54+94:>5<#90k14>64n0;:>7`<3"2=47>5$0;b>=5?3g;257=?;:);22<72-;2m76<8:l2=<<4921 4;850;&2=d2:907&693;29 4?f21937c?69;17?>-?>;0;6)?6a;:0<>h61008965$87394?"61h03?55a18;973=<#1<;6=4+18c9<6>94;*:6b?6=,83j65=7;o3:=?5?32!39h4?:%3:e?>402d:544<9:9(<0b=83.:5l47399m52j3:1(<7n:91;?k7>139h76%75883>!7>i32846`>9880`>=,0<21<7*>9`8;7==i9031?h54+974>5<#90k14>64n0;:>6`<3"2>:7>5$0;b>=5?3g;257:?;:);10<72-;2m76<8:l2=<<3921 48:50;&2=d2=907&6:2;29 4?f21937c?69;67?>-?=80;6)?6a;:0<>h6100?965$84294?"61h03?55a18;903=<#1>n6=4+18c9<6>402d:544;9:9(<1d=83.:5l47399m5313:1(<7n:91;?k7>13>h76%74983>!7>i32846`>9887`>=,0==1<7*>9`8;7==i90318h54+965>5<#90k14>64n0;:>1`<3"2?97>5$0;b>=5?3g;257;?;:);06<72-;2m76<8:l2=<<2921 49<50;&2=d2<907&6;0;29 4?f21937c?69;77?>-?;o0;6)?6a;:0<>h6100>965$82g94?"61h03?55a18;913=<#19o6=4+18c9<6>402d:544:9:9(<6g=83.:5l47399m5>93:1(<7n:91;?k7>13?h76%78783>!7>i32846`>9886`>=,0>h1<7*>9`8;7==i90319h54+953>5<#90k14>64n0;:>0`<3"2=97>5$0;b>=5?3g;2578?;:);1d<72-;2m76<8:l2=<<1921 49h50;&2=d2?907&6<7;29 4?f21937c?69;47?>i2n3:17&87:188/3g=831 4=4?::):0?6=3"kj6=44+b294?=,kh0;66%lc;29?.eb2900'i>50;9(2g<722!=h7>5;*4e>5<<#>;1<75$7283>>-0=3:17&98:188/2?=831 ;o4?::)4`?6=3"2:6=44+9194?=,0<0;66%77;29?.>>2900'5l50;9(5;*;2>5<<#0?1<75$9683>>->13:17&7m:188/0;66%nb;29?.gc2900'lh50;9(f4<722!i?7>5;*`6>5<<#k=1<75$b883>>-ej3:17&lk:188/f7=831 o>4?::)`1?6=3"i<6=44b676>5<6290;w)?ne;32f>N0=:1C=lh4o03b>5<:7>51;294~"6il0:n=5G7418L4ga3f;2:7>5;|`5=2<72:0;6=u+1`g9bc=O?<90D94?;hf6>5<5=nl<0;66gjf;29?j7>n3:17pl99583>6<729q/=lk5fg9K305<@8km7)?65;`2=>"6:=0;7dj::188m``=831d=4h50;9~f3?229086=4?{%3ba?`a3A=>?6F>ag9'5<3=j830(<<;:19j`0<722cnj7>5;n3:b?6=3th9944?:383>5}#9ho1=?;4H670?M7fn2c:=n4?::m2=4<722wi>o;50;:94?6|,8kn6<7;;I567>N6io1/=4;5b0;8 c4=90:0(<<;:19'5dg=>81bj=4?::ke5?6=3`n=6=44ie594?=nl10;66g>a183>>o6i;0;66a>9g83>>{e:k>1<7650;2x 4gb283?7E9:3:J2ec=#90?1n<74$g095<6<,88?6=5+1`c924=nn90;66gi1;29?lb12900ei950;9j`=<722c:m=4?::k2e7<722e:5k4?::a6a1=8321<7>t$0cf>4?33A=>?6F>ag9'5<3=j830(k<51828 443291/=lo5609jb5<722cm=7>5;hf5>5<>o6i90;66g>a383>>i61o0;66sm2e494?>=83:p(4$007>5=#9hk1:<5ff183>>oa93:17dj9:188ma1=831bh54?::k2e5<722c:m?4?::m2=c<722wi>i;50;:94?6|,8kn6<7;;I567>N6io1/=4;5b0;8 c4=90:0(<<;:19'5dg=>81bj=4?::ke5?6=3`n=6=44ie594?=nl10;66g>a183>>o6i;0;66a>9g83>>{e:m>1<7650;2x 4gb283?7E9:3:J2ec=#90?1n<74$g095<6<,88?6=5+1`c924=nn90;66gi1;29?lb12900ei950;9j`=<722c:m=4?::k2e7<722e:5k4?::a6a5=8321<7>t$0cf>4?33A=>?6F>ag9'5<3=j830(k<51828 443291/=lo5609jb5<722cm=7>5;hf5>5<>o6i90;66g>a383>>i61o0;66sm2e094?>=83:p(4$007>5=#9hk1:<5ff183>>oa93:17dj9:188ma1=831bh54?::k2e5<722c:m?4?::m2=c<722wi>i?50;:94?6|,8kn6<7;;I567>N6io1/=4;5b0;8 c4=90:0(<<;:19'5dg=>81bj=4?::ke5?6=3`n=6=44ie594?=nl10;66g>a183>>o6i;0;66a>9g83>>{e:m:1<7650;2x 4gb283?7E9:3:J2ec=#90?1n<74$g095<6<,88?6=5+1`c924=nn90;66gi1;29?lb12900ei950;9j`=<722c:m=4?::k2e7<722e:5k4?::a6f`=8321<7>t$0cf>4?33A=>?6F>ag9'5<3=j830(k<51828 443291/=lo5609jb5<722cm=7>5;hf5>5<>o6i90;66g>a383>>i61o0;66sm2bg94?>=83:p(4$007>5=#9hk1:<5ff183>>oa93:17dj9:188ma1=831bh54?::k2e5<722c:m?4?::m2=c<722wi>nj50;:94?6|,8kn6<7;;I567>N6io1/=4;5b0;8 c4=90:0(<<;:19'5dg=>81bj=4?::ke5?6=3`n=6=44ie594?=nl10;66g>a183>>o6i;0;66a>9g83>>{e:ml1<7650;2x 4gb283?7E9:3:J2ec=#90?1n<74$g095<6<,88?6=5+1`c924=nn90;66gi1;29?lb12900ei950;9j`=<722c:m=4?::k2e7<722e:5k4?::a6ac=8321<7>t$0cf>4?33A=>?6F>ag9'5<3=j830(k<51828 443291/=lo5609jb5<722cm=7>5;hf5>5<>o6i90;66g>a383>>i61o0;66sm2ef94?>=83:p(4$007>5=#9hk1:<5ff183>>oa93:17dj9:188ma1=831bh54?::k2e5<722c:m?4?::m2=c<722wi>im50;:94?6|,8kn6<7;;I567>N6io1/=4;5b0;8 c4=90:0(<<;:19'5dg=>81bj=4?::ke5?6=3`n=6=44ie594?=nl10;66g>a183>>o6i;0;66a>9g83>>{e:mh1<7650;2x 4gb283?7E9:3:J2ec=#90?1n<74$g095<6<,88?6=5+1`c924=nn90;66gi1;29?lb12900ei950;9j`=<722c:m=4?::k2e7<722e:5k4?::a6ag=8321<7>t$0cf>4?33A=>?6F>ag9'5<3=j830(k<51828 443291/=lo5609jb5<722cm=7>5;hf5>5<>o6i90;66g>a383>>i61o0;66sm2e;94?>=83:p(4$007>5=#9hk1:<5ff183>>oa93:17dj9:188ma1=831bh54?::k2e5<722c:m?4?::m2=c<722wi>i650;:94?6|,8kn6<7;;I567>N6io1/=4;5b0;8 c4=90:0(<<;:19'5dg=>81bj=4?::ke5?6=3`n=6=44ie594?=nl10;66g>a183>>o6i;0;66a>9g83>>{e:1k1<7650;2x 4gb283?7E9:3:J2ec=#90?1n<74$g095<6<,88?6<:4$0cb>37>oc>3:17dj8:188ma>=831b=l>50;9j5d4=831d=4h50;9~f623290?6=4?{%3ba?77:2B<9>5G1`d8 443291bh84?::kfb?6=3`;j<7>5;n3:b?6=3th88:4?:583>5}#9ho1==<4H670?M7fn2.:>94?;hf6>5<5<3290;w)?ne;335>N0=:1C=lh4ie794?=nl10;66gjf;29?j7>n3:17pl<8483>1<729q/=lk51138L2343A;jj6gk5;29?lb?2900ehh50;9l5<`=831vn>6<:187>5<7s-;ji7??1:J416=O9hl0ei;50;9j`=<722cnj7>5;n3:b?6=3th84?4?:583>5}#9ho1==?4H670?M7fn2co97>5;hf;>5<>obn3:17b?6f;29?xd4090;694?:1y'5dc=99;0D:;<;I3bb>oc=3:17dj7:188m``=831d=4h50;9~f61a290?6=4?{%3ba?7792B<9>5G1`d8ma3=831bh54?::kfb?6=3f;2j7>5;|`03`<72=0;6=u+1`g9557<@>?87E?nf:kg1?6=3`n36=44idd94?=h90l1<75rb25g>5<3290;w)?ne;335>N0=:1C=lh4ie794?=nl10;66gjf;29?j7>n3:17pl<7b83>1<729q/=lk51138L2343A;jj6gk5;29?lb?2900ehh50;9l5<`=831vn>9m:187>5<7s-;ji7??1:J416=O9hl0ei;50;9j`=<722cnj7>5;n3:b?6=3th8;l4?:583>5}#9ho1==?4H670?M7fn2co97>5;hf;>5<>obn3:17b?6f;29?xd4?>0;694?:1y'5dc=99;0D:;<;I3bb>oc=3:17dj7:188m``=831d=4h50;9~f611290?6=4?{%3ba?7792B<9>5G1`d8ma3=831bh54?::kfb?6=3f;2j7>5;|`030<72=0;6=u+1`g9557<@>?87E?nf:kg1?6=3`n36=44idd94?=h90l1<75rb257>5<3290;w)?ne;335>N0=:1C=lh4ie794?=nl10;66gjf;29?j7>n3:17pl<7283>1<729q/=lk51138L2343A;jj6gk5;29?lb?2900ehh50;9l5<`=831vn>9=:187>5<7s-;ji7??1:J416=O9hl0ei;50;9j`=<722cnj7>5;n3:b?6=3th8;<4?:583>5}#9ho1==?4H670?M7fn2co97>5;hf;>5<>obn3:17b?6f;29?xd4>o0;694?:1y'5dc=99;0D:;<;I3bb>oc=3:17dj7:188m``=831d=4h50;9~f6>d290?6=4?{%3ba?7792B<9>5G1`d8ma3=831bh54?::kfb?6=3f;2j7>5;|`0?87E?nf:kg1?6=3`n36=44idd94?=h90l1<75rb2:b>5<3290;w)?ne;335>N0=:1C=lh4ie794?=nl10;66gjf;29?j7>n3:17pl<8883>1<729q/=lk51138L2343A;jj6gk5;29?lb?2900ehh50;9l5<`=831vn>67:187>5<7s-;ji7??1:J416=O9hl0ei;50;9j`=<722cnj7>5;n3:b?6=3th84:4?:583>5}#9ho1==?4H670?M7fn2co97>5;hf;>5<>obn3:17b?6f;29?xd4?00;694?:1y'5dc=99;0D:;<;I3bb>oc=3:17dj7:188m``=831d=4h50;9~f60b290?6=4?{%3ba?7792B<9>5G1`d8ma3=831bh54?::kfb?6=3f;2j7>5;|`02a<72=0;6=u+1`g9557<@>?87E?nf:kg1?6=3`n36=44idd94?=h90l1<75rb203>5<4290;w)?ne;332>N0=:1C=lh4ie794?=nmo0;66a>9g83>>{e;8l1<7=50;2x 4gb28:=7E9:3:J2ec=nl<0;66gjf;29?j7>n3:17pl<1e83>6<729q/=lk51148L2343A;jj6gk5;29?lca2900c<7i:188yg56k3:1?7>50z&2e`<68?1C;8=4H0ce?lb22900ehh50;9l5<`=831vn>?m:180>5<7s-;ji7??6:J416=O9hl0ei;50;9jac<722e:5k4?::a74g=8391<7>t$0cf>4613A=>?6F>ag9j`0<722cnj7>5;n3:b?6=3th8=44?:283>5}#9ho1==84H670?M7fn2co97>5;hge>5<ad8243=O?<90D5<>i61o0;66sm30494?5=83:p(>obn3:17b?6f;29?xd49<0;6>4?:1y'5dc=99<0D:;<;I3bb>oc=3:17dki:188k4?a2900qo=>4;297?6=8r.:mh4>079K305<@8km7dj::188m``=831d=4h50;9~f67529086=4?{%3ba?77>2B<9>5G1`d8ma3=831bik4?::m2=c<722wi?9;I567>N6io1bh84?::kfb?6=3f;2j7>5;|`055<72:0;6=u+1`g9550<@>?87E?nf:kg1?6=3`om6=44o0;e>5<53;294~"6il0:<;5G7418L4ga3`n>6=44idd94?=h90l1<75rb22f>5<4290;w)?ne;332>N0=:1C=lh4ie794?=nmo0;66a>9g83>>{e;9n1<7=50;2x 4gb28:=7E9:3:J2ec=nl<0;66gjf;29?j7>n3:17pl<0b83>6<729q/=lk51148L2343A;jj6gk5;29?lca2900c<7i:188yg57j3:1?7>50z&2e`<68?1C;8=4H0ce?lb22900ehh50;9l5<`=831vn>>n:180>5<7s-;ji7??6:J416=O9hl0ei;50;9jac<722e:5k4?::a75?=8391<7>t$0cf>4613A=>?6F>ag9j`0<722cnj7>5;n3:b?6=3th8>;4?:283>5}#9ho1==84H670?M7fn2co97>5;hge>5<ad8243=O?<90D5<>i61o0;66sm33194?5=83:p(>obn3:17b?6f;29?xd4:;0;6>4?:1y'5dc=99<0D:;<;I3bb>oc=3:17dki:188k4?a2900qo==1;297?6=8r.:mh4>079K305<@8km7dj::188m``=831d=4h50;9~f67b29086=4?{%3ba?77>2B<9>5G1`d8ma3=831bik4?::m2=c<722wi?<=50;194?6|,8kn6<>9;I567>N6io1bh84?::kfb?6=3f;2j7>5;|`04=<72:0;6=u+1`g9550<@>?87E?nf:kg1?6=3`om6=44o0;e>5<53;294~"6il0:<;5G7418L4ga3`n>6=44idd94?=h90l1<75rb3a:>5<4290;w)?ne;de?M12;2B:mk5fd483>>obn3:17b?6f;29?xd4;>0;6>4?:1y'5dc=no1C;8=4H0ce?!75?3;:56*>25820>oc=3:17dki:188k4?a2900qo=<6;297?6=8r.:mh4if:J416=O9hl0(<<8:03:?lb22900ehh50;9l5<`=831vn>=::180>5<7s-;ji7hi;I567>N6io1/=?9510;8ma3=831bik4?::m2=c<722wi?>:50;194?6|,8kn6kh4H670?M7fn2.:>:4>189j`0<722cnj7>5;n3:b?6=3th8?>4?:283>5}#9ho1jk5G7418L4ga3-;9;7?>9:kg1?6=3`om6=44o0;e>5<7>53;294~"6il0mj6F8529K5d`<,88<65<9g83>>{e;::1<7=50;2x 4gb2ol0D:;<;I3bb>"6:>0:=45fd483>>obn3:17b?6f;29?xd4:o0;6>4?:1y'5dc=no1C;8=4H0ce?!75?3;:56gk5;29?lca2900c<7i:188yg53k3:187>50z&2e`<68;1C;8=4H0ce?lb22900ehh50;9j5d6=831d=4h50;9~f7>c290?6=4?{%3ba?77:2B<9>5G1`d8ma3=831bik4?::k2e5<722e:5k4?::a7=`=83>1<7>t$0cf>4663A=>?6F>ag9j`0<722co47>5;hge>5<ad8241=O?<90D94>4:kg1?6=3`om6=44i0c1>5<ad8244=O?<90D5<>i61o0;66sm2d694?2=83:p(>oc03:17dki:188k4?a2900qo009K305<@8km7dj::188ma>=831bik4?::m2=c<722wi>lm50;694?6|,8kn6<>>;I567>N6io1bh84?::kg5<54;294~"6il0:<<5G7418L4ga3`n>6=44ie:94?=nmo0;66a>9g83>>{e:h31<7:50;2x 4gb28::7E9:3:J2ec=nl<0;66gk8;29?lca2900c<7i:188yg4f03:187>50z&2e`<6881C;8=4H0ce?lb22900ei650;9jac<722e:5k4?::a6d1=83>1<7>t$0cf>4663A=>?6F>ag9j`0<722co47>5;hge>5<ad8244=O?<90D5<>i61o0;66sm2`794?2=83:p(>oc03:17dki:188k4?a2900qo009K305<@8km7dj::188ma>=831bik4?::m2=c<722wi>l=50;694?6|,8kn6<>>;I567>N6io1bh84?::kg5<7>54;294~"6il0:<<5G7418L4ga3`n>6=44ie:94?=nmo0;66a>9g83>>{e:h;1<7:50;2x 4gb28::7E9:3:J2ec=nl<0;66gk8;29?lca2900c<7i:188yg4e;3:187>50z&2e`<6881C;8=4H0ce?lb22900ei650;9jac<722e:5k4?::a6g4=83>1<7>t$0cf>4663A=>?6F>ag9j`0<722co47>5;hge>5<ad8244=O?<90D5<>i61o0;66sm2c294?2=83:p(>oc03:17dki:188k4?a2900qo009K305<@8km7dj::188ma>=831bik4?::m2=c<722wi>lk50;694?6|,8kn6<>>;I567>N6io1bh84?::kg5<54;294~"6il0:<<5G7418L4ga3`n>6=44ie:94?=nmo0;66a>9g83>>{e:hh1<7:50;2x 4gb28::7E9:3:J2ec=nl<0;66gk8;29?lca2900c<7i:188yg42>3:1?7>50z&2e`5G1`d8 4?22k;27)?=4;28ma3=831bik4?::m2=c<722wi>8950;194?6|,8kn6kh4H670?M7fn2.:584m189'572=82co97>5;hge>5<ad8eb>N0=:1C=lh4$0;6>g7>3-;987>4ie794?=nmo0;66a>9g83>>{e:<>1<7=50;2x 4gb2ol0D:;<;I3bb>"61<0i=45+13694>oc=3:17dki:188k4?a2900qo<:0;297?6=8r.:mh4if:J416=O9hl0(<7::c3:?!75<3:0ei;50;9jac<722e:5k4?::a607=8391<7>t$0cf>c`<@>?87E?nf:&2=05<53;294~"6il0mj6F8529K5d`<,83>6o?6;%310?6>i61o0;66sm25g94?5=83:p(948a5<=#9;>1<6gk5;29?lca2900c<7i:188yg43i3:1?7>50z&2e`5G1`d8 4?22k;27)?=4;28ma3=831bik4?::m2=c<722wi>9l50;194?6|,8kn6kh4H670?M7fn2.:584m189'572=82co97>5;hge>5<ad8eb>N0=:1C=lh4$0;6>g7>3-;987>4ie794?=nmo0;66a>9g83>>{e:=21<7=50;2x 4gb2ol0D:;<;I3bb>"61<0i=45+13694>oc=3:17dki:188k4?a2900qo<;4;297?6=8r.:mh4if:J416=O9hl0(<7::c3:?!75<3:0ei;50;9jac<722e:5k4?::a613=8391<7>t$0cf>c`<@>?87E?nf:&2=05<53;294~"6il0mj6F8529K5d`<,83>6o?6;%310?6>i61o0;66sm25094?5=83:p(948a5<=#9;>1<6gk5;29?lca2900c<7i:188yg44m3:1?7>50z&2e`5G1`d8 4?22k;27)?=4;28ma3=831bik4?::m2=c<722wi>>h50;194?6|,8kn6kh4H670?M7fn2.:584m189'572=82co97>5;hge>5<ad8eb>N0=:1C=lh4$0;6>g7>3-;987>4ie794?=nmo0;66a>9g83>>{e::i1<7=50;2x 4gb2ol0D:;<;I3bb>"61<0i=45+13694>oc=3:17dki:188k4?a2900qo<<8;297?6=8r.:mh4if:J416=O9hl0(<7::c3:?!75<3:0ei;50;9jac<722e:5k4?::a66?=8391<7>t$0cf>c`<@>?87E?nf:&2=05<53;294~"6il0mj6F8529K5d`<,83>6o?6;%310?6>i61o0;66sm22494?5=83:p(948a5<=#9;>1<6gk5;29?lca2900c<7i:188yg44:3:1?7>50z&2e`5G1`d8 4?22k;27)?=4;28ma3=831bik4?::m2=c<722wi>>=50;194?6|,8kn6kh4H670?M7fn2.:584m189'572=82co97>5;hge>5<ad8eb>N0=:1C=lh4$0;6>g7>3-;987>4ie794?=nmo0;66a>9g83>>{e:::1<7=50;2x 4gb2ol0D:;<;I3bb>"61<0i=45+13694>oc=3:17dki:188k4?a2900qo<=c;297?6=8r.:mh4if:J416=O9hl0(<7::c3:?!75<3:0ei;50;9jac<722e:5k4?::a67b=8391<7>t$0cf>c`<@>?87E?nf:&2=05<53;294~"6il0mj6F8529K5d`<,83>6o?6;%310?6>i61o0;66sm23c94?5=83:p(948a5<=#9;>1<6gk5;29?lca2900c<7i:188yg45>3:1?7>50z&2e`5G1`d8 4?22k;27)?=4;28ma3=831bik4?::m2=c<722wi>?950;194?6|,8kn6kh4H670?M7fn2.:584m189'572=82co97>5;hge>5<ad8eb>N0=:1C=lh4$0;6>g7>3-;987>4ie794?=nmo0;66a>9g83>>{e:;>1<7=50;2x 4gb2ol0D:;<;I3bb>"61<0i=45+13694>oc=3:17dki:188k4?a2900qo<=0;297?6=8r.:mh4if:J416=O9hl0(<7::c3:?!75<3:0ei;50;9jac<722e:5k4?::a677=8391<7>t$0cf>c`<@>?87E?nf:&2=05<53;294~"6il0mj6F8529K5d`<,83>6o?6;%310?6>i61o0;66sm20g94?5=83:p(948a5<=#9;>1<6gk5;29?lca2900c<7i:188yg46i3:1?7>50z&2e`5G1`d8 4?22k;27)?=4;28ma3=831bik4?::m2=c<722wi>5;hge>5<ad8eb>N0=:1C=lh4$0;6>g7>3-;987>4ie794?=nmo0;66a>9g83>>{e:821<7=50;2x 4gb2ol0D:;<;I3bb>"61<0i=45+13694>oc=3:17dki:188k4?a2900qo<>4;297?6=8r.:mh4if:J416=O9hl0(<7::c3:?!75<3:0ei;50;9jac<722e:5k4?::a643=8391<7>t$0cf>c`<@>?87E?nf:&2=05<53;294~"6il0mj6F8529K5d`<,83>6o?6;%310?6>i61o0;66sm20094?5=83:p(948a5<=#9;>1<6gk5;29?lca2900c<7i:188yg47m3:1?7>50z&2e`5G1`d8 4?22k;27)?=4;28ma3=831bik4?::m2=c<722wi>=h50;194?6|,8kn6kh4H670?M7fn2.:584m189'572=82co97>5;hge>5<ad8eb>N0=:1C=lh4$0;6>g7>3-;987>4ie794?=nmo0;66a>9g83>>{e:9i1<7=50;2x 4gb2ol0D:;<;I3bb>"61<0i=45+13694>oc=3:17dki:188k4?a2900qot$0cf>c`<@>?87E?nf:&2=05<53;294~"6il0mj6F8529K5d`<,83>6o?6;%310?6>i61o0;66sm21494?5=83:p(948a5<=#9;>1<6gk5;29?lca2900c<7i:188yg47:3:1?7>50z&2e`5G1`d8 4?22k;27)?=4;28ma3=831bik4?::m2=c<722wi>==50;194?6|,8kn6kh4H670?M7fn2.:584m189'572=82co97>5;hge>5<ad8eb>N0=:1C=lh4$0;6>g7>3-;987>4ie794?=nmo0;66a>9g83>>{e:9:1<7=50;2x 4gb2ol0D:;<;I3bb>"61<0i=45+13694>oc=3:17dki:188k4?a2900qo?ic;297?6=8r.:mh4if:J416=O9hl0(<7::c3:?!75<3:0ei;50;9jac<722e:5k4?::a5cb=8391<7>t$0cf>c`<@>?87E?nf:&2=05<53;294~"6il0mj6F8529K5d`<,83>6o?6;%310?6>i61o0;66sm1gc94?5=83:p(948a5<=#9;>1<6gk5;29?lca2900c<7i:188yg7a>3:1?7>50z&2e`5G1`d8 4?22k;27)?=4;28ma3=831bik4?::m2=c<722wi=k950;194?6|,8kn6kh4H670?M7fn2.:584m189'572=82co97>5;hge>5<ad8eb>N0=:1C=lh4$0;6>g7>3-;987>4ie794?=nmo0;66a>9g83>>{e9o>1<7=50;2x 4gb2ol0D:;<;I3bb>"61<0i=45+13694>oc=3:17dki:188k4?a2900qo?i0;297?6=8r.:mh4if:J416=O9hl0(<7::c3:?!75<3:0ei;50;9jac<722e:5k4?::a5c7=8391<7>t$0cf>c`<@>?87E?nf:&2=05<53;294~"6il0mj6F8529K5d`<,83>6o?6;%310?6>i61o0;66sm1dg94?5=83:p(948a5<=#9;>1<6gk5;29?lca2900c<7i:188yg7bi3:1?7>50z&2e`5G1`d8 4?22k;27)?=4;28ma3=831bik4?::m2=c<722wi=hl50;194?6|,8kn6kh4H670?M7fn2.:584m189'572=82co97>5;hge>5<ad8eb>N0=:1C=lh4$0;6>g7>3-;987>4ie794?=nmo0;66a>9g83>>{e9l21<7=50;2x 4gb2ol0D:;<;I3bb>"61<0i=45+13694>oc=3:17dki:188k4?a2900qo?j4;297?6=8r.:mh4if:J416=O9hl0(<7::c3:?!75<3:0ei;50;9jac<722e:5k4?::a5`3=8391<7>t$0cf>c`<@>?87E?nf:&2=05<53;294~"6il0mj6F8529K5d`<,83>6o?6;%310?6>i61o0;66sm1d094?5=83:p(948a5<=#9;>1<6gk5;29?lca2900c<7i:188yg7cm3:1?7>50z&2e`5G1`d8 4?22k;27)?=4;28ma3=831bik4?::m2=c<722wi=ih50;194?6|,8kn6kh4H670?M7fn2.:584m189'572=82co97>5;hge>5<ad8eb>N0=:1C=lh4$0;6>g7>3-;987>4ie794?=nmo0;66a>9g83>>{e9mi1<7=50;2x 4gb2ol0D:;<;I3bb>"61<0i=45+13694>oc=3:17dki:188k4?a2900qo?k8;297?6=8r.:mh4if:J416=O9hl0(<7::c3:?!75<3:0ei;50;9jac<722e:5k4?::a5a?=8391<7>t$0cf>c`<@>?87E?nf:&2=05<53;294~"6il0mj6F8529K5d`<,83>6o?6;%310?6>i61o0;66sm1e494?5=83:p(948a5<=#9;>1<6gk5;29?lca2900c<7i:188yg7c:3:1?7>50z&2e`5G1`d8 4?22k;27)?=4;28ma3=831bik4?::m2=c<722wi=i=50;194?6|,8kn6kh4H670?M7fn2.:584m189'572=82co97>5;hge>5<ad8eb>N0=:1C=lh4$0;6>g7>3-;987>4ie794?=nmo0;66a>9g83>>{e9m:1<7=50;2x 4gb2ol0D:;<;I3bb>"61<0i=45+13694>oc=3:17dki:188k4?a2900qo?lc;297?6=8r.:mh4if:J416=O9hl0(<7::c3:?!75<3:0ei;50;9jac<722e:5k4?::a5fb=8391<7>t$0cf>c`<@>?87E?nf:&2=05<53;294~"6il0mj6F8529K5d`<,83>6o?6;%310?6>i61o0;66sm1bc94?5=83:p(948a5<=#9;>1<6gk5;29?lca2900c<7i:188yg7d>3:1?7>50z&2e`5G1`d8 4?22k;27)?=4;28ma3=831bik4?::m2=c<722wi=n950;194?6|,8kn6kh4H670?M7fn2.:584m189'572=82co97>5;hge>5<ad8eb>N0=:1C=lh4$0;6>g7>3-;987>4ie794?=nmo0;66a>9g83>>{e9j>1<7=50;2x 4gb2ol0D:;<;I3bb>"61<0i=45+13694>oc=3:17dki:188k4?a2900qo?l0;297?6=8r.:mh4if:J416=O9hl0(<7::c3:?!75<3:0ei;50;9jac<722e:5k4?::a5f7=8391<7>t$0cf>c`<@>?87E?nf:&2=05<53;294~"6il0mj6F8529K5d`<,83>6o?6;%310?6>i61o0;66sm1cg94?5=83:p(948a5<=#9;>1<6gk5;29?lca2900c<7i:188yg7ei3:1?7>50z&2e`5G1`d8 4?22k;27)?=4;28ma3=831bik4?::m2=c<722wi=ol50;194?6|,8kn6kh4H670?M7fn2.:584m189'572=82co97>5;hge>5<ad8eb>N0=:1C=lh4$0;6>g7>3-;987>4ie794?=nmo0;66a>9g83>>{e9k21<7=50;2x 4gb2ol0D:;<;I3bb>"61<0i=45+13694>oc=3:17dki:188k4?a2900qo861;297?6=8r.:mh4if:J416=O9hl0ei;50;9jac<722e:5k4?::a2<6=8391<7>t$0cf>c`<@>?87E?nf:kg1?6=3`om6=44o0;e>5<53;294~"6il0mj6F8529K5d`>i61o0;66sm69g94?5=83:p(50z&2e`5G1`d8ma3=831bik4?::m2=c<722wi:5m50;194?6|,8kn6kh4H670?M7fn2co97>5;hge>5<ad8eb>N0=:1C=lh4ie794?=nmo0;66a>9g83>>{e>1k1<7=50;2x 4gb2ol0D:;<;I3bb>oc=3:17dki:188k4?a2900qo896;290?6=8r.:mh4>039K305<@8km7dj::188m``=831b=l>50;9l5<`=831vn;;m:186>5<7s-;ji7??5:J416=O9hl0ei;50;9j`=<722cnj7>5;h3b6?6=3f;2j7>5;|`51d<72<0;6=u+1`g9553<@>?87E?nf:kg1?6=3`n36=44idd94?=n9h81<75`18d94?=zj??26=4::183!7fm3;;96F8529K5d`>obn3:17d?n2;29?j7>n3:17pl95983>0<729q/=lk51178L2343A;jj6gk5;29?lb?2900ehh50;9j5d4=831d=4h50;9~f330290>6=4?{%3ba?77=2B<9>5G1`d8ma3=831bh54?::kfb?6=3`;j>7>5;n3:b?6=3th=9;4?:483>5}#9ho1==;4H670?M7fn2co97>5;hf;>5<5<2290;w)?ne;331>N0=:1C=lh4ie794?=nl10;66gjf;29?l7f:3:17b?6f;29?xd1>;0;684?:1y'5dc=99?0D:;<;I3bb>oc=3:17dj7:188m``=831b=l<50;9l5<`=831vn;8>:186>5<7s-;ji7??5:J416=O9hl0ei;50;9j`=<722cnj7>5;h3b6?6=3f;2j7>5;|`525<72<0;6=u+1`g9553<@>?87E?nf:kg1?6=3`n36=44idd94?=n9h81<75`18d94?=zj??m6=4::183!7fm3;;96F8529K5d`>obn3:17d?n2;29?j7>n3:17pl95d83>0<729q/=lk51178L2343A;jj6gk5;29?lb?2900ehh50;9j5d4=831d=4h50;9~f33c290>6=4?{%3ba?77=2B<9>5G1`d8ma3=831bh54?::kfb?6=3`;j>7>5;n3:b?6=3th=9n4?:483>5}#9ho1==;4H670?M7fn2co97>5;hf;>5<5<2290;w)?ne;331>N0=:1C=lh4ie794?=nl10;66gjf;29?l7f:3:17b?6f;29?xd1==0;684?:1y'5dc=99?0D:;<;I3bb>oc=3:17dj7:188m``=831b=l<50;9l5<`=831vn;?<:186>5<7s-;ji7??3:J416=O9hl0ei;50;9j`=<722cnj7>5;h3b4?6=3f;2j7>5;|`557<72<0;6=u+1`g9555<@>?87E?nf:kg1?6=3`n36=44idd94?=n9h:1<75`18d94?=zj?;:6=4::183!7fm3;;?6F8529K5d`>obn3:17d?n0;29?j7>n3:17pl91183>0<729q/=lk51118L2343A;jj6gk5;29?lb?2900ehh50;9j5d6=831d=4h50;9~f36a290>6=4?{%3ba?77;2B<9>5G1`d8ma3=831bh54?::kfb?6=3`;j<7>5;n3:b?6=3th=5}#9ho1===4H670?M7fn2co97>5;hf;>5<5<2290;w)?ne;337>N0=:1C=lh4ie794?=nl10;66gjf;29?l7f83:17b?6f;29?xd18j0;684?:1y'5dc=9990D:;<;I3bb>oc=3:17dj7:188m``=831b=l>50;9l5<`=831vn;88:187>5<7s-;ji7??2:J416=O9hl0ei;50;9jac<722c:m=4?::m2=c<722wi?kh50;694?6|,8kn6<>=;I567>N6io1bh84?::kfb?6=3`;j<7>5;n3:b?6=3th=>;4?:283>5}#9ho1jk5G7418L4ga3`n>6=44idd94?=h90l1<75rb754>5<2290;w)?ne;337>N0=:1C=lh4ie794?=nl10;66gjf;29?l7f83:17b?6f;29?xd1??0;684?:1y'5dc=9990D:;<;I3bb>oc=3:17dj7:188m``=831b=l>50;9l5<`=831vn;9::186>5<7s-;ji7??3:J416=O9hl0ei;50;9j`=<722cnj7>5;h3b4?6=3f;2j7>5;|`531<72<0;6=u+1`g9555<@>?87E?nf:kg1?6=3`n36=44idd94?=n9h:1<75`18d94?=zj?=86=4::183!7fm3;;?6F8529K5d`>obn3:17d?n0;29?j7>n3:17pl97383>0<729q/=lk51118L2343A;jj6gk5;29?lb?2900ehh50;9j5d6=831d=4h50;9~f316290>6=4?{%3ba?77;2B<9>5G1`d8ma3=831bh54?::kfb?6=3`;j<7>5;n3:b?6=3th=;=4?:483>5}#9ho1===4H670?M7fn2co97>5;hf;>5<5<2290;w)?ne;337>N0=:1C=lh4ie794?=nl10;66gjf;29?l7f83:17b?6f;29?xd1:;0;684?:1y'5dc=9990D:;<;I3bb>oc=3:17dj7:188m``=831b=l>50;9l5<`=831vn;<>:186>5<7s-;ji7??3:J416=O9hl0ei;50;9j`=<722cnj7>5;h3b4?6=3f;2j7>5;|`565<72<0;6=u+1`g9555<@>?87E?nf:kg1?6=3`n36=44idd94?=n9h:1<75`18d94?=zj?;m6=4::183!7fm3;;?6F8529K5d`>obn3:17d?n0;29?j7>n3:17pl91d83>0<729q/=lk51118L2343A;jj6gk5;29?lb?2900ehh50;9j5d6=831d=4h50;9~f37c290>6=4?{%3ba?77;2B<9>5G1`d8ma3=831bh54?::kfb?6=3`;j<7>5;n3:b?6=3th==n4?:483>5}#9ho1===4H670?M7fn2co97>5;hf;>5<5<4290;w)?ne;566>N0=:1C=lh4ie;94?=n9;k1<75`18394?=zj=3o6=4<:183!7fm3=>>6F8529K5d`5<3290;w)?ne;307>N0=:1C=lh4ie;94?=nn=0;66g>a383>>i6180;66sm48a94?5=83:p(>o6:h0;66a>9083>>{e<<:1<7:50;2x 4gb28987E9:3:J2ec=nl00;66gi4;29?l7f:3:17b?61;29?xd31k0;6>4?:1y'5dc=?<80D:;<;I3bb>oc13:17d?=a;29?j7>93:17pl;4g83>1<729q/=lk51218L2343A;jj6gk9;29?l`32900e:188yg23m3:187>50z&2e`<6;:1C;8=4H0ce?lb>2900ek:50;9j5d4=831d=4?50;9~f1?>29086=4?{%3ba?12:2B<9>5G1`d8ma?=831b=?o50;9l5<7=831vn9:k:187>5<7s-;ji7?<3:J416=O9hl0ei750;9jb1<722c:m?4?::m2=4<722wi8l950;194?6|,8kn6:;=;I567>N6io1bh44?::k26d<722e:5<4?::a00g=83>1<7>t$0cf>4543A=>?6F>ag9j`<<722cm87>5;h3b6?6=3f;2=7>5;|`7e3<72:0;6=u+1`g9304<@>?87E?nf:kg=?6=3`;9m7>5;n3:5?6=3th?944?:583>5}#9ho1=>=4H670?M7fn2co57>5;hd7>5<5<j97>53;294~"6il0<9?5G7418L4ga3`n26=44i00b>5<ad8276=O?<90D5<1<75f1`094?=h90;1<75rb5c7>5<4290;w)?ne;566>N0=:1C=lh4ie;94?=n9;k1<75`18394?=zj=?<6=4;:183!7fm3;8?6F8529K5d`>o6i;0;66a>9083>>{e?97E9:3:J2ec=nl00;66g>2`83>>i6180;66sm44494?2=83:p(>oa<3:17d?n2;29?j7>93:17pl;a383>6<729q/=lk57408L2343A;jj6gk9;29?l75i3:17b?61;29?xd3=<0;694?:1y'5dc=9:90D:;<;I3bb>oc13:17dh;:188m4g52900c<7>:188yg2f93:1?7>50z&2e`<0=;1C;8=4H0ce?lb>2900e<329K305<@8km7dj6:188mc2=831b=l<50;9l5<7=831vn9o?:180>5<7s-;ji79:2:J416=O9hl0ei750;9j57g=831d=4?50;9~f134290?6=4?{%3ba?74;2B<9>5G1`d8ma?=831bj94?::k2e7<722e:5<4?::a0<`=8391<7>t$0cf>2353A=>?6F>ag9j`<<722c:>l4?::m2=4<722wi88<50;694?6|,8kn6<=<;I567>N6io1bh44?::ke0?6=3`;j>7>5;n3:5?6=3th?554?:283>5}#9ho1;8<4H670?M7fn2co57>5;h31e?6=3f;2=7>5;|`70g<72=0;6=u+1`g9565<@>?87E?nf:kg=?6=3`l?6=44i0c1>5<ad8417=O?<90D5<5<m47>53;294~"6il0<9?5G7418L4ga3`n26=44i00b>5<ad8276=O?<90D5<1<75f1`094?=h90;1<75rb5d4>5<4290;w)?ne;566>N0=:1C=lh4ie;94?=n9;k1<75`18394?=zj=n;6=4;:183!7fm3;8?6F8529K5d`>o6i;0;66a>9083>>{e?97E9:3:J2ec=nl00;66g>2`83>>i6180;66sm4bd94?2=83:p(>oa<3:17d?n2;29?j7>93:17pl:0383>6<729q/=lk57408L2343A;jj6gk9;29?l75i3:17b?61;29?xd3lh0;694?:1y'5dc=9:90D:;<;I3bb>oc13:17dh;:188m4g52900c<7>:188yg3793:1?7>50z&2e`<0=;1C;8=4H0ce?lb>2900e<329K305<@8km7dj6:188mc2=831b=l<50;9l5<7=831vn8>?:180>5<7s-;ji79:2:J416=O9hl0ei750;9j57g=831d=4?50;9~f1b?290?6=4?{%3ba?74;2B<9>5G1`d8ma?=831bj94?::k2e7<722e:5<4?::a0c`=8391<7>t$0cf>2353A=>?6F>ag9j`<<722c:>l4?::m2=4<722wi8i950;694?6|,8kn6<=<;I567>N6io1bh44?::ke0?6=3`;j>7>5;n3:5?6=3th?jh4?:283>5}#9ho1;8<4H670?M7fn2co57>5;h31e?6=3f;2=7>5;|`7`3<72=0;6=u+1`g9565<@>?87E?nf:kg=?6=3`l?6=44i0c1>5<ad8417=O?<90D5<5<o97>54;294~"6il0:?>5G7418L4ga3`n26=44ig694?=n9h81<75`18394?=zj=lh6=4<:183!7fm3=>>6F8529K5d`5<3290;w)?ne;307>N0=:1C=lh4ie;94?=nn=0;66g>a383>>i6180;66sm4g`94?5=83:p(>o6:h0;66a>9083>>{e4?:1y'5dc=?<80D:;<;I3bb>oc13:17d?=a;29?j7>93:17pl;d383>1<729q/=lk51218L2343A;jj6gk9;29?l`32900e:188yg2dl3:187>50z&2e`<6;:1C;8=4H0ce?lb>2900ek:50;9j5d4=831d=4?50;9~f62129086=4?{%3ba?75m2B<9>5G1`d8 4432<90(<7m:6c;?l76l3:17d?>e;29?j7>93:17pl<4`83>6<729q/=lk513g8L2343A;jj6*>258e3>"61k07;%3:f?1d<2c:=i4?::k25`<722c:=k4?::k265<722e:5<4?::a6=e=83<1<7>t$0cf>4563A=>?6F>ag9'572=:2.:5o48959j54b=831b=50;9j577=831d=4?50;9~f62>290=6=4?{%3ba?7492B<9>5G1`d8 4432oo0(<7m:6c;?l76l3:17d?>e;29?l76n3:17d?=0;29?l7593:17b?61;29?xd5=l0;6;4?:1y'5dc=9:;0D:;<;I3bb>"6:=0mn6g>1e83>>o69l0;66g>1g83>>o6:90;66g>2083>>i6180;66sm24f94?0=83:p(5<5<5<3:1ad8274=O?<90D5;h32a?6=3`;:j7>5;h314?6=3`;9=7>5;n3:5?6=3th9:<4?:783>5}#9ho1=>?4H670?M7fn2.:>94ib:k25a<722c:=h4?::k25c<722c:>=4?::k264<722e:5<4?::a634=83<1<7>t$0cf>4563A=>?6F>ag9'572=nk1b=5<7s-;ji7?<1:J416=O9hl0(<<;:g`8m47c2900e:188yg41<3:1:7>50z&2e`<6;81C;8=4H0ce?!75<3li7d?>d;29?l76m3:17d?>f;29?l7583:17d?=1;29?j7>93:17pl=6483>3<729q/=lk51238L2343A;jj6*>258ef>o69m0;66g>1d83>>o69o0;66g>2183>>o6:80;66a>9083>>{e:?<1<7850;2x 4gb289:7E9:3:J2ec=#9;>1jo5f10f94?=n98o1<75f10d94?=n9;:1<75f13394?=h90;1<75rb344>5<1290;w)?ne;305>N0=:1C=lh4$007>cd5<5<5<56;294~"6il0:?<5G7418L4ga3-;987hm;h32`?6=3`;:i7>5;h32b?6=3`;9<7>5;h315?6=3f;2=7>5;|`12<<72?0;6=u+1`g9567<@>?87E?nf:&261<4?::m2=4<722wi>;o50;494?6|,8kn6<=>;I567>N6io1/=?:5fc9j54b=831b=50;9j577=831d=4?50;9~f70e290=6=4?{%3ba?7492B<9>5G1`d8 4432oh0e:188k4?62900qo<9c;292?6=8r.:mh4>309K305<@8km7)?=4;da?l76l3:17d?>e;29?l76n3:17d?=0;29?l7593:17b?61;29?xd5>m0;6;4?:1y'5dc=9:;0D:;<;I3bb>"6:=0mn6g>1e83>>o69l0;66g>1g83>>o6:90;66g>2083>>i6180;66sm27g94?0=83:p(5<5<5<3:1ad8274=O?<90D5;h32b?6=3`;9<7>5;h315?6=3f;2=7>5;|`2f1<72:0;6=u+1`g957c<@>?87E?nf:&261t$0cf>44b3A=>?6F>ag9'572=n>1b=5G1`d8 4432o=0e:188yg5b;3:1;7>50z&2e`<6;;1C;8=4H0ce?!75<3;;n6g>1e83>>o69l0;66g>1g83>>o6:90;66g>2083>>o6:;0;66a>9083>>{e;l?1<7950;2x 4gb28997E9:3:J2ec=#9;>1==l4i03g>5<5<5<5<57;294~"6il0:??5G7418L4ga3-;987??b:k25a<722c:=h4?::k25c<722c:>=4?::k264<722c:>?4?::m2=4<722wi?h850;594?6|,8kn6<==;I567>N6io1/=?:511`8m47c2900e309K305<@8km7)?=4;32?!7>j3=2=6g>1e83>>o69l0;66g>1g83>>o6:90;66g>2083>>i6180;66sm3d:94?0=83:p("61k0<5<5f10f94?=n98o1<75f10d94?=n9;:1<75f13394?=h90;1<75rb2df>5<2290;w)?ne;304>N0=:1C=lh4$007>435<5<ad8275=O?<90D=4?::m2=4<722wi?hm50;594?6|,8kn6<==;I567>N6io1/=?:5519j54b=831b=50;9j577=831b=?<50;9l5<7=831vn>k?:187>5<7s-;ji7?=f:J416=O9hl0(<<;:448 4?e2>3<7d?>d;29?l76m3:17d?>f;29?j7>93:17pl1<729q/=lk513d8L2343A;jj6*>25862>"61k0<5:5f10f94?=n98o1<75f10d94?=h90;1<75rb2g2>5<3290;w)?ne;31b>N0=:1C=lh4$007>00<,83i6:79;h32`?6=3`;:i7>5;h32b?6=3f;2=7>5;|`0`3<72=0;6=u+1`g957`<@>?87E?nf:&2615G1`d8 4432o20(<7m:6c2?l76l3:17d?>e;29?l76n3:17b?61;29?xd4l10;694?:1y'5dc=9;l0D:;<;I3bb>"6:=0m46*>9c84e5=n98n1<75f10g94?=n98l1<75`18394?=zj:n26=4;:183!7fm3;9j6F8529K5d`<,88?6k64$0;a>2?a3`;:h7>5;h32a?6=3`;:j7>5;n3:5?6=3th8hl4?:583>5}#9ho1=?h4H670?M7fn2.:>94i8:&2=g<0i=1b=jm:187>5<7s-;ji7?=f:J416=O9hl0(<<;:g:8 4?e2>k87d?>d;29?l76m3:17d?>f;29?j7>93:17pl1<729q/=lk513d8L2343A;jj6*>258e<>"61k05<3290;w)?ne;31b>N0=:1C=lh4$007>c><,83i6:7k;h32`?6=3`;:i7>5;h32b?6=3f;2=7>5;|`0``<72=0;6=u+1`g957`<@>?87E?nf:&2615G1`d8 4432o20(<7m:6c3?l76l3:17d?>e;29?l76n3:17b?61;29?xd4l90;694?:1y'5dc=9;l0D:;<;I3bb>"6:=0m46*>9c84=c=n98n1<75f10g94?=n98l1<75`18394?=zj:n:6=4;:183!7fm3;9j6F8529K5d`<,88?6k64$0;a>2g33`;:h7>5;h32a?6=3`;:j7>5;n3:5?6=3th8h?4?:583>5}#9ho1=?h4H670?M7fn2.:>94i8:&2=g<0i:1b=j<:187>5<7s-;ji7?=f:J416=O9hl0(<<;:g:8 4?e2>k97d?>d;29?l76m3:17d?>f;29?j7>93:17pl1<729q/=lk513d8L2343A;jj6*>258e<>"61k0<5h5f10f94?=n98o1<75f10d94?=h90;1<75rb2f6>5<3290;w)?ne;31b>N0=:1C=lh4$007>c><,83i6:7k;h32`?6=3`;:i7>5;h32b?6=3f;2=7>5;|`520<72:0;6=u+1`g957c<@>?87E?nf:&2615<7s-;ji7?=f:J416=O9hl0(<<;:gf8m47c2900e:188yg0?93:187>50z&2e`<6:o1C;8=4H0ce?!75<3>:7d?>d;29?l76m3:17d?>f;29?j7>93:17pl;0g83>2<729q/=lk51208L2343A;jj6*>25824>o69m0;66g>1d83>>o69o0;66g>2183>>o6:80;66g>2383>>i6180;66sm40694?0=83:p(5<5<5<3:1ad8274=O?<90D5;h32a?6=3`;:j7>5;h314?6=3`;9=7>5;n3:5?6=3th?=:4?:583>5}#9ho1=?h4H670?M7fn2.:>94n;%3:f?1d?2c:=i4?::k25`<722c:=k4?::m2=4<722wi8?850;794?6|,8kn6<=?;I567>N6io1/=?:511c8 4?e2>i=7d?>d;29?l76m3:17d?>f;29?l7583:17b?61;29?xd3890;694?:1y'5dc=9;l0D:;<;I3bb>"6:=0?;6*>9c84=g=n98n1<75f10g94?=n98l1<75`18394?=zj=:86=4::183!7fm3;8<6F8529K5d`<,88?6964i03g>5<5<5<;87>55;294~"6il0:?=5G7418L4ga3-;987:7;h32`?6=3`;:i7>5;h32b?6=3`;9<7>5;n3:5?6=3th?<84?:483>5}#9ho1=>>4H670?M7fn2.:>94;8:k25a<722c:=h4?::k25c<722c:>=4?::m2=4<722wi8=850;794?6|,8kn6<=?;I567>N6io1/=?:5499j54b=831b=50;9l5<7=831vn9>8:186>5<7s-;ji7?<0:J416=O9hl0(<<;:5:8m47c2900e319K305<@8km7)?=4;6;?l76l3:17d?>e;29?l76n3:17d?=0;29?j7>93:17pl;0883>0<729q/=lk51228L2343A;jj6*>2587<>"61k0<5o5f10f94?=n98o1<75f10d94?=n9;:1<75`18394?=zj=:j6=4::183!7fm3;8<6F8529K5d`<,88?6964$0;a>2?23`;:h7>5;h32a?6=3`;:j7>5;h314?6=3f;2=7>5;|`74`<72>0;6=u+1`g9564<@>?87E?nf:&261<4j2c:=i4?::k25`<722c:=k4?::k265<722c:><4?::k267<722e:5<4?::a057=83?1<7>t$0cf>4573A=>?6F>ag9'572=309K305<@8km7)?=4;6f?!7>j3=i>6g>1e83>>o69l0;66g>1g83>>o6:90;66g>2083>>i6180;66sm41`94?1=83:p(5<2290;w)?ne;304>N0=:1C=lh4$007>1=#90h1;l74i03g>5<5<5<:>7>54;294~"6il0:>k5G7418L4ga3-;987o4$0;a>2e23`;:h7>5;h32a?6=3`;:j7>5;n3:5?6=3th?=h4?:583>5}#9ho1=?h4H670?M7fn2.:>94>069'52g9K305<@8km7)?=4;333>"61k0<5?5f10f94?=n98o1<75f10d94?=h90;1<75rb50b>5<3290;w)?ne;31b>N0=:1C=lh4$007>4603-;2n7965:k25a<722c:=h4?::k25c<722e:5<4?::a0f3=83=1<7>t$0cf>4553A=>?6F>ag9'572=98=0e:188m4452900c<7>:188yg2d83:197>50z&2e`<6;91C;8=4H0ce?!75<3;;h6g>1e83>>o69l0;66g>1g83>>o6:90;66a>9083>>{e1==j4i03g>5<5<5<55;294~"6il0:?=5G7418L4ga3-;987:n;h32`?6=3`;:i7>5;h32b?6=3`;9<7>5;n3:5?6=3th?o94?:483>5}#9ho1=>>4H670?M7fn2.:>94<0:k25a<722c:=h4?::k25c<722c:>=4?::m2=4<722wi9:>50;794?6|,8kn6<=?;I567>N6io1/=?:51008 4?e2>387d?>d;29?l76m3:17d?>f;29?l7583:17b?61;29?xd3k00;684?:1y'5dc=9::0D:;<;I3bb>"6:=0:96*>9c84e2=n98n1<75f10g94?=n98l1<75f13294?=h90;1<75rb5a;>5<2290;w)?ne;304>N0=:1C=lh4$007>43<,83i6:o8;h32`?6=3`;:i7>5;h32b?6=3`;9<7>5;n3:5?6=3th?ol4?:283>5}#9ho1=?k4H670?M7fn2.:>94i7:&2=g<0jl1b=5G1`d8 4432o=0(<7m:6`f?l76l3:17d?>e;29?j7>93:17pl;c083>6<729q/=lk513g8L2343A;jj6*>258e3>"61k02gc3`;:h7>5;h32a?6=3f;2=7>5;|`7g6<72:0;6=u+1`g957c<@>?87E?nf:&2615<7s-;ji7?=e:J416=O9hl0(<<;:g58 4?e2>h;7d?>d;29?l76m3:17b?61;29?xd3jl0;6>4?:1y'5dc=9;o0D:;<;I3bb>"6:=0m;6*>9c84ef=n98n1<75f10g94?=h90;1<75rb5`e>5<4290;w)?ne;31a>N0=:1C=lh4$007>c1<,83i6:ol;h32`?6=3`;:i7>5;n3:5?6=3th?nl4?:283>5}#9ho1=?k4H670?M7fn2.:>94;0:&2=g<0io1b=5G1`d8 4432=:0(<7m:6ce?l76l3:17d?>e;29?j7>93:17pl;b983>6<729q/=lk513g8L2343A;jj6*>25874>"61k04$0;a>2gb3`;:h7>5;h32a?6=3f;2=7>5;|`72<<72=0;6=u+1`g957`<@>?87E?nf:&2615G1`d8 4432o20(<7m:6`7?l76l3:17d?>e;29?l76n3:17b?61;29?xd3><0;694?:1y'5dc=9;l0D:;<;I3bb>"6:=0m46*>9c84f6=n98n1<75f10g94?=n98l1<75`18394?=zj=<86=4;:183!7fm3;9j6F8529K5d`<,88?6k64$0;a>2d43`;:h7>5;h32a?6=3`;:j7>5;n3:5?6=3th?:<4?:583>5}#9ho1=?h4H670?M7fn2.:>94i8:&2=g<0j81b=5<7s-;ji7?=f:J416=O9hl0(<<;:g:8 4?e2>h:7d?>d;29?l76m3:17d?>f;29?j7>93:17pl;7883>1<729q/=lk513d8L2343A;jj6*>258e<>o69m0;66g>1d83>>o69o0;66a>9083>>{e<>=1<7:50;2x 4gb288m7E9:3:J2ec=#9;>1j55+18`93g>5<5<<97>54;294~"6il0:>k5G7418L4ga3-;987h7;%3:f?1e02c:=i4?::k25`<722c:=k4?::m2=4<722wi8:=50;694?6|,8kn6<N6io1/=?:5f99'52g9K305<@8km7)?=4;d;?!7>j3=i;6g>1e83>>o69l0;66g>1g83>>i6180;66sm47d94?2=83:p(5<5<ad826c=O?<90D1<7>t$0cf>44a3A=>?6F>ag9'572=n11/=4l57c78m47c2900e:188yg2183:187>50z&2e`<6:o1C;8=4H0ce?!75<3l37)?6b;5a1>o69m0;66g>1d83>>o69o0;66a>9083>>{e<1j55+18`93dd5<5<53;294~"6il0:>h5G7418L4ga3-;987j=;%3:f?1fj2c:=i4?::k25`<722e:5<4?::a130=83?1<7>t$0cf>4573A=>?6F>ag9'572=<2c:=i4?::k25`<722c:=k4?::k265<722e:5<4?::a1d0=8391<7>t$0cf>44b3A=>?6F>ag9'572=n>1/=4l57`48m47c2900e2g9K305<@8km7)?=4;66?!7>j3=i56g>1e83>>o69l0;66g>1g83>>i6180;66sm26;94?1=83:p(5<3290;w)?ne;31b>N0=:1C=lh4$007>13<,83i6:l6;h32`?6=3`;:i7>5;h32b?6=3f;2=7>5;|`13g<72>0;6=u+1`g9564<@>?87E?nf:&261<202c:=i4?::k25`<722c:=k4?::k265<722c:><4?::k267<722e:5<4?::a62c=83>1<7>t$0cf>44a3A=>?6F>ag9'572=<<1/=4l57ca8m47c2900e:188yg40l3:1;7>50z&2e`<6;;1C;8=4H0ce?!75<3?37d?>d;29?l76m3:17d?>f;29?l7583:17d?=1;29?l75:3:17b?61;29?xd5090;694?:1y'5dc=9;l0D:;<;I3bb>"6:=0?96*>9c84ff=n98n1<75f10g94?=n98l1<75`18394?=zj;=m6=48:183!7fm3;8>6F8529K5d`<,88?6864i03g>5<5<5<5<7>54;294~"6il0:>k5G7418L4ga3-;987::;%3:f?1ej2c:=i4?::k25`<722c:=k4?::m2=4<722wi>5?50;594?6|,8kn6<==;I567>N6io1/=?:5599j54b=831b=50;9j577=831b=?<50;9l5<7=831vn?6;:187>5<7s-;ji7?=f:J416=O9hl0(<<;:578 4?e2>hi7d?>d;29?l76m3:17d?>f;29?j7>93:17pl=8283>2<729q/=lk51208L2343A;jj6*>2586<>o69m0;66g>1d83>>o69o0;66g>2183>>o6:80;66g>2383>>i6180;66sm29494?2=83:p(5<5<ad8277=O?<90D5;h32a?6=3`;:j7>5;h314?6=3`;9=7>5;h316?6=3f;2=7>5;|`1<=<72=0;6=u+1`g957`<@>?87E?nf:&261<3=2.:5o48b`9j54b=831b=0290<6=4?{%3ba?74:2B<9>5G1`d8 4432<20e:188m4452900c<7>:188yg40=3:1;7>50z&2e`<6;;1C;8=4H0ce?!75<3;::6g>1e83>>o69l0;66g>1g83>>o6:90;66g>2083>>o6:;0;66a>9083>>{e:><1<7;50;2x 4gb289;7E9:3:J2ec=#9;>1==o4i03g>5<5<5<57;294~"6il0:??5G7418L4ga3-;987??f:k25a<722c:=h4?::k25c<722c:>=4?::k264<722c:>?4?::m2=4<722wi>:?50;494?6|,8kn6<=>;I567>N6io1/=?:5139'5:188k4?62900qo<82;290?6=8r.:mh4>2g9K305<@8km7)?=4;76?l76l3:17d?>e;29?l76n3:17b?61;29?xd5?:0;6:4?:1y'5dc=9:80D:;<;I3bb>"6:=0:=85f10f94?=n98o1<75f10d94?=n9;:1<75f13394?=n9;81<75`18394?=zj?9<6=48:183!7fm3;8>6F8529K5d`<,88?6<>?;h32`?6=3`;:i7>5;h32b?6=3`;9<7>5;h315?6=3`;9>7>5;n3:5?6=3th=?54?:683>5}#9ho1=><4H670?M7fn2.:>94:4:k25a<722c:=h4?::k25c<722c:>=4?::k264<722c:>?4?::m2=4<722wi:>:50;594?6|,8kn6<==;I567>N6io1/=?:51128m47c2900e339K305<@8km7)?=4;77?l76l3:17d?>e;29?l76n3:17d?=0;29?l7593:17d?=2;29?j7>93:17pl93083>2<729q/=lk51208L2343A;jj6*>258245=n98n1<75f10g94?=n98l1<75f13294?=n9;;1<75f13094?=h90;1<75rb711>5<0290;w)?ne;306>N0=:1C=lh4$007>025<5<5<ad8277=O?<90D<4?::k267<722e:5<4?::a26`=83<1<7>t$0cf>4563A=>?6F>ag9'572==;1b=5<7s-;ji7?=f:J416=O9hl0(<<;:g:8 4?e2>i:7d?>d;29?l76m3:17d?>f;29?j7>93:17pl93`83>2<729q/=lk51208L2343A;jj6*>258245=n98n1<75f10g94?=n98l1<75f13294?=n9;;1<75f13094?=h90;1<75rb71a>5<1290;w)?ne;305>N0=:1C=lh4$007>045<5<5<54;294~"6il0:>k5G7418L4ga3-;987h7;%3:f?1d92c:=i4?::k25`<722c:=k4?::m2=4<722wi:?l50;594?6|,8kn6<==;I567>N6io1/=?:51128m47c2900e309K305<@8km7)?=4;71?l76l3:17d?>e;29?l76n3:17d?=0;29?l7593:17b?61;29?xd1:m0;694?:1y'5dc=9;l0D:;<;I3bb>"6:=0m46*>9c84g5=n98n1<75f10g94?=n98l1<75`18394?=zj?8j6=48:183!7fm3;8>6F8529K5d`<,88?6<>?;h32`?6=3`;:i7>5;h32b?6=3`;9<7>5;h315?6=3`;9>7>5;n3:5?6=3th=>h4?:783>5}#9ho1=>?4H670?M7fn2.:>94:2:k25a<722c:=h4?::k25c<722c:>=4?::k264<722e:5<4?::a27`=83>1<7>t$0cf>44a3A=>?6F>ag9'572=n11/=4l57b28m47c2900e:188yg26;3:187>50z&2e`<6:o1C;8=4H0ce?!75<3>:7)?6b;5ab>o69m0;66g>1d83>>o69o0;66a>9083>>{e<8?1<7850;2x 4gb289:7E9:3:J2ec=#9;>1==m4$0;a>2g23`;:h7>5;h32a?6=3`;:j7>5;h314?6=3`;9=7>5;n3:5?6=3th?=54?:683>5}#9ho1=><4H670?M7fn2.:>94;f:k25a<722c:=h4?::k25c<722c:>=4?::k264<722c:>?4?::m2=4<722wi8<750;594?6|,8kn6<==;I567>N6io1/=?:55`9j54b=831b=50;9j577=831b=?<50;9l5<7=831vn9<::185>5<7s-;ji7?<1:J416=O9hl0(<<;:2a8m47c2900e:188yg25?3:1;7>50z&2e`<6;;1C;8=4H0ce?!75<3>h7d?>d;29?l76m3:17d?>f;29?l7583:17d?=1;29?l75:3:17b?61;29?xd3:10;6:4?:1y'5dc=9:80D:;<;I3bb>"6:=0>m6g>1e83>>o69l0;66g>1g83>>o6:90;66g>2083>>o6:;0;66a>9083>>{e<;91<7850;2x 4gb289:7E9:3:J2ec=#9;>1845f10f94?=n98o1<75f10d94?=n9;:1<75f13394?=h90;1<75rb503>5<0290;w)?ne;306>N0=:1C=lh4$007>405<5<5<3:1ad8274=O?<90D50;9j577=831d=4?50;9~f17f290<6=4?{%3ba?74:2B<9>5G1`d8 44328=0e:188m4452900c<7>:188yg3a;3:1;7>50z&2e`<6;;1C;8=4H0ce?!75<3?o7d?>d;29?l76m3:17d?>f;29?l7583:17d?=1;29?l75:3:17b?61;29?xd2n10;6:4?:1y'5dc=9:80D:;<;I3bb>"6:=0m56g>1e83>>o69l0;66g>1g83>>o6:90;66g>2083>>o6:;0;66a>9083>>{e=ok1<7950;2x 4gb28997E9:3:J2ec=#9;>18i5f10f94?=n98o1<75f10d94?=n9;:1<75f13394?=n9;81<75`18394?=zj6F8529K5d`<,88?6>=4i03g>5<5<5<5<53;294~"6il0:>h5G7418L4ga3-;987:?;%3:f?1f=2c:=i4?::k25`<722e:5<4?::a1``=83=1<7>t$0cf>4553A=>?6F>ag9'572==01b=5G1`d8 4432l1/=4l57b08m47c2900e:188yg27l3:1:7>50z&2e`<6;81C;8=4H0ce?!75<3n0e:188k4?62900qo:?c;292?6=8r.:mh4>309K305<@8km7)?=4;3;?!7>j3=j:6g>1e83>>o69l0;66g>1g83>>o6:90;66g>2083>>i6180;66sm57a94?0=83:p(5<5<5<57;294~"6il0:??5G7418L4ga3-;987=9;h32`?6=3`;:i7>5;h32b?6=3`;9<7>5;h315?6=3`;9>7>5;n3:5?6=3th>;<4?:483>5}#9ho1=>>4H670?M7fn2.:>94>0d9'5:188yg31m3:1;7>50z&2e`<6;;1C;8=4H0ce?!75<39<7d?>d;29?l76m3:17d?>f;29?l7583:17d?=1;29?l75:3:17b?61;29?xd2>=0;6;4?:1y'5dc=9:;0D:;<;I3bb>"6:=0:?6*>9c84=f=n98n1<75f10g94?=n98l1<75f13294?=n9;;1<75`18394?=zj<<<6=4::183!7fm3;8<6F8529K5d`<,88?69<4$0;a>2?d3`;:h7>5;h32a?6=3`;:j7>5;h314?6=3f;2=7>5;|`62=<72?0;6=u+1`g9567<@>?87E?nf:&261=4?::k264<722e:5<4?::a0f0=83<1<7>t$0cf>4563A=>?6F>ag9'572=nj1/=4l578:8m47c2900e:188yg2dk3:187>50z&2e`<6:o1C;8=4H0ce?!75<3l87d?>d;29?l76m3:17d?>f;29?j7>93:17pl;cc83>2<729q/=lk51208L2343A;jj6*>2580?l76l3:17d?>e;29?l76n3:17d?=0;29?l7593:17d?=2;29?j7>93:17pl;a883>6<729q/=lk513g8L2343A;jj6*>258e3>"61k0<555f10f94?=n98o1<75`18394?=zj=k36=48:183!7fm3;8>6F8529K5d`<,88?69=4i03g>5<5<5<5<57;294~"6il0:??5G7418L4ga3-;987?4i03g>5<5<5<5<57;294~"6il0:??5G7418L4ga3-;987?4i03g>5<5<5<5<55;294~"6il0:?=5G7418L4ga3-;987?:;%3:f?1d;2c:=i4?::k25`<722c:=k4?::k265<722e:5<4?::a1d>=83=1<7>t$0cf>4553A=>?6F>ag9'572=92c:=i4?::k25`<722c:=k4?::k265<722c:><4?::k267<722e:5<4?::a1d?=83=1<7>t$0cf>4553A=>?6F>ag9'572=92c:=i4?::k25`<722c:=k4?::k265<722c:><4?::k267<722e:5<4?::a1dg=83?1<7>t$0cf>4573A=>?6F>ag9'572=<2c:=i4?::k25`<722c:=k4?::k265<722e:5<4?::a1dd=83>1<7>t$0cf>44a3A=>?6F>ag9'572=<81/=4l578c8m47c2900e:188yg3fk3:1;7>50z&2e`<6;;1C;8=4H0ce?!75<3;:=6g>1e83>>o69l0;66g>1g83>>o6:90;66g>2083>>o6:;0;66a>9083>>{e0:<1<7<50;2x 4gb28887E9:3:J2ec=n98i1<75`18394?=zj19>6=4=:183!7fm3;9?6F8529K5d`5<5<53;294~"6il0:5>5G7418L4ga3`;:o7>5;h3bg?6=3f;2=7>5;|`:45<72:0;6=u+1`g95<5<@>?87E?nf:k25f<722c:mn4?::m2=4<722wi4kh50;194?6|,8kn6<7<;I567>N6io1b=;2B<9>5G1`d8m47d2900e929K305<@8km7d?>c;29?l7fk3:17b?61;29?xd?nj0;6>4?:1y'5dc=9090D:;<;I3bb>o69j0;66g>ab83>>i6180;66sm8g`94?5=83:p(5<ad82=6=O?<90D5;n3:5?6=3th3j54?:283>5}#9ho1=4=4H670?M7fn2c:=n4?::k2ef<722e:5<4?::at$0cf>4?43A=>?6F>ag9j54e=831b=lm50;9l5<7=831vn5h::180>5<7s-;ji7?63:J416=O9hl0e:188yg>a<3:1?7>50z&2e`<61:1C;8=4H0ce?l76k3:17d?nc;29?j7>93:17pl7f283>6<729q/=lk51818L2343A;jj6g>1b83>>o6ij0;66a>9083>>{e0o81<7=50;2x 4gb28387E9:3:J2ec=n98i1<75f1`a94?=h90;1<75rb9d2>5<4290;w)?ne;3:7>N0=:1C=lh4i03`>5<5<53;294~"6il0:5>5G7418L4ga3`;:o7>5;h3bg?6=3f;2=7>5;|`;ac<72:0;6=u+1`g95<5<@>?87E?nf:k25f<722c:mn4?::m2=4<722wi4hk50;194?6|,8kn6<7<;I567>N6io1b=;2B<9>5G1`d8m47d2900e929K305<@8km7d?>c;29?l7fk3:17b?61;29?xd?mh0;6>4?:1y'5dc=9090D:;<;I3bb>o69j0;66g>ab83>>i6180;66sm8d;94?5=83:p(5<ad82=6=O?<90D5;n3:5?6=3th3i;4?:283>5}#9ho1=4=4H670?M7fn2c:=n4?::k2ef<722e:5<4?::a<`3=8391<7>t$0cf>4?43A=>?6F>ag9j54e=831b=lm50;9l5<7=831vn5k;:180>5<7s-;ji7?63:J416=O9hl0e:188yg>b;3:1?7>50z&2e`<61:1C;8=4H0ce?l76k3:17d?nc;29?j7>93:17pl7e383>6<729q/=lk51818L2343A;jj6g>1b83>>o6ij0;66a>9083>>{e0l;1<7=50;2x 4gb28387E9:3:J2ec=n98i1<75f1`a94?=h90;1<75rb9fe>5<4290;w)?ne;3:7>N0=:1C=lh4i03`>5<5<53;294~"6il0:5>5G7418L4ga3`;:o7>5;h3bg?6=3f;2=7>5;|`;`a<72:0;6=u+1`g95<5<@>?87E?nf:k25f<722c:mn4?::m2=4<722wi4im50;194?6|,8kn6<7<;I567>N6io1b=;2B<9>5G1`d8m47d2900e929K305<@8km7d?>c;29?l7fk3:17b?61;29?xd?l00;6>4?:1y'5dc=9090D:;<;I3bb>o69j0;66g>ab83>>i6180;66sm8e:94?5=83:p(5<ad82=6=O?<90D5;n3:5?6=3th3h94?:283>5}#9ho1=4=4H670?M7fn2c:=n4?::k2ef<722e:5<4?::at$0cf>4?43A=>?6F>ag9j54e=831b=lm50;9l5<7=831vn5j=:180>5<7s-;ji7?63:J416=O9hl0e:188yg>c93:1?7>50z&2e`<61:1C;8=4H0ce?l76k3:17d?nc;29?j7>93:17pl7d183>6<729q/=lk51818L2343A;jj6g>1b83>>o6ij0;66a>9083>>{e0jl1<7=50;2x 4gb28387E9:3:J2ec=n98i1<75f1`a94?=h90;1<75rb9af>5<4290;w)?ne;3:7>N0=:1C=lh4i03`>5<5<53;294~"6il0:5>5G7418L4ga3`;:o7>5;h3bg?6=3f;2=7>5;|`;gf<72:0;6=u+1`g95<5<@>?87E?nf:k25f<722c:mn4?::m2=4<722wi4nl50;194?6|,8kn6<7<;I567>N6io1b=29086=4?{%3ba?7>;2B<9>5G1`d8m47d2900e929K305<@8km7d?>c;29?l7fk3:17b?61;29?xd?k>0;6>4?:1y'5dc=9090D:;<;I3bb>o69j0;66g>ab83>>i6180;66sm8b494?5=83:p(6=4<:183!7fm3;2?6F8529K5d`5<ad82=6=O?<90D5;n3:5?6=3th3o>4?:283>5}#9ho1=4=4H670?M7fn2c:=n4?::k2ef<722e:5<4?::at$0cf>4?43A=>?6F>ag9j54e=831b=lm50;9l5<7=831vn5m>:180>5<7s-;ji7?63:J416=O9hl0e:188yg>d83:1?7>50z&2e`<61:1C;8=4H0ce?l76k3:17d?nc;29?j7>93:17pl7bd83>6<729q/=lk51818L2343A;jj6g>1b83>>o6ij0;66a>9083>>{e0kn1<7=50;2x 4gb28387E9:3:J2ec=n98i1<75f1`a94?=h90;1<75rb9``>5<4290;w)?ne;3:7>N0=:1C=lh4i03`>5<5<53;294~"6il0:5>5G7418L4ga3`;:o7>5;h3bg?6=3f;2=7>5;|`;fd<72:0;6=u+1`g95<5<@>?87E?nf:k25f<722c:mn4?::m2=4<722wi4o750;194?6|,8kn6<7<;I567>N6io1b=;2B<9>5G1`d8m47d2900e929K305<@8km7d?>c;29?l7fk3:17b?61;29?xd?j?0;6>4?:1y'5dc=9090D:;<;I3bb>o69j0;66g>ab83>>i6180;66sm8c794?5=83:p(5<ad82=6=O?<90D5;n3:5?6=3th3n<4?:283>5}#9ho1=4=4H670?M7fn2c:=n4?::k2ef<722e:5<4?::at$0cf>4?43A=>?6F>ag9j54e=831b=lm50;9l5<7=831vn5oi:180>5<7s-;ji7?63:J416=O9hl0e:188yg>fm3:1?7>50z&2e`<61:1C;8=4H0ce?l76k3:17d?nc;29?j7>93:17pl7ae83>6<729q/=lk51818L2343A;jj6g>1b83>>o6ij0;66a>9083>>{e0hi1<7=50;2x 4gb28387E9:3:J2ec=n98i1<75f1`a94?=h90;1<75rb9ca>5<4290;w)?ne;3:7>N0=:1C=lh4i03`>5<5<53;294~"6il0:5>5G7418L4ga3`;:o7>5;h3bg?6=3f;2=7>5;|`;e=<72:0;6=u+1`g95<5<@>?87E?nf:k25f<722c:mn4?::m2=4<722wi4l950;194?6|,8kn6<7<;I567>N6io1b=;2B<9>5G1`d8m47d2900e929K305<@8km7d?>c;29?l7fk3:17b?61;29?xd?i=0;6>4?:1y'5dc=9090D:;<;I3bb>o69j0;66g>ab83>>i6180;66sm8`194?5=83:p(5<ad82=6=O?<90D5;n3:5?6=3th3m=4?:283>5}#9ho1=4=4H670?M7fn2c:=n4?::k2ef<722e:5<4?::a<<`=83>1<7>t$0cf>44?3A=>?6F>ag9j54e=831b=lm50;9l5<7=831d=?850;9~f<66290?6=4?{%3ba?7502B<9>5G1`d8m47d2900ea>3:187>50z&2e`<6:11C;8=4H0ce?l76k3:17d?nc;29?j7>93:17b?=6;29?xd?mk0;694?:1y'5dc=9;20D:;<;I3bb>o69j0;66g>ab83>>i6180;66a>2783>>{e0l:1<7:50;2x 4gb28837E9:3:J2ec=n98i1<75f1`a94?=h90;1<75`13494?=zj1n>6=4;:183!7fm3;946F8529K5d`5<5<54;294~"6il0:>55G7418L4ga3`;:o7>5;h3bg?6=3f;2=7>5;n312?6=3th3nk4?:583>5}#9ho1=?64H670?M7fn2c:=n4?::k2ef<722e:5<4?::m263<722wi4o:50;694?6|,8kn6<<7;I567>N6io1b=5<7s-;ji7?=8:J416=O9hl0e:188k4412900qo66d;290?6=8r.:mh4>299K305<@8km7d?>c;29?l7fk3:17b?61;29?j75>3:17pl99;290?6=8r.:mh4>299K305<@8km7d?>c;29?l7fk3:17b?61;29?j75>3:17pl8f;290?6=8r.:mh4>299K305<@8km7d?>c;29?l7fk3:17b?61;29?j75>3:17pl63;290?6=8r.:mh4>299K305<@8km7d?>c;29?l7fk3:17b?61;29?j75>3:17pln9;290?6=8r.:mh4>299K305<@8km7d?>c;29?l7fk3:17b?61;29?j75>3:17plmf;290?6=8r.:mh4>299K305<@8km7d?>c;29?l7fk3:17b?61;29?j75>3:17pll9;290?6=8r.:mh4>299K305<@8km7d?>c;29?l7fk3:17b?61;29?j75>3:17pllb;290?6=8r.:mh4>299K305<@8km7d?>c;29?l7fk3:17b?61;29?j75>3:17plld;290?6=8r.:mh4>299K305<@8km7d?>c;29?l7fk3:17b?61;29?j75>3:17pllf;290?6=8r.:mh4>299K305<@8km7d?>c;29?l7fk3:17b?61;29?j75>3:17plk1;290?6=8r.:mh4>299K305<@8km7d?>c;29?l7fk3:17b?61;29?j75>3:17pl9c;290?6=8r.:mh4>299K305<@8km7d?>c;29?l7fk3:17b?61;29?j75>3:17pl9e;290?6=8r.:mh4>299K305<@8km7d?>c;29?l7fk3:17b?61;29?j75>3:17pl80;290?6=8r.:mh4>299K305<@8km7d?>c;29?l7fk3:17b?61;29?j75>3:17pl82;290?6=8r.:mh4>299K305<@8km7d?>c;29?l7fk3:17b?61;29?j75>3:17pl84;290?6=8r.:mh4>299K305<@8km7d?>c;29?l7fk3:17b?61;29?j75>3:17pl86;290?6=8r.:mh4>299K305<@8km7d?>c;29?l7fk3:17b?61;29?j75>3:17pl88;290?6=8r.:mh4>299K305<@8km7d?>c;29?l7fk3:17b?61;29?j75>3:17pl8a;290?6=8r.:mh4>299K305<@8km7d?>c;29?l7fk3:17b?61;29?j75>3:17pl8c;290?6=8r.:mh4>299K305<@8km7d?>c;29?l7fk3:17b?61;29?j75>3:17pl8e;290?6=8r.:mh4>299K305<@8km7d?>c;29?l7fk3:17b?61;29?j75>3:17pl72;290?6=8r.:mh4>299K305<@8km7d?>c;29?l7fk3:17b?61;29?j75>3:17pl74;290?6=8r.:mh4>299K305<@8km7d?>c;29?l7fk3:17b?61;29?j75>3:17pl76;290?6=8r.:mh4>299K305<@8km7d?>c;29?l7fk3:17b?61;29?j75>3:17pl78;290?6=8r.:mh4>299K305<@8km7d?>c;29?l7fk3:17b?61;29?j75>3:17pl7a;290?6=8r.:mh4>299K305<@8km7d?>c;29?l7fk3:17b?61;29?j75>3:17pl7c;290?6=8r.:mh4>299K305<@8km7d?>c;29?l7fk3:17b?61;29?j75>3:17pl7e;290?6=8r.:mh4>299K305<@8km7d?>c;29?l7fk3:17b?61;29?j75>3:17pl60;290?6=8r.:mh4>299K305<@8km7d?>c;29?l7fk3:17b?61;29?j75>3:17pl62;290?6=8r.:mh4>299K305<@8km7d?>c;29?l7fk3:17b?61;29?j75>3:17pl66;290?6=8r.:mh4>299K305<@8km7d?>c;29?l7fk3:17b?61;29?j75>3:17pl68;290?6=8r.:mh4>299K305<@8km7d?>c;29?l7fk3:17b?61;29?j75>3:17pl6a;290?6=8r.:mh4>299K305<@8km7d?>c;29?l7fk3:17b?61;29?j75>3:17pl6c;290?6=8r.:mh4>299K305<@8km7d?>c;29?l7fk3:17b?61;29?j75>3:17pl6e;290?6=8r.:mh4>299K305<@8km7d?>c;29?l7fk3:17b?61;29?j75>3:17pln0;290?6=8r.:mh4>299K305<@8km7d?>c;29?l7fk3:17b?61;29?j75>3:17pln2;290?6=8r.:mh4>299K305<@8km7d?>c;29?l7fk3:17b?61;29?j75>3:17pln4;290?6=8r.:mh4>299K305<@8km7d?>c;29?l7fk3:17b?61;29?j75>3:17pln6;290?6=8r.:mh4>299K305<@8km7d?>c;29?l7fk3:17b?61;29?j75>3:17pln8;290?6=8r.:mh4>299K305<@8km7d?>c;29?l7fk3:17b?61;29?j75>3:17plnc;290?6=8r.:mh4>299K305<@8km7d?>c;29?l7fk3:17b?61;29?j75>3:17plne;290?6=8r.:mh4>299K305<@8km7d?>c;29?l7fk3:17b?61;29?j75>3:17plm0;290?6=8r.:mh4>299K305<@8km7d?>c;29?l7fk3:17b?61;29?j75>3:17plm2;290?6=8r.:mh4>299K305<@8km7d?>c;29?l7fk3:17b?61;29?j75>3:17plm4;290?6=8r.:mh4>299K305<@8km7d?>c;29?l7fk3:17b?61;29?j75>3:17plm6;290?6=8r.:mh4>299K305<@8km7d?>c;29?l7fk3:17b?61;29?j75>3:17plm8;290?6=8r.:mh4>299K305<@8km7d?>c;29?l7fk3:17b?61;29?j75>3:17plma;290?6=8r.:mh4>299K305<@8km7d?>c;29?l7fk3:17b?61;29?j75>3:17plmc;290?6=8r.:mh4>299K305<@8km7d?>c;29?l7fk3:17b?61;29?j75>3:17plme;290?6=8r.:mh4>299K305<@8km7d?>c;29?l7fk3:17b?61;29?j75>3:17pll2;290?6=8r.:mh4>299K305<@8km7d?>c;29?l7fk3:17b?61;29?j75>3:17pll4;290?6=8r.:mh4>299K305<@8km7d?>c;29?l7fk3:17b?61;29?j75>3:17pll6;290?6=8r.:mh4>299K305<@8km7d?>c;29?l7fk3:17b?61;29?j75>3:17pll8;290?6=8r.:mh4>299K305<@8km7d?>c;29?l7fk3:17b?61;29?j75>3:17pl67g83>7<729q/=lk51808L2343A;jj6g>1b83>>i6180;66sm96g94?4=83:p(5<5290;w)?ne;3:6>N0=:1C=lh4i03`>5<ad82=7=O?<90D5;|`:3g<72;0;6=u+1`g95<4<@>?87E?nf:k25f<722e:5<4?::a=2g=8381<7>t$0cf>4?53A=>?6F>ag9j54e=831d=4?50;9~f<1>29096=4?{%3ba?7>:2B<9>5G1`d8m47d2900c<7>:188yg?003:1>7>50z&2e`<61;1C;8=4H0ce?l76k3:17b?61;29?xd>?>0;6?4?:1y'5dc=9080D:;<;I3bb>o69j0;66a>9083>>{e1><1<7<50;2x 4gb28397E9:3:J2ec=n98i1<75`18394?=zj0=>6=4=:183!7fm3;2>6F8529K5d`5<52;294~"6il0:5?5G7418L4ga3`;:o7>5;n3:5?6=3th2;>4?:383>5}#9ho1=4<4H670?M7fn2c:=n4?::m2=4<722wi5:<50;094?6|,8kn6<7=;I567>N6io1b=:181>5<7s-;ji7?62:J416=O9hl0e939K305<@8km7d?>c;29?j7>93:17pl66g83>7<729q/=lk51808L2343A;jj6g>1b83>>i6180;66sm97g94?4=83:p(5<5290;w)?ne;3:6>N0=:1C=lh4i03`>5<ad82=7=O?<90D5;|`:2g<72;0;6=u+1`g95<4<@>?87E?nf:k25f<722e:5<4?::a=3g=8381<7>t$0cf>4?53A=>?6F>ag9j54e=831d=4?50;9~f<0>29096=4?{%3ba?7>:2B<9>5G1`d8m47d2900c<7>:188yg?103:1>7>50z&2e`<61;1C;8=4H0ce?l76k3:17b?61;29?xd183:1>7>50z&2e`<61;1C;8=4H0ce?l76k3:17b?61;29?xd3"6:=0846g>1e83>>i6180;66sm4bg94?4=83:p(96=4<:183!7fm3lm7E9:3:J2ec=#9;>1<6gk5;29?lca2900c<7i:188yg0>:3:1?7>50z&2e`5G1`d8ma3=831bik4?::m2=c<722wi:?950;194?6|,8kn6kh4H670?M7fn2co97>5;hge>5<ad8eb>N0=:1C=lh4$007>5=nl<0;66gjf;29?j7>n3:17pl:f083>6<729q/=lk5fg9K305<@8km7)?=4;28ma3=831bik4?::m2=c<722wi9k850;194?6|,8kn6kh4H670?M7fn2.:>94?;hf6>5<n3:17pl:bg83>6<729q/=lk5fg9K305<@8km7dj::188m``=831d=4h50;9~f0c4290?6=4?{%3ba?7792B<9>5G1`d8ma3=831bh54?::kfb?6=3f;2j7>5;|`6a7<72=0;6=u+1`g9557<@>?87E?nf:kg1?6=3`n36=44idd94?=h90l1<75rb4g2>5<3290;w)?ne;335>N0=:1C=lh4ie794?=nl10;66gjf;29?j7>n3:17pl:e183>1<729q/=lk51138L2343A;jj6gk5;29?lb?2900ehh50;9l5<`=831vn8ji:187>5<7s-;ji7??1:J416=O9hl0ei;50;9j`=<722cnj7>5;n3:b?6=3th>hh4?:583>5}#9ho1==?4H670?M7fn2co97>5;hf;>5<>obn3:17b?6f;29?xd2lj0;694?:1y'5dc=99;0D:;<;I3bb>oc=3:17dj7:188m``=831d=4h50;9~f0e?290?6=4?{%3ba?7792B<9>5G1`d8ma3=831bh54?::kfb?6=3f;2j7>5;|`6g2<72=0;6=u+1`g9557<@>?87E?nf:kg1?6=3`n36=44idd94?=h90l1<75rb4a5>5<3290;w)?ne;335>N0=:1C=lh4ie794?=nl10;66gjf;29?j7>n3:17pl:c`83>6<729q/=lk5fg9K305<@8km7dj::188m``=831d=4h50;9~f0db29086=4?{%3ba?`a3A=>?6F>ag9j`0<722cnj7>5;n3:b?6=3th>ni4?:283>5}#9ho1jk5G7418L4ga3`n>6=44idd94?=h90l1<75rb4``>5<4290;w)?ne;de?M12;2B:mk5fd483>>obn3:17b?6f;29?xd2jk0;6>4?:1y'5dc=no1C;8=4H0ce?lb22900ehh50;9l5<`=831vn8m6:180>5<7s-;ji7hi;I567>N6io1bh84?::kfb?6=3f;2j7>5;|`6<`<72=0;6=u+1`g9557<@>?87E?nf:kg1?6=3`n36=44idd94?=h90l1<75rb4:g>5<3290;w)?ne;335>N0=:1C=lh4ie794?=nl10;66gjf;29?j7>n3:17pl:8b83>1<729q/=lk51138L2343A;jj6gk5;29?lb?2900ehh50;9l5<`=831vn86m:187>5<7s-;ji7??1:J416=O9hl0ei;50;9j`=<722cnj7>5;n3:b?6=3th>4l4?:583>5}#9ho1==?4H670?M7fn2co97>5;hf;>5<>obn3:17b?6f;29?xd21?0;694?:1y'5dc=99;0D:;<;I3bb>oc=3:17dj7:188m``=831d=4h50;9~f0?2290?6=4?{%3ba?7792B<9>5G1`d8ma3=831bh54?::kfb?6=3f;2j7>5;|`6=1<72=0;6=u+1`g9557<@>?87E?nf:kg1?6=3`n36=44idd94?=h90l1<75rb4;0>5<3290;w)?ne;335>N0=:1C=lh4ie794?=nl10;66gjf;29?j7>n3:17pl:9383>1<729q/=lk51138L2343A;jj6gk5;29?lb?2900ehh50;9l5<`=831vn87>:187>5<7s-;ji7??1:J416=O9hl0ei;50;9j`=<722cnj7>5;n3:b?6=3th>5=4?:583>5}#9ho1==?4H670?M7fn2co97>5;hf;>5<>obn3:17b?6f;29?xd2010;694?:1y'5dc=99;0D:;<;I3bb>oc=3:17dj7:188m``=831d=4h50;9~f0>0290?6=4?{%3ba?7792B<9>5G1`d8ma3=831bh54?::kfb?6=3f;2j7>5;|`61c<72:0;6=u+1`g9bc=O?<90D>i61o0;66sm57094?5=83:p(2583?lb22900ehh50;9l5<`=831vn88n:180>5<7s-;ji7hi;I567>N6io1/=?:50:kg1?6=3`om6=44o0;e>5<53;294~"6il0mj6F8529K5d`<,88?6=5fd483>>obn3:17b?6f;29?xd2?;0;6>4?:1y'5dc=no1C;8=4H0ce?!75<3:0ei;50;9jac<722e:5k4?::a120=8391<7>t$0cf>c`<@>?87E?nf:kg1?6=3`om6=44o0;e>5<53;294~"6il0mj6F8529K5d`>i61o0;66sm58`94?5=83:p(50z&2e`<6881C;8=4H0ce?lb22900ei650;9jac<722e:5k4?::a16>=83>1<7>t$0cf>4663A=>?6F>ag9j`0<722co47>5;hge>5<ad8244=O?<90D5<>i61o0;66sm53d94?2=83:p(>oc03:17dki:188k4?a2900qo;=e;290?6=8r.:mh4>009K305<@8km7dj::188ma>=831bik4?::m2=c<722wi9?j50;694?6|,8kn6<>>;I567>N6io1bh84?::kg5<53;294~"6il0mj6F8529K5d`>i61o0;66sm58594?5=83:p(50z&2e`5G1`d8ma3=831bik4?::m2=c<722wi98?50;194?6|,8kn6kh4H670?M7fn2co97>5;hge>5<ad8eb>N0=:1C=lh4ie794?=nmo0;66a>9g83>>{e==l1<7=50;2x 4gb2ol0D:;<;I3bb>oc=3:17dki:188k4?a2900qo;:a;297?6=8r.:mh4if:J416=O9hl0ei;50;9jac<722e:5k4?::a10?=8391<7>t$0cf>c`<@>?87E?nf:kg1?6=3`om6=44o0;e>5<47>53;294~"6il0mj6F8529K5d`>i61o0;66sm54594?5=83:p(3:1?7>50z&2e`5G1`d8ma3=831bik4?::m2=c<722wi98;50;194?6|,8kn6kh4H670?M7fn2co97>5;hge>5<ad8eb>N0=:1C=lh4ie794?=nmo0;66a>9g83>>{e=<91<7=50;2x 4gb2ol0D:;<;I3bb>oc=3:17dki:188k4?a2900qo;;e;297?6=8r.:mh4if:J416=O9hl0ei;50;9jac<722e:5k4?::a11b=8391<7>t$0cf>c`<@>?87E?nf:kg1?6=3`om6=44o0;e>5<53;294~"6il0mj6F8529K5d`>i61o0;66sm5`f94?5=83:p(50z&2e`5G1`d8ma3=831bik4?::m2=c<722wi98m50;194?6|,8kn6kh4H670?M7fn2co97>5;hge>5<ad8eb>N0=:1C=lh4ie794?=nmo0;66a>9g83>>{e=;81<7=50;2x 4gb2ol0D:;<;I3bb>oc=3:17dki:188k4?a2900qo;=1;297?6=8r.:mh4if:J416=O9hl0ei;50;9jac<722e:5k4?::a14e=8391<7>t$0cf>c`<@>?87E?nf:kg1?6=3`om6=44o0;e>5<53;294~"6il0mj6F8529K5d`>i61o0;66sm56794?5=83:p(3:1?7>50z&2e`5G1`d8ma3=831bik4?::m2=c<722wi8?l50;194?6|,8kn6kh4H670?M7fn2co97>5;hge>5<ad8eb>N0=:1C=lh4ie794?=nmo0;66a>9g83>>{e=k91<7=50;2x 4gb2ol0D:;<;I3bb>oc=3:17dki:188k4?a2900qo;6d;297?6=8r.:mh4if:J416=O9hl0ei;50;9jac<722e:5k4?::a1t$0cf>c`<@>?87E?nf:kg1?6=3`om6=44o0;e>5<53;294~"6il0mj6F8529K5d`>i61o0;66sm63:94?0=83:p(2?f3`;:h7>5;h32a?6=3`;:j7>5;h314?6=3f;2=7>5;|`006<72=0;6=u+1`g957`<@>?87E?nf:&261<392.:5o48959j54b=831b=5G1`d8 4432=;0(<7m:6a1?l76l3:17d?>e;29?l76n3:17b?61;29?xd2i:0;6:4?:1y'5dc=9:80D:;<;I3bb>"6:=0:=55f10f94?=n98o1<75f10d94?=n9;:1<75f13394?=n9;81<75`18394?=zj=8o6=4;:183!7fm3;9j6F8529K5d`<,88?6k64$0;a>2da3`;:h7>5;h32a?6=3`;:j7>5;n3:5?6=3th?>n4?:683>5}#9ho1=><4H670?M7fn2.:>94<1:k25a<722c:=h4?::k25c<722c:>=4?::k264<722c:>?4?::m2=4<722wi9?;50;194?6|,8kn6<N6io1/=?:5f69'5:188yg35<3:1;7>50z&2e`<6;;1C;8=4H0ce?!75<39>7d?>d;29?l76m3:17d?>f;29?l7583:17d?=1;29?l75:3:17b?61;29?xd29=0;6;4?:1y'5dc=9:;0D:;<;I3bb>"6:=0:=>5+18`93f55<5<5<:=7>57;294~"6il0:??5G7418L4ga3-;987;8;h32`?6=3`;:i7>5;h32b?6=3`;9<7>5;h315?6=3`;9>7>5;n3:5?6=3th>j84?:483>5}#9ho1=>>4H670?M7fn2.:>948;%3:f?1>:2c:=i4?::k25`<722c:=k4?::k265<722e:5<4?::a1c2=83=1<7>t$0cf>4553A=>?6F>ag9'572==2c:=i4?::k25`<722c:=k4?::k265<722c:><4?::k267<722e:5<4?::a137=83>1<7>t$0cf>44a3A=>?6F>ag9'572==<1/=4l57818m47c2900e:188yg3183:1;7>50z&2e`<6;;1C;8=4H0ce?!75<330e:188m4452900c<7>:188yg30<3:197>50z&2e`<6;91C;8=4H0ce?!75<3;;56*>9c84fa=n98n1<75f10g94?=n98l1<75f13294?=h90;1<75rb450>5<0290;w)?ne;306>N0=:1C=lh4$007>f=n98n1<75f10g94?=n98l1<75f13294?=n9;;1<75f13094?=h90;1<75rb5ce>5<1290;w)?ne;305>N0=:1C=lh4$007>125<5<5<i<7>56;294~"6il0:?<5G7418L4ga3-;987:;;h32`?6=3`;:i7>5;h32b?6=3`;9<7>5;h315?6=3f;2=7>5;|`7f4<72?0;6=u+1`g9567<@>?87E?nf:&261<3<2c:=i4?::k25`<722c:=k4?::k265<722c:><4?::m2=4<722wi8o<50;494?6|,8kn6<=>;I567>N6io1/=?:5459j54b=831b=50;9j577=831d=4?50;9~f1d4290=6=4?{%3ba?7492B<9>5G1`d8 4432=>0e:188k4?62900qo:m4;292?6=8r.:mh4>309K305<@8km7)?=4;67?l76l3:17d?>e;29?l76n3:17d?=0;29?l7593:17b?61;29?xd3j<0;6;4?:1y'5dc=9:;0D:;<;I3bb>"6:=0?86g>1e83>>o69l0;66g>1g83>>o6:90;66g>2083>>i6180;66sm4c494?0=83:p(5<5<5<3:1ad8274=O?<90D5;h32a?6=3`;:j7>5;h314?6=3`;9=7>5;n3:5?6=3th?mo4?:783>5}#9ho1=>?4H670?M7fn2.:>94;4:k25a<722c:=h4?::k25c<722c:>=4?::k264<722e:5<4?::a0de=83<1<7>t$0cf>4563A=>?6F>ag9'572=<=1b=5<7s-;ji7?<1:J416=O9hl0(<<;:568m47c2900e:188yg2fm3:1:7>50z&2e`<6;81C;8=4H0ce?!75<3>?7d?>d;29?l76m3:17d?>f;29?l7583:17d?=1;29?j7>93:17pl:6883>2<729q/=lk51208L2343A;jj6*>25800>o69m0;66g>1d83>>o69o0;66g>2183>>o6:80;66g>2383>>i6180;66sm5c794?1=83:p(o69m0;66g>1d83>>o69o0;66g>2183>>o6:80;66g>2383>>i6180;66sm5`694?1=83:p(5<0290;w)?ne;306>N0=:1C=lh4$007>0e5<5<5<ad8271=O?<90D5;h3b6?6=3f;2=7>5;|`507<72>0;6=u+1`g9564<@>?87E?nf:&261<6891b=5G1`d8 4432<80e:188k4?62900qo?;d;296?6=8r.:mh4k3:J416=O9hl0c<7>:188m47d2900qo:75;296?6=8r.:mh4>249K305<@8km7d?>c;29?j7>93:17pl;8283>7<729q/=lk51378L2343A;jj6g>1b83>>i6180;66sm49394?4=83:p(5<5290;w)?ne;311>N0=:1C=lh4i03`>5<ad8260=O?<90D5;|`73g<72;0;6=u+1`g9573<@>?87E?nf:k25f<722e:5<4?::a0<1=8381<7>t$0cf>4423A=>?6F>ag9j54e=831d=4?50;9~f1?229096=4?{%3ba?75=2B<9>5G1`d8m47d2900c<7>:188yg2>;3:1>7>50z&2e`<6:<1C;8=4H0ce?l76k3:17b?61;29?xd3180;6?4?:1y'5dc=9;?0D:;<;I3bb>o69j0;66a>9083>>{e<1l1<7<50;2x 4gb288>7E9:3:J2ec=n98i1<75`18394?=zj=2o6=4=:183!7fm3;996F8529K5d`5<3n7>52;294~"6il0:>85G7418L4ga3`;:o7>5;n3:5?6=3th?444?:383>5}#9ho1=?;4H670?M7fn2c:=n4?::m2=4<722wi85950;094?6|,8kn6<<:;I567>N6io1b=5<7s-;ji7?=5:J416=O9hl0e249K305<@8km7d?>c;29?j7>93:17pl;dd83>7<729q/=lk51378L2343A;jj6g>1b83>>i6180;66sm4ea94?4=83:p(5<5290;w)?ne;311>N0=:1C=lh4i03`>5<ad8260=O?<90D5;|`7b5<72;0;6=u+1`g9573<@>?87E?nf:k25f<722e:5<4?::a0`c=8381<7>t$0cf>4423A=>?6F>ag9j54e=831d=4?50;9~f1cd29096=4?{%3ba?75=2B<9>5G1`d8m47d2900c<7>:188yg2bi3:1>7>50z&2e`<6:<1C;8=4H0ce?l76k3:17b?61;29?xd3m10;6?4?:1y'5dc=9;?0D:;<;I3bb>o69j0;66a>9083>>{e7E9:3:J2ec=n98i1<75`18394?=zj=o?6=4=:183!7fm3;996F8529K5d`5<52;294~"6il0:>85G7418L4ga3`;:o7>5;n3:5?6=3th9oo4?:383>5}#9ho1=?;4H670?M7fn2c:=n4?::m2=4<722wi>8m50;;e4?6=8rB:mk5+1`g93<61=lu<9;1f>72=:909=7<=:3195g<6k3;o67e=:m09i7<9:3596=<5138j6pg6f083>!7>i33m<6`>9883?>o>mm0;6)?6a;;e4>h6100:76g6eb83>!7>i33m<6`>9881?>o>mk0;6)?6a;;e4>h6100876g6e`83>!7>i33m<6`>9887?>o>m00;6)?6a;;e4>h6100>76g6e983>!7>i33m<6`>9885?>o>m>0;6)?6a;;e4>h6100<76g6e783>!7>i33m<6`>988;?>o>m<0;6)?6a;;e4>h6100276g6e583>!7>i33m<6`>988b?>o>m;0;6)?6a;;e4>h6100i76g6e083>!7>i33m<6`>988`?>o>m90;6)?6a;;e4>h6100o76g6dg83>!7>i33m<6`>988f?>o>ll0;6)?6a;;e4>h6100m76g6de83>!7>i33m<6`>98824>=n1mi1<7*>9`8:b5=i9031=<54i8fa>5<#90k15k>4n0;:>44<3`3om7>5$0;b><`73g;257?<;:k:`<<72-;2m77i0:l2=<<6<21b5i950;&2=d<>n91e=4751498m28<07d7k5;29 4?f20l;7c?69;34?>o>l=0;6)?6a;;e4>h6100:465f9e194?"61h02j=5a18;95<=c:9j=f`=83.:5l46f19m513;m76g6cc83>!7>i33m<6`>98814>=n1jk1<7*>9`8:b5=i9031><54i8a:>5<#90k15k>4n0;:>74<3`3h47>5$0;b><`73g;257<<;:k:g2<72-;2m77i0:l2=<<5<21b5n850;&2=d<>n91e=4752498m2;<07d7l4;29 4?f20l;7c?69;04?>o>k:0;6)?6a;;e4>h61009465f9b394?"61h02j=5a18;96<=138m76g6b`83>!7>i33m<6`>98804>=n1k31<7*>9`8:b5=i9031?<54i8`;>5<#90k15k>4n0;:>64<3`3i:7>5$0;b><`73g;257=<;:k:f0<72-;2m77i0:l2=<<4<21b5o:50;&2=d<>n91e=4753498m2:<07d7m2;29 4?f20l;7c?69;14?>o>j80;6)?6a;;e4>h61008465f9c294?"61h02j=5a18;97<=o4;h;ba?6=,83j64h?;o3:=?5e32c2mi4?:%3:e??a82d:544139m76g6a983>!7>i33m<6`>98874>=n1h=1<7*>9`8:b5=i90318<54i8c5>5<#90k15k>4n0;:>14<3`3j97>5$0;b><`73g;257:<;:k:e1<72-;2m77i0:l2=<<3<21b5l=50;&2=d<>n91e=4754498m2=<07d7n0;29 4?f20l;7c?69;64?>o>1o0;6)?6a;;e4>h6100?465f98g94?"61h02j=5a18;90<=03:1(<7n:8d3?k7>13>m76g69683>!7>i33m<6`>98864>=n10?1<7*>9`8:b5=i90319<54i8;7>5<#90k15k>4n0;:>04<3`32?7>5$0;b><`73g;257;<;:k:=7<72-;2m77i0:l2=<<2<21b54?50;&2=d<>n91e=4755498m2<<07d77f;29 4?f20l;7c?69;74?>o>0l0;6)?6a;;e4>h6100>465f99f94?"61h02j=5a18;91<==83.:5l46f19m53:1(<7n:8d3?k7>13?m76g68483>!7>i33m<6`>98854>=n11>1<7*>9`8:b5=i9031:<54i8:0>5<#90k15k>4n0;:>34<3`33>7>5$0;b><`73g;2578<;:k:<4<72-;2m77i0:l2=<<1<21bm9650;&2=d<>n91e=4756498md20290/=4o59g28j4?>2?<07do;6;29 4?f20l;7c?69;44?>of<<0;6)?6a;;e4>h6100=465fa5694?"61h02j=5a18;92<=86=4+18c9=c6m10el=i:18'513!7>i33m<6`>98844>=ni:h1<7*>9`8:b5=i9031;<54i`1b>5<#90k15k>4n0;:>24<3`k857>5$0;b><`73g;2579<;:kb7=<72-;2m77i0:l2=<<0<21bm>950;&2=d<>n91e=4757498md51290/=4o59g28j4?>2><07do<5;29 4?f20l;7c?69;54?>of;=0;6)?6a;;e4>h6100<465fa2094?"61h02j=5a18;93<=k4?:%3:e??a82d:5448c:9je7c=83.:5l46f19m513=m76gn2c83>!7>i33m<6`>988;4>=ni;k1<7*>9`8:b5=i90314<54i`0:>5<#90k15k>4n0;:>=4<3`k9;7>5$0;b><`73g;2576<;:kb63<72-;2m77i0:l2=<n91e=4758498md43290/=4o59g28j4?>21<07do=3;29 4?f20l;7c?69;:4?>of:;0;6)?6a;;e4>h61003465fa3394?"61h02j=5a18;9<<=e32cj=h4?:%3:e??a82d:5447c:9je4e=83.:5l46f19m5132m76gn1883>!7>i33m<6`>988:4>=ni821<7*>9`8:b5=i90315<54i`34>5<#90k15k>4n0;:><4<3`k::7>5$0;b><`73g;2577<;:kb50<72-;2m77i0:l2=<<><21bm<:50;&2=d<>n91e=4759498md74290/=4o59g28j4?>20<07do>1;29 4?f20l;7c?69;;4?>of990;6)?6a;;e4>h61002465fa1d94?"61h02j=5a18;9=<=n:18'5133m76gn0983>!7>i33m<6`>988b4>=ni9<1<7*>9`8:b5=i9031m<54i`26>5<#90k15k>4n0;:>d4<3`k;87>5$0;b><`73g;257o<;:kb46<72-;2m77i0:l2=<n91e=475a498md66290/=4o59g28j4?>2h<07do?0;29 4?f20l;7c?69;c4?>o>no0;6)?6a;;e4>h6100j465f9gg94?"61h02j=5a18;9e<=13km76g6f783>!7>i33m<6`>988a4>=n1o?1<7*>9`8:b5=i9031n<54i8d7>5<#90k15k>4n0;:>g4<3`3m?7>5$0;b><`73g;257l<;:k:b7<72-;2m77i0:l2=<n91e=475b498m2k<07d7k8;29 4?f20l;7c?69;`4?>o>km0;6)?6a;;e4>h6100i465f9b094?"61h02j=5a18;9f<=13hm76gn3d83>!7>i33m<6`>988`4>=ni:91<7*>9`8:b5=i9031o<54i`0;>5<#90k15k>4n0;:>f4<3`k:h7>5$0;b><`73g;257m<;:kb57<72-;2m77i0:l2=<n91e=475c498m<`d290/=4o59g28j4?>2j<07d7jf;29 4?f20l;7c?69;a4?>o>090;6)?6a;;e4>h6100h465fb6794?"61h0i;95a18;94>=nj>91<7*>9`8a31=i9031=65fb6394?"61h0i;95a18;96>=nj>:1<7*>9`8a31=i9031?65fb7d94?"61h0i;95a18;90>=nj?o1<7*>9`8a31=i9031965fb7f94?"61h0i;95a18;92>=nj?i1<7*>9`8a31=i9031;65fb7`94?"61h0i;95a18;9<>=nj?k1<7*>9`8a31=i9031565fb7;94?"61h0i;95a18;9e>=nj?21<7*>9`8a31=i9031n65fb7494?"61h0i;95a18;9g>=nj??1<7*>9`8a31=i9031h65fb7694?"61h0i;95a18;9a>=nj?91<7*>9`8a31=i9031j65fb7094?"61h0i;95a18;955=3:9jf0c=83.:5l4m759m5>0b<76:078?ld0k3:1(<7n:c57?k7>13;=76gm7c83>!7>i3h<86`>98823>=nj>k1<7*>9`8a31=i9031=554ic5:>5<#90k1n::4n0;:>4?<3`h<47>5$0;b>g133g;257?n;:ka32<72-;2m7l84:l2=<<6j21bn:850;&2=d28n07dl97;29 4?f2k=?7c?69;3f?>oe=j0;6)?6a;`40>h6100:j65f13`;>5<#90k1=?l8;o3:=?6<3`;8=l4?:%3:e?75j>1e=4751:9j567>290/=4o513`4?k7>13807d?<1983>!7>i3;9n:5a18;97>=n9:;<6=4+18c957d03g;257:4;h3053<72-;2m7?=b69m5?::18'55<#90k1=?l8;o3:=?><3`;8=?4?:%3:e?75j>1e=4759:9j5676290/=4o513`4?k7>13k07d?<0g83>!7>i3;9n:5a18;9f>=n9::n6=4+18c957d03g;257m4;h304a<72-;2m7?=b69m5>l:18'55<#90k1=?l8;o3:=?7732c:?=750;&2=d<6:k=0b<76:038?l74810;6)?6a;31f2=i9031=?54i0133?6=,83j6<>9:18'5o6;9>1<7*>9`826g198823>=n9:::6=4+18c957d03g;257?7;:k2756=83.:5l4>2c58j4?>28307d?=fg83>!7>i3;9n:5a18;95d=5$0;b>44e?2d:544>b:9j57`c290/=4o513`4?k7>13;h76g>2ga94?"61h0:>o94n0;:>4b<3`;9jo4?:%3:e?75j>1e=4751d98m44a13:1(<7n:00a3>h6100:j65f13d;>5<#90k1=?l8;o3:=?4732c:>k950;&2=d<6:k=0b<76:338?l75n?0;6)?6a;31f2=i9031>?54i00e1?6=,83j6<o6:o91<7*>9`826g198813>=n9;l;6=4+18c957d03g;257<7;:k26`c=83.:5l4>2c58j4?>2;307d?=ee83>!7>i3;9n:5a18;96d=5$0;b>44e?2d:544=b:9j57ce290/=4o513`4?k7>138h76g>2dc94?"61h0:>o94n0;:>7b<3`;9i44?:%3:e?75j>1e=4752d98m44b03:1(<7n:00a3>h61009j65f13g4>5<#90k1=?l8;o3:=?5732c:>h850;&2=d<6:k=0b<76:238?l75m<0;6)?6a;31f2=i9031??54i00f7?6=,83j6<o6:l;1<7*>9`826g1;4;h31a5<72-;2m7?=b69m598803>=n9;nn6=4+18c957d03g;257=7;:k26ab=83.:5l4>2c58j4?>2:307d?=db83>!7>i3;9n:5a18;97d=5$0;b>44e?2d:544139h76g>2e:94?"61h0:>o94n0;:>6b<3`;9h:4?:%3:e?75j>1e=4753d98m44c>3:1(<7n:00a3>h61008j65f13f6>5<#90k1=?l8;o3:=?2732c:>i:50;&2=d<6:k=0b<76:538?l75l:0;6)?6a;31f2=i90318?54i00g6?6=,83j6<:18'5o6:m:1<7*>9`826g198873>=n9;ih6=4+18c957d03g;257:7;:k26fd=83.:5l4>2c58j4?>2=307d?=c`83>!7>i3;9n:5a18;90d=5$0;b>44e?2d:544;b:9j57e?290/=4o513`4?k7>13>h76g>2b594?"61h0:>o94n0;:>1b<3`;9o;4?:%3:e?75j>1e=4754d98m44d=3:1(<7n:00a3>h6100?j65f13a7>5<#90k1=?l8;o3:=?3732c:>n<50;&2=d<6:k=0b<76:438?l75k80;6)?6a;31f2=i90319?54i00`4?6=,83j6<o6:ko1<7*>9`826g198863>=n9;hi6=4+18c957d03g;257;7;:k26gg=83.:5l4>2c58j4?>2<307d?=b883>!7>i3;9n:5a18;91d=5$0;b>44e?2d:544:b:9j5677290/=4o513`4?k7>13?h76g>31794?"61h0:>o94n0;:>0b<3`;9jl4?:%3:e?75j>1e=4755d98m44bn3:1(<7n:00a3>h6100>j65f13g7>5<#90k1=?l8;o3:=?0732c:>i750;&2=d<6:k=0b<76:738?l75kl0;6)?6a;31f2=i9031:?54i00`7?6=,83j6<oaml0;6)?6a;df`>h6100;76g>04294?"61h0mii5a18;95>=n99>m6=4+18c9b`b13=07d??4883>!7>i3lnh6`>988;?>o68=21<7*>9`8eaa=i9031565f1164>5<#90k1jhj4n0;:>d=5$0;b>ccc3g;257l4;h3301<72-;2m7hjd:l2=<2l10e<>;1;29 4?f2ooo7c?69;d8?l77<90;6)?6a;df`>h6100:<65f111e>5<#90k1jhj4n0;:>47<3`;;?h4?:%3:e?`bl2d:544>2:9j555c290/=4o5fdf8j4?>28907d??3b83>!7>i3lnh6`>98820>=n999j6=4+18c9b`b21b===7:18'50;6)?6a;df`>h6100:465f1115>5<#90k1jhj4n0;:>4?<3`;;?84?:%3:e?`bl2d:544>a:9j5553290/=4o5fdf8j4?>28h07d??3283>!7>i3lnh6`>9882g>=n99996=4+18c9b`bh61009<65f110g>5<#90k1jhj4n0;:>77<3`;;>n4?:%3:e?`bl2d:544=2:9j554e290/=4o5fdf8j4?>2;907d??2`83>!7>i3lnh6`>98810>=n99826=4+18c9b`b21b==<8:18'5h61009465f1107>5<#90k1jhj4n0;:>7?<3`;;>>4?:%3:e?`bl2d:544=a:9j5545290/=4o5fdf8j4?>2;h07d??2083>!7>i3lnh6`>9881g>=n998;6=4+18c9b`bh61008<65f113`>5<#90k1jhj4n0;:>67<3`;;=o4?:%3:e?`bl2d:544<2:9j557>290/=4o5fdf8j4?>2:907d??1983>!7>i3lnh6`>98800>=n99;<6=4+18c9b`b;4;h3353<72-;2m7hjd:l2=<<4>21b==?::18'5h61008465f1130>5<#90k1jhj4n0;:>6?<3`;;=?4?:%3:e?`bl2d:5442:h07d??1183>!7>i3lnh6`>9880g>=n99:n6=4+18c9b`bj4;h334a<72-;2m7hjd:l2=<<4m21b==>l:18'5h6100?<65f112b>5<#90k1jhj4n0;:>17<3`;;<44?:%3:e?`bl2d:544;2:9j556?290/=4o5fdf8j4?>2=907d??0683>!7>i3lnh6`>98870>=n99:=6=4+18c9b`b21b==><:18'5h6100?465f1122>5<#90k1jhj4n0;:>1?<3`;;<=4?:%3:e?`bl2d:544;a:9jbc`=83.:5l4iee9m513>o76gifb83>!7>i3lnh6`>9887a>=nnoh1<7*>9`8eaa=i90318k54igdb>5<#90k1jhj4n0;:>06<3`lm47>5$0;b>ccc3g;257;>;:keb2<72-;2m7hjd:l2=<<2:21bjk850;&2=d2<>07dhi4;29 4?f2ooo7c?69;76?>oan:0;6)?6a;df`>h6100>:65ffg094?"61h0mii5a18;912=32cmik4?:%3:e?`bl2d:544:a:9j5536290/=4o5fdf8j4?>2!7>i3lnh6`>9886g>=n999i6=4+18c9b`bh6100=<65f112e>5<#90k1jhj4n0;:>37<3`;;<94?:%3:e?`bl2d:54492:9jbc?=83.:5l4iee9m5:10ekkl:18'55<#90k1==l6;o3:=?7<3`;:=o4?:%3:e?77j01e=4752:9j547f290/=4o511`:?k7>13907d?>1883>!7>i3;;n45a18;90>=n98;36=4+18c955d>3g;257;4;h3252<72-;2m7??b89m521b=5<#90k1==l6;o3:=??<3`;:=>4?:%3:e?77j01e=475a:9j5476290/=4o511`:?k7>13h07d?>1183>!7>i3;;n45a18;9g>=n98:m6=4+18c955d>3g;257j4;h324`<72-;2m7??b89m5k:18'5m9:l2=<<6921b=<>n:18'5o69931<7*>9`824g?98821>=n98:>6=4+18c955d>3g;257?9;:k2552=83.:5l4>0c;8j4?>28=07d?>0283>!7>i3;;n45a18;95==7>5$0;b>46e12d:544>9:9j5466290/=4o511`:?k7>13;j76g>11294?"61h0:4d<3`;;jk4?:%3:e?77j01e=4751b98m46am3:1(<7n:02a=>h6100:h65f11dg>5<#90k1==l6;o3:=?7b32c:=54i02e=?6=,83j6<>m9:l2=<<5921b==h7:18'5o68o=1<7*>9`824g?i5;29 4?f28:i56`>98811>=n99l?6=4+18c955d>3g;257<9;:k24c5=83.:5l4>0c;8j4?>2;=07d??f383>!7>i3;;n45a18;96==5$0;b>46e12d:544=9:9j55ca290/=4o511`:?k7>138j76g>0dg94?"61h0:7d<3`;;ii4?:%3:e?77j01e=4752b98m46bk3:1(<7n:02a=>h61009h65f11ga>5<#90k1==l6;o3:=?4b32c:m9:l2=<<4921b==k8:18'5o68l?1<7*>9`824g?=4;h33a1<72-;2m7??b89m5j3;29 4?f28:i56`>98801>=n99o96=4+18c955d>3g;257=9;:k24`7=83.:5l4>0c;8j4?>2:=07d??e183>!7>i3;;n45a18;97==5$0;b>46e12d:544<9:9j55bb290/=4o511`:?k7>139j76g>0ef94?"61h0:6d<3`;;hn4?:%3:e?77j01e=4753b98m46ci3:1(<7n:02a=>h61008h65f11f:>5<#90k1==l6;o3:=?5b32c:0;6)?6a;33f<=i90318=54i02g2?6=,83j6<>m9:l2=<<3921b==j::18'5o68m>1<7*>9`824g?k2;29 4?f28:i56`>98871>=n99n:6=4+18c955d>3g;257:9;:k24f`=83.:5l4>0c;8j4?>2==07d??cd83>!7>i3;;n45a18;90==5$0;b>46e12d:544;9:9j55ed290/=4o511`:?k7>13>j76g>0b`94?"61h0:1d<3`;;ol4?:%3:e?77j01e=4754b98m46d13:1(<7n:02a=>h6100?h65f11a;>5<#90k1==l6;o3:=?2b32c:m9:l2=<<2921b==m<:18'5o68j81<7*>9`824g?l0;29 4?f28:i56`>98861>=n99hm6=4+18c955d>3g;257;9;:k24gc=83.:5l4>0c;8j4?>2<=07d??be83>!7>i3;;n45a18;91==5$0;b>46e12d:544:9:9j55de290/=4o511`:?k7>13?j76g>10f94?"61h0:0d<3`;:=?4?:%3:e?77j01e=4755b98m477?3:1(<7n:02a=>h6100>h65f11d`>5<#90k1==l6;o3:=?3b32c:m9:l2=<<1921b==j?:18'5o68j?1<7*>9`824g?=10e9883?>o69l21<7*>9`825=3h6100?76g>1d694?"61h0:=5;4n0;:>0=5$0;b>47?=2d:5449;:k25`4=83.:5l4>1978j4?>2>10e988;?>o69l:1<7*>9`825=3h6100h76g>1e`94?"61h0:=5;4n0;:>a=5$0;b>47?=2d:544j;:k25a?=83.:5l4>1978j4?>2o10e98824>=n98n<6=4+18c954>23g;257?>;:k25a0=83.:5l4>1978j4?>28807d?>d483>!7>i3;:485a18;956=5$0;b>47?=2d:544>4:9j54b5290/=4o510:6?k7>13;>76g>1e394?"61h0:=5;4n0;:>40<3`;:h=4?:%3:e?760<1e=4751698m47dn3:1(<7n:03;1>h6100:465f10af>5<#90k1=<6:;o3:=?7>32c:=nj50;&2=d<691?0b<76:0c8?l76kj0;6)?6a;32<0=i9031=o54i03`f?6=,83j67c?69;3g?>o69j31<7*>9`825=3849m598814>=n98i>6=4+18c954>23g;257<>;:k25f2=83.:5l4>1978j4?>2;807d?>c283>!7>i3;:485a18;966=7>5$0;b>47?=2d:544=4:9j54e6290/=4o510:6?k7>138>76g>1b294?"61h0:=5;4n0;:>70<3`;:nk4?:%3:e?760<1e=4752698m47em3:1(<7n:03;1>h61009465f10``>5<#90k1=<6:;o3:=?4>32c:=ol50;&2=d<691?0b<76:3c8?l76jh0;6)?6a;32<0=i9031>o54i03a=?6=,83j67c?69;0g?>o69k=1<7*>9`825=3849m598804>=n98h?6=4+18c954>23g;257=>;:k25g5=83.:5l4>1978j4?>2:807d?>b083>!7>i3;:485a18;976=5$0;b>47?=2d:544<4:9j54ga290/=4o510:6?k7>139>76g>1`g94?"61h0:=5;4n0;:>60<3`;:mi4?:%3:e?760<1e=4753698m47fk3:1(<7n:03;1>h61008465f10ca>5<#90k1=<6:;o3:=?5>32c:=lo50;&2=d<691?0b<76:2c8?l76i00;6)?6a;32<0=i9031?o54i03b7c?69;1g?>o69h?1<7*>9`825=3k4;h32e1<72-;2m7?>849m598874>=n98k96=4+18c954>23g;257:>;:k25d7=83.:5l4>1978j4?>2=807d?>a183>!7>i3;:485a18;906=5$0;b>47?=2d:544;4:9j54?b290/=4o510:6?k7>13>>76g>18f94?"61h0:=5;4n0;:>10<3`;:5o4?:%3:e?760<1e=4754698m47>i3:1(<7n:03;1>h6100?465f10;:>5<#90k1=<6:;o3:=?2>32c:=4650;&2=d<691?0b<76:5c8?l761>0;6)?6a;32<0=i90318o54i03:2?6=,83j67c?69;6g?>o690>1<7*>9`825=3849m598864>=n983;6=4+18c954>23g;257;>;:k25=`=83.:5l4>1978j4?>2<807d?>8d83>!7>i3;:485a18;916=5$0;b>47?=2d:544:4:9j54>d290/=4o510:6?k7>13?>76g>19`94?"61h0:=5;4n0;:>00<3`;:4l4?:%3:e?760<1e=4755698m47?13:1(<7n:03;1>h6100>465f10:;>5<#90k1=<6:;o3:=?3>32c:=5950;&2=d<691?0b<76:4c8?l76m00;6)?6a;32<0=i90319o54i03ga?6=,83j67c?69;7g?>o69j21<7*>9`825=3849m598854>=n98k<6=4+18c954>23g;2578>;:k251978j4?>2?807d?>9083>!7>i3;:485a18;926=5$0;b>47?=2d:54494:9j5735290/=4o51372?k7>13:07d?=b583>!7>i3;99<5a18;95>=n9;h86=4+18c957363g;257<4;h31f7<72-;2m7?=509m5:18'55<#90k1=?;>;o3:=?0<3`;9mh4?:%3:e?75=81e=4757:9j57gc290/=4o51372?k7>13207d?=ab83>!7>i3;99<5a18;9=>=n9;ki6=4+18c957363g;257o4;h31e<<72-;2m7?=509m50;6)?6a;3114=i9031h65f13c5>5<#90k1=?;>;o3:=?c<3`;9m84?:%3:e?75=81e=475f:9j57g3290/=4o51372?k7>13;;76g>2`194?"61h0:>8?4n0;:>47<3`;9m?4?:%3:e?75=81e=4751398m44f93:1(<7n:0065>h6100:?65f13c3>5<#90k1=?;>;o3:=?7332c:>4k50;&2=d<6:<;0b<76:078?l751m0;6)?6a;3114=i9031=;54i00:g?6=,83j6<<:1:l2=<<6?21b=?7m:18'5o6:0k1<7*>9`82607=6`>9882f>=n9;3<6=4+18c957363g;257?l;:k26<0=83.:5l4>2438j4?>28n07d?=9483>!7>i3;99<5a18;95`=5$0;b>44292d:544>f:9j57?5290/=4o51372?k7>138;76g>28394?"61h0:>8?4n0;:>77<3`;95=4?:%3:e?75=81e=4752398m44?n3:1(<7n:0065>h61009?65f13:f>5<#90k1=?;>;o3:=?4332c:>5j50;&2=d<6:<;0b<76:378?l750j0;6)?6a;3114=i9031>;54i00;f?6=,83j6<<:1:l2=<<5?21b=?6n:18'5o6:121<7*>9`82607=6`>9881f>=n9;2>6=4+18c957363g;2572438j4?>2;n07d?=8283>!7>i3;99<5a18;96`=7>5$0;b>44292d:544=f:9j57>6290/=4o51372?k7>139;76g>29294?"61h0:>8?4n0;:>67<3`;9;k4?:%3:e?75=81e=4753398m440l3:1(<7n:0065>h61008?65f135`>5<#90k1=?;>;o3:=?5332c:>:l50;&2=d<6:<;0b<76:278?l75?h0;6)?6a;3114=i9031?;54i004=?6=,83j6<<:1:l2=<<4?21b=?97:18'5o6:>=1<7*>9`8260774;h3133<72-;2m7?=509m5=6`>9880f>=n9;=?6=4+18c957363g;257=l;:k2624=83.:5l4>2438j4?>2:n07d?=7083>!7>i3;99<5a18;97`=5$0;b>44292d:54413>;76g>27g94?"61h0:>8?4n0;:>17<3`;9:i4?:%3:e?75=81e=4754398m441k3:1(<7n:0065>h6100??65f134a>5<#90k1=?;>;o3:=?2332c:>;o50;&2=d<6:<;0b<76:578?l75>00;6)?6a;3114=i90318;54i0053?6=,83j6<<:1:l2=<<3?21b=?89:18'5o6:??1<7*>9`82607=6`>9887f>=n9;<96=4+18c957363g;257:l;:k2637=83.:5l4>2438j4?>2=n07d?=6183>!7>i3;99<5a18;90`=j7>5$0;b>44292d:544;f:9j573b290/=4o51372?k7>13?;76g>24a94?"61h0:>8?4n0;:>07<3`;99o4?:%3:e?75=81e=4755398m442i3:1(<7n:0065>h6100>?65f137:>5<#90k1=?;>;o3:=?3332c:>8650;&2=d<6:<;0b<76:478?l75=>0;6)?6a;3114=i90319;54i0062?6=,83j6<<:1:l2=<<2?21b=?;::18'5o6:<>1<7*>9`82607=6`>9886f>=n9;kj6=4+18c957363g;257;l;:k26<`=83.:5l4>2438j4?>2!7>i3;99<5a18;91`=5$0;b>44292d:544:f:9j571b290/=4o51372?k7>13<;76g>26194?"61h0:>8?4n0;:>37<3`;9:54?:%3:e?75=81e=4756398m442l3:1(<7n:0065>h6100=?65f1373>5<#90k1=?;>;o3:=?0332cij?4?:%3:e?da92d:544?;:k`11<72-;2m7li1:l2=<<632ch9>4?:%3:e?da92d:544=;:k`17<72-;2m7li1:l2=<<432ch9<4?:%3:e?da92d:544;;:k`15<72-;2m7li1:l2=<<232ch8k4?:%3:e?da92d:5449;:k`0`<72-;2m7li1:l2=<<032ch8i4?:%3:e?da92d:5447;:k`0f<72-;2m7li1:l2=<<>32ch8o4?:%3:e?da92d:544n;:k`0<<72-;2m7li1:l2=<0:9jg15=83.:5l4mf09m513;876gl4183>!7>i3hm=6`>98820>=nk:o1<7*>9`8ab4=i9031=854ib1g>5<#90k1nk?4n0;:>40<3`i8o7>5$0;b>g`63g;257?8;:k`7g<72-;2m7li1:l2=<<6021bo>o50;&2=d290/=4o5bg38j4?>28k07dm<8;29 4?f2kl:7c?69;3a?>od;>0;6)?6a;`e5>h6100:o65fc2494?"61h0ij<5a18;95a=6=4+18c9fc7;o3:=?7a32ch??4?:%3:e?da92d:544=0:9jg67=83.:5l4mf09m5138876gl2d83>!7>i3hm=6`>98810>=nk;n1<7*>9`8ab4=i9031>854ib0`>5<#90k1nk?4n0;:>70<3`i9n7>5$0;b>g`63g;257<8;:k`6d<72-;2m7li1:l2=<<5021bo?650;&2=d2;k07dm=6;29 4?f2kl:7c?69;0a?>od:<0;6)?6a;`e5>h61009o65fc3694?"61h0ij<5a18;96a=;o3:=?4a32ch><4?:%3:e?da92d:544<0:9jg76=83.:5l4mf09m5139876gl1b83>!7>i3hm=6`>98800>=nk8h1<7*>9`8ab4=i9031?854ib3b>5<#90k1nk?4n0;:>60<3`i:57>5$0;b>g`63g;257=8;:k`5=<72-;2m7li1:l2=<<4021bo<950;&2=d2:k07dm>5;29 4?f2kl:7c?69;1a?>od9=0;6)?6a;`e5>h61008o65fc0094?"61h0ij<5a18;97a=k4;ha24?6=,83j6oh>;o3:=?5a32chk:18'513>876gl0c83>!7>i3hm=6`>98870>=nk9k1<7*>9`8ab4=i90318854ib2:>5<#90k1nk?4n0;:>10<3`i;;7>5$0;b>g`63g;257:8;:k`43<72-;2m7li1:l2=<<3021bo=;50;&2=d2=k07dm?3;29 4?f2kl:7c?69;6a?>od8;0;6)?6a;`e5>h6100?o65fc1394?"61h0ij<5a18;90a=;o3:=?2a32cijh4?:%3:e?da92d:544:0:9jfce=83.:5l4mf09m513?876gmf883>!7>i3hm=6`>98860>=njo21<7*>9`8ab4=i90319854icd4>5<#90k1nk?4n0;:>00<3`hm:7>5$0;b>g`63g;257;8;:kab0<72-;2m7li1:l2=<<2021bnk:50;&2=d2odh6100>o65fc2d94?"61h0ij<5a18;91a=;o3:=?3a32ch=h4?:%3:e?da92d:54490:9jg45=83.:5l4mf09m5810en>7:18'513<876gmf183>!7>i3hm=6`>98850>=nkko1<7*>9`8`fa=i9031<65fd3294?"61h0hni5a18;95>=nl8l1<7*>9`8`fa=i9031>65fd0g94?"61h0hni5a18;97>=nl8n1<7*>9`8`fa=i9031865fd0a94?"61h0hni5a18;91>=nl8h1<7*>9`8`fa=i9031:65fd0c94?"61h0hni5a18;93>=nl831<7*>9`8`fa=i9031465fd0:94?"61h0hni5a18;9=>=nl8=1<7*>9`8`fa=i9031m65fd0794?"61h0hni5a18;9f>=nl8>1<7*>9`8`fa=i9031o65fd0194?"61h0hni5a18;9`>=nl881<7*>9`8`fa=i9031i65fd0394?"61h0hni5a18;9b>=nl8:1<7*>9`8`fa=i9031==54ie2e>5<#90k1ooj4n0;:>47<3`n;i7>5$0;b>fdc3g;257?=;:kg4a<72-;2m7mmd:l2=<<6;21bh=m50;&2=d28?07dj?9;29 4?f2jho7c?69;35?>oc810;6)?6a;aa`>h6100:;65fd1594?"61h0hni5a18;95==b:9j`55=83.:5l4lbe9m5=:18'513;n76glfg83>!7>i3iih6`>9882b>=nkoo1<7*>9`8`fa=i9031>=54ibdg>5<#90k1ooj4n0;:>77<3`imo7>5$0;b>fdc3g;257<=;:k`bg<72-;2m7mmd:l2=<<5;21boko50;&2=d290/=4o5ccf8j4?>2;?07dmi8;29 4?f2jho7c?69;05?>odn>0;6)?6a;aa`>h61009;65fcg494?"61h0hni5a18;96==138n76gled83>!7>i3iih6`>9881b>=nkln1<7*>9`8`fa=i9031?=54ibg`>5<#90k1ooj4n0;:>67<3`inn7>5$0;b>fdc3g;257==;:k`a<<72-;2m7mmd:l2=<<4;21boh650;&2=d2:?07dmj6;29 4?f2jho7c?69;15?>odm<0;6)?6a;aa`>h61008;65fcd694?"61h0hni5a18;97==74;haf6?6=,83j6nlk;o3:=?5f32chi<4?:%3:e?eel2d:544139n76gldb83>!7>i3iih6`>9880b>=nkmh1<7*>9`8`fa=i90318=54ibfb>5<#90k1ooj4n0;:>17<3`io57>5$0;b>fdc3g;257:=;:k``=<72-;2m7mmd:l2=<<3;21boi950;&2=d2=?07dmk5;29 4?f2jho7c?69;65?>odl:0;6)?6a;aa`>h6100?;65fce094?"61h0hni5a18;90==13>n76glcc83>!7>i3iih6`>9887b>=nkjk1<7*>9`8`fa=i90319=54iba;>5<#90k1ooj4n0;:>07<3`ih;7>5$0;b>fdc3g;257;=;:k`g3<72-;2m7mmd:l2=<<2;21bon;50;&2=d2odk;0;6)?6a;aa`>h6100>;65fcb394?"61h0hni5a18;91==<4?:%3:e?eel2d:544:b:9j`40=83.:5l4lbe9m5m:18'513?n76glf483>!7>i3iih6`>9886b>=nklk1<7*>9`8`fa=i9031:=54ibfe>5<#90k1ooj4n0;:>37<3`io87>5$0;b>fdc3g;2578=;:k`g<<72-;2m7mmd:l2=<<1;21boom50;&2=df290/=4o5d9;8j4?>2910eikl:18'52;10eikn:18'5290/=4o5d9;8j4?>2=10eik7:18'52?10eik9:18'52110eik;:18'52h10eik>:18'52j10eiji:18'52l10eijk:18'528:07djkb;29 4?f2m227c?69;32?>oclh0;6)?6a;f;=>h6100:>65fde;94?"61h0o445a18;956=6:9j`a2=83.:5l4k889m510eij<:18'513;276gkd083>!7>i3n356`>9882e>=nlm:1<7*>9`8g<<=i9031=o54ieae>5<#90k1h574n0;:>4e<3`nhi7>5$0;b>a>>3g;257?k;:kgga<72-;2m7j79:l2=<<6m21bhnl50;&2=d2;:07djl9;29 4?f2m227c?69;02?>ock10;6)?6a;f;=>h61009>65fdb594?"61h0o445a18;966=10eim=:18'5138276gkbg83>!7>i3n356`>9881e>=nlko1<7*>9`8g<<=i9031>o54ie`g>5<#90k1h574n0;:>7e<3`nio7>5$0;b>a>>3g;257290/=4o5d9;8j4?>2::07djm8;29 4?f2m227c?69;12?>ocj>0;6)?6a;f;=>h61008>65fdc794?"61h0o445a18;976=:4;hfa7?6=,83j6i66;o3:=?5232con?4?:%3:e?b?12d:544<6:9j`g7=83.:5l4k889m510eil?:18'5139276gkad83>!7>i3n356`>9880e>=nlhn1<7*>9`8g<<=i9031?o54iec`>5<#90k1h574n0;:>6e<3`njm7>5$0;b>a>>3g;257=k;:kge<<72-;2m7j79:l2=<<4m21bhl650;&2=d2=:07djn6;29 4?f2m227c?69;62?>oci<0;6)?6a;f;=>h6100?>65fd`694?"61h0o445a18;906=10ei7j:18'5l3:1(<7n:e::?k7>13>276gk9b83>!7>i3n356`>9887e>=nl0h1<7*>9`8g<<=i90318o54ie;b>5<#90k1h574n0;:>1e<3`n257>5$0;b>a>>3g;257:k;:kg==<72-;2m7j79:l2=<<3m21bh4950;&2=d2<:07dj64;29 4?f2m227c?69;72?>oc1:0;6)?6a;f;=>h6100>>65fd8094?"61h0o445a18;916=10ei6k:18'513?276gk8c83>!7>i3n356`>9886e>=nlln1<7*>9`8g<<=i90319o54ieg1>5<#90k1h574n0;:>0e<3`no;7>5$0;b>a>>3g;257;k;:kggf<72-;2m7j79:l2=<<2m21bhn?50;&2=d2?:07djnb;29 4?f2m227c?69;42?>oci90;6)?6a;f;=>h6100=>65fd8794?"61h0o445a18;926=5$0;b>`323g;257?4;hga3?6=,83j6h;:;o3:=?4<3`oi:7>5$0;b>`323g;257=4;hga1?6=,83j6h;:;o3:=?2<3`oi87>5$0;b>`323g;257;4;hga7?6=,83j6h;:;o3:=?0<3`oi>7>5$0;b>`323g;25794;hga5?6=,83j6h;:;o3:=?><3`oi<7>5$0;b>`323g;25774;hgbb?6=,83j6h;:;o3:=?g<3`ojh7>5$0;b>`323g;257l4;hgbg?6=,83j6h;:;o3:=?e<3`ojn7>5$0;b>`323g;257j4;hgbe?6=,83j6h;:;o3:=?c<3`oj57>5$0;b>`323g;257h4;hgb1:9jad0=83.:5l4j549m513;?76gja383>!7>i3o>96`>98821>=nmh;1<7*>9`8f10=i9031=;54idc3>5<#90k1i8;4n0;:>41<3`o2j7>5$0;b>`323g;257?7;:kf=`<72-;2m7k:5:l2=<<6121bi4j50;&2=d28h07dk6b;29 4?f2l?>7c?69;3`?>ob1h0;6)?6a;g61>h6100:h65fe8;94?"61h0n985a18;95`=:3:1(<7n:d76?k7>138?76gj9083>!7>i3o>96`>98811>=nm0:1<7*>9`8f10=i9031>;54id:e>5<#90k1i8;4n0;:>71<3`o3i7>5$0;b>`323g;257<7;:kff290/=4o5e478j4?>2;h07dk79;29 4?f2l?>7c?69;0`?>ob010;6)?6a;g61>h61009h65fe9594?"61h0n985a18;96`=:18'5139?76gj7g83>!7>i3o>96`>98801>=nm>o1<7*>9`8f10=i9031?;54id5g>5<#90k1i8;4n0;:>61<3`o5$0;b>`323g;257=7;:kf3g<72-;2m7k:5:l2=<<4121bi:o50;&2=d290/=4o5e478j4?>2:h07dk88;29 4?f2l?>7c?69;1`?>ob??0;6)?6a;g61>h61008h65fe6794?"61h0n985a18;97`=h4;hg47?6=,83j6h;:;o3:=?2732cn;?4?:%3:e?c2=2d:544;1:9ja27=83.:5l4j549m513>?76gj6d83>!7>i3o>96`>98871>=nm?n1<7*>9`8f10=i90318;54id4a>5<#90k1i8;4n0;:>11<3`o=m7>5$0;b>`323g;257:7;:kf2<<72-;2m7k:5:l2=<<3121bi;650;&2=d2=h07dk96;29 4?f2l?>7c?69;6`?>ob><0;6)?6a;g61>h6100?h65fe7694?"61h0n985a18;90`=13??76gj5b83>!7>i3o>96`>98861>=nm9`8f10=i90319;54id7b>5<#90k1i8;4n0;:>01<3`o>57>5$0;b>`323g;257;7;:kf1=<72-;2m7k:5:l2=<<2121bi8950;&2=d290/=4o5e478j4?>27c?69;7`?>obi:0;6)?6a;g61>h6100>h65fe8:94?"61h0n985a18;91`=;10eh8>:18'513!7>i3l9=6`>9883?>oa0=0;6)?6a;d15>h6100:76gi8283>!7>i3l9=6`>9881?>oa0;0;6)?6a;d15>h6100876gi8083>!7>i3l9=6`>9887?>oa090;6)?6a;d15>h6100>76gi7g83>!7>i3l9=6`>9885?>oa?l0;6)?6a;d15>h6100<76gi7e83>!7>i3l9=6`>988;?>oa?j0;6)?6a;d15>h6100276gi7c83>!7>i3l9=6`>988b?>oa?00;6)?6a;d15>h6100i76gi7983>!7>i3l9=6`>988`?>oa?>0;6)?6a;d15>h6100o76gi7783>!7>i3l9=6`>988f?>oa?<0;6)?6a;d15>h6100m76gi7583>!7>i3l9=6`>98824>=nn>91<7*>9`8e64=i9031=<54ig51>5<#90k1j??4n0;:>44<3`l<=7>5$0;b>c463g;257?<;:ke35<72-;2m7h=1:l2=<<6<21bj;k50;&2=d28<07dh9c;29 4?f2o8:7c?69;34?>oa>k0;6)?6a;d15>h6100:465ff7c94?"61h0m><5a18;95<=;o3:=?7e32cm::4?:%3:e?`592d:544>c:9jb30=83.:5l4i209m513;m76gi6383>!7>i3l9=6`>98814>=nn?;1<7*>9`8e64=i9031><54ig43>5<#90k1j??4n0;:>74<3`l>j7>5$0;b>c463g;257<<;:ke1`<72-;2m7h=1:l2=<<5<21bj8j50;&2=d2;<07dh:b;29 4?f2o8:7c?69;04?>oa=h0;6)?6a;d15>h61009465ff4:94?"61h0m><5a18;96<=;o3:=?4e32cm984?:%3:e?`592d:544=c:9jb02=83.:5l4i209m5138m76gi5083>!7>i3l9=6`>98804>=nn<:1<7*>9`8e64=i9031?<54ig6e>5<#90k1j??4n0;:>64<3`l?h7>5$0;b>c463g;257=<;:ke0f<72-;2m7h=1:l2=<<4<21bj9l50;&2=d2:<07dh;9;29 4?f2o8:7c?69;14?>oa<10;6)?6a;d15>h61008465ff5594?"61h0m><5a18;97<==6=4+18c9b77o4;hd71?6=,83j6k<>;o3:=?5e32cm894?:%3:e?`592d:544:18'5139m76gi3g83>!7>i3l9=6`>98874>=nn:o1<7*>9`8e64=i90318<54ig1g>5<#90k1j??4n0;:>14<3`l8o7>5$0;b>c463g;257:<;:ke7g<72-;2m7h=1:l2=<<3<21bj>o50;&2=d290/=4o5f338j4?>2=<07dh<7;29 4?f2o8:7c?69;64?>oa;?0;6)?6a;d15>h6100?465ff2794?"61h0m><5a18;90<=;o3:=?2e32cm??4?:%3:e?`592d:544;c:9jb67=83.:5l4i209m513>m76gi2d83>!7>i3l9=6`>98864>=nn;i1<7*>9`8e64=i90319<54ig0a>5<#90k1j??4n0;:>04<3`l9m7>5$0;b>c463g;257;<;:ke6<<72-;2m7h=1:l2=<<2<21bj?650;&2=d2<<07dh=6;29 4?f2o8:7c?69;74?>oa:<0;6)?6a;d15>h6100>465ff3694?"61h0m><5a18;91<=;o3:=?3e32cm;l4?:%3:e?`592d:544:c:9jb3`=83.:5l4i209m513?m76gi4d83>!7>i3l9=6`>98854>=nn=91<7*>9`8e64=i9031:<54ig1;>5<#90k1j??4n0;:>34<3`l9h7>5$0;b>c463g;2578<;:ke65<72-;2m7h=1:l2=<<1<21bhl4?::k2e2<722c=;7>5;h46>5<>o6i80;66gm1c83>>oe0:0;66anbc83>!7>i3kim6`>9883?>ifj>0;6)?6a;cae>h6100:76anb783>!7>i3kim6`>9881?>ifj<0;6)?6a;cae>h6100876anb583>!7>i3kim6`>9887?>ifj:0;6)?6a;cae>h6100>76anb383>!7>i3kim6`>9885?>ifj80;6)?6a;cae>h6100<76anb183>!7>i3kim6`>988;?>ifio0;6)?6a;cae>h6100276anad83>!7>i3kim6`>988b?>ifij0;6)?6a;cae>h6100i76anac83>!7>i3kim6`>988`?>ifih0;6)?6a;cae>h6100o76ana883>!7>i3kim6`>988f?>ifi10;6)?6a;cae>h6100m76ana683>!7>i3kim6`>98824>=hih<1<7*>9`8bfd=i9031=<54o`c6>5<#90k1moo4n0;:>44<3fkj87>5$0;b>ddf3g;257?<;:mbe6<72-;2m7oma:l2=<<6<21dml?50;&2=d28<07bo6f;29 4?f2hhj7c?69;34?>if1l0;6)?6a;cae>h6100:465`a8f94?"61h0jnl5a18;95<=c:9le>3:1(<7n:``b?k7>13;m76an9483>!7>i3kim6`>98814>=hi0>1<7*>9`8bfd=i9031><54o`;0>5<#90k1moo4n0;:>74<3fk2>7>5$0;b>ddf3g;257<<;:mb=4<72-;2m7oma:l2=<<5<21dm4>50;&2=da290/=4o5acc8j4?>2;<07bo7e;29 4?f2hhj7c?69;04?>if0m0;6)?6a;cae>h61009465`a9`94?"61h0jnl5a18;96<=138m76an8583>!7>i3kim6`>98804>=hi191<7*>9`8bfd=i9031?<54o`:1>5<#90k1moo4n0;:>64<3fk3<7>5$0;b>ddf3g;257=<;:mb3c<72-;2m7oma:l2=<<4<21dm:k50;&2=d2:<07bo8c;29 4?f2hhj7c?69;14?>if?k0;6)?6a;cae>h61008465`a6c94?"61h0jnl5a18;97<=o4;nc4139m76an7383>!7>i3kim6`>98874>=hi>;1<7*>9`8bfd=i90318<54o`53>5<#90k1moo4n0;:>14<3fk=j7>5$0;b>ddf3g;257:<;:mb2`<72-;2m7oma:l2=<<3<21dm;j50;&2=d2=<07bo9a;29 4?f2hhj7c?69;64?>if>00;6)?6a;cae>h6100?465`a7:94?"61h0jnl5a18;90<=13>m76an6083>!7>i3kim6`>98864>=hi9`8bfd=i90319<54o`7f>5<#90k1moo4n0;:>04<3fk>h7>5$0;b>ddf3g;257;<;:mb1f<72-;2m7oma:l2=<<2<21dm8l50;&2=d2<<07bo:9;29 4?f2hhj7c?69;74?>if=10;6)?6a;cae>h6100>465`a4594?"61h0jnl5a18;91<=4?:%3:e?gei2d:544:c:9le04=83.:5l4nb`9m5:18'513?m76an4g83>!7>i3kim6`>98854>=hi=o1<7*>9`8bfd=i9031:<54o`6g>5<#90k1moo4n0;:>34<3fk?o7>5$0;b>ddf3g;2578<;:mb0g<72-;2m7oma:l2=<<1<21dn<<50;&2=d2?<07bl>0;29 4?f2hhj7c?69;44?>ie8o0;6)?6a;cae>h6100=465`b1g94?"61h0jnl5a18;92<=m10co>6:18'513!7>i3kim6`>98844>=hj9?1<7*>9`8bfd=i9031;<54oc27>5<#90k1moo4n0;:>24<3fh;?7>5$0;b>ddf3g;2579<;:ma47<72-;2m7oma:l2=<<0<21dn=?50;&2=d2><07boif;29 4?f2hhj7c?69;54?>ifnl0;6)?6a;cae>h6100<465`aga94?"61h0jnl5a18;93<==83.:5l4nb`9m53:1(<7n:``b?k7>13=m76anf483>!7>i3kim6`>988;4>=hio>1<7*>9`8bfd=i90314<54o`d0>5<#90k1moo4n0;:>=4<3fkm=7>5$0;b>ddf3g;2576<;:mbb5<72-;2m7oma:l2=<21<07bojd;29 4?f2hhj7c?69;:4?>ifmj0;6)?6a;cae>h61003465`ad`94?"61h0jnl5a18;9<<=e32eji54?:%3:e?gei2d:5447c:9le`0=83.:5l4nb`9m5132m76ane283>!7>i3kim6`>988:4>=hil81<7*>9`8bfd=i90315<54o`g2>5<#90k1moo4n0;:><4<3fkn<7>5$0;b>ddf3g;2577<;:mb`c<72-;2m7oma:l2=<<><21dmik50;&2=d20<07bokb;29 4?f2hhj7c?69;;4?>iflh0;6)?6a;cae>h61002465`ae;94?"61h0jnl5a18;9=<=133m76and383>!7>i3kim6`>988b4>=him:1<7*>9`8bfd=i9031m<54o`ae>5<#90k1moo4n0;:>d4<3fkhi7>5$0;b>ddf3g;257o<;:mbga<72-;2m7oma:l2=<2h<07bola;29 4?f2hhj7c?69;c4?>ifk00;6)?6a;cae>h6100j465`ab:94?"61h0jnl5a18;9e<=13km76anc183>!7>i3kim6`>988a4>=hikl1<7*>9`8bfd=i9031n<54o``f>5<#90k1moo4n0;:>g4<3fkih7>5$0;b>ddf3g;257l<;:mbff<72-;2m7oma:l2=<2k<07bon2;29 4?f2hhj7c?69;`4?>if1>0;6)?6a;cae>h6100i465`a9a94?"61h0jnl5a18;9f<=13hm76am0983>!7>i3kim6`>988`4>=hion1<7*>9`8bfd=i9031o<54o`d1>5<#90k1moo4n0;:>f4<3fkn;7>5$0;b>ddf3g;257m<;:mb`f<72-;2m7oma:l2=<2j<07bom9;29 4?f2hhj7c?69;a4?>ifh6100h465`b4694?"61h0i9>5a18;94>=hj<81<7*>9`8a16=i9031=65`b4294?"61h0i9>5a18;96>=hj=l1<7*>9`8a16=i9031?65`b5g94?"61h0i9>5a18;90>=hj=n1<7*>9`8a16=i9031965`b5a94?"61h0i9>5a18;92>=hj=h1<7*>9`8a16=i9031;65`b5c94?"61h0i9>5a18;9<>=hj=31<7*>9`8a16=i9031565`b5:94?"61h0i9>5a18;9e>=hj==1<7*>9`8a16=i9031n65`b5794?"61h0i9>5a18;9g>=hj=>1<7*>9`8a16=i9031h65`b5194?"61h0i9>5a18;9a>=hj=81<7*>9`8a16=i9031j65`b5394?"61h0i9>5a18;955=;6=4+18c9f053:9lf6b=83.:5l4m529m513;=76am5`83>!7>i3h>?6`>98823>=hj<31<7*>9`8a16=i9031=554oc7;>5<#90k1n8=4n0;:>4?<3fh>;7>5$0;b>g343g;257?n;:ma13<72-;2m7l:3:l2=<<6j21dn8;50;&2=d28n07bl;6;29 4?f2k?87c?69;3f?>ie;k0;6)?6a;`67>h6100:j65`b2294?"61h0i>k5a18;94>=hj;o1<7*>9`8a6c=i9031=65`b3f94?"61h0i>k5a18;96>=hj;i1<7*>9`8a6c=i9031?65`b3`94?"61h0i>k5a18;90>=hj;k1<7*>9`8a6c=i9031965`b3;94?"61h0i>k5a18;92>=hj;21<7*>9`8a6c=i9031;65`b3494?"61h0i>k5a18;9<>=hj;?1<7*>9`8a6c=i9031565`b3694?"61h0i>k5a18;9e>=hj;91<7*>9`8a6c=i9031n65`b3094?"61h0i>k5a18;9g>=hj;;1<7*>9`8a6c=i9031h65`b3294?"61h0i>k5a18;9a>=hj8l1<7*>9`8a6c=i9031j65`b0g94?"61h0i>k5a18;955=3:9lf60=83.:5l4m2g9m513;=76am3283>!7>i3h9j6`>98823>=hj:81<7*>9`8a6c=i9031=554oc12>5<#90k1n?h4n0;:>4?<3fh9;7>5$0;b>g4a3g;257?n;:ma5f<72-;2m7l=f:l2=<<6j21dn5<50;&2=d?j:18'55<#90k1=>?k;o3:=?4<3f;8;h4?:%3:e?749m1e=4753:9l561c290/=4o5123g?k7>13>07b?<7b83>!7>i3;8=i5a18;91>=h9:=i6=4+18c9567c3g;25784;n303d<72-;2m7?<1e9m596:18'55<#90k1=>?k;o3:=?g<3f;8;84?:%3:e?749m1e=475b:9l5613290/=4o5123g?k7>13i07b?<7283>!7>i3;8=i5a18;9`>=h9:=96=4+18c9567c3g;257k4;n3034<72-;2m7?<1e9m59?:18'5i6;?l1<7*>9`8274b98827>=h9:30f8j4?>28?07b?<6883>!7>i3;8=i5a18;953=5$0;b>456l2d:544>7:9l5600290/=4o5123g?k7>13;376a>37494?"61h0:?4?<3f;8:84?:%3:e?749m1e=4751`98k451<3:1(<7n:012`>h6100:n65`1240>5<#90k1=>?k;o3:=?7d32e:?;<50;&2=d<6;8n0b<76:0f8?j74>80;6)?6a;305a=i9031=h54o016b?6=,83j6<=>d:l2=<<6n21d=>;j:18'5i6;9`8274b98817>=h9:?j6=4+18c9567c3g;257<;;:m270?=83.:5l4>30f8j4?>2;?07b?<5983>!7>i3;8=i5a18;963=;7>5$0;b>456l2d:544=7:9l5631290/=4o5123g?k7>138376a>34694?"61h0:?7?<3f;89>4?:%3:e?749m1e=4752`98k452:3:1(<7n:012`>h61009n65`1272>5<#90k1=>?k;o3:=?4d32e:?8>50;&2=d<6;8n0b<76:3f8?j74h54o017a?6=,83j6<=>d:l2=<<5n21d=>:k:18'5i6;=i1<7*>9`8274b?4;n300g<72-;2m7?<1e9m598807>=h9:>36=4+18c9567c3g;257=;;:m2711=83.:5l4>30f8j4?>2:?07b?<4783>!7>i3;8=i5a18;973=5$0;b>456l2d:544<7:9l5623290/=4o5123g?k7>139376a>35194?"61h0:?6?<3f;88?4?:%3:e?749m1e=4753`98k45393:1(<7n:012`>h61008n65`1263>5<#90k1=>?k;o3:=?5d32e:?>k50;&2=d<6;8n0b<76:2f8?j74;m0;6)?6a;305a=i9031?h54o010g?6=,83j6<=>d:l2=<<4n21d=>=m:18'5i6;:k1<7*>9`8274b98877>=h9:9<6=4+18c9567c3g;257:;;:m2760=83.:5l4>30f8j4?>2=?07b?<3483>!7>i3;8=i5a18;903=5$0;b>456l2d:544;7:9l5655290/=4o5123g?k7>13>376a>32394?"61h0:?1?<3f;8?=4?:%3:e?749m1e=4754`98k455n3:1(<7n:012`>h6100?n65`120f>5<#90k1=>?k;o3:=?2d32e:??j50;&2=d<6;8n0b<76:5f8?j74:j0;6)?6a;305a=i90318h54o011f?6=,83j6<=>d:l2=<<3n21d=>i6;;21<7*>9`8274b98867>=h9:8>6=4+18c9567c3g;257;;;:m2772=83.:5l4>30f8j4?>2!7>i3;8=i5a18;913=7>5$0;b>456l2d:544:7:9l5646290/=4o5123g?k7>13?376a>33294?"61h0:?0?<3f;8=k4?:%3:e?749m1e=4755`98k45?93:1(<7n:012`>h6100>n65`1255>5<#90k1=>?k;o3:=?3d32e:?;l50;&2=d<6;8n0b<76:4f8?j74>90;6)?6a;305a=i90319h54o0161?6=,83j6<=>d:l2=<<2n21d=>:n:18'5i6;:l1<7*>9`8274b;10c<==9;29 4?f289:h6`>98857>=h9:;h6=4+18c9567c3g;2578;;:me<=<72-;2m7h77:l2=<<732emil4?:%3:e?`??2d:544>;:mea<<72-;2m7h77:l2=<<532emi54?:%3:e?`??2d:544<;:mea2<72-;2m7h77:l2=<<332emi;4?:%3:e?`??2d:544:;:mea0<72-;2m7h77:l2=<<132emi94?:%3:e?`??2d:5448;:mea6<72-;2m7h77:l2=<1e=4751098kcb?290/=4o5f958j4?>28807bhk7;29 4?f2o2<7c?69;30?>ial?0;6)?6a;d;3>h6100:865`fe694?"61h0m4:5a18;950=8:9lba6=83.:5l4i869m513;i76aice83>!7>i3l3;6`>9882g>=hnji1<7*>9`8e<2=i9031=i54ogaa>5<#90k1j594n0;:>4c<3flh57>5$0;b>c>03g;257?i;:meg=<72-;2m7h77:l2=<<5821djn950;&2=d1e=4752098kce1290/=4o5f958j4?>2;807bhl5;29 4?f2o2<7c?69;00?>iak=0;6)?6a;d;3>h61009865`fb194?"61h0m4:5a18;960=138i76aibc83>!7>i3l3;6`>9881g>=hnkk1<7*>9`8e<2=i9031>i54og`:>5<#90k1j594n0;:>7c<3fli47>5$0;b>c>03g;2571e=4753098kcd2290/=4o5f958j4?>2:807bhm3;29 4?f2o2<7c?69;10?>iaj;0;6)?6a;d;3>h61008865`fc394?"61h0m4:5a18;970=84;ndbb?6=,83j6k68;o3:=?5032emmh4?:%3:e?`??2d:544<8:9lbdb=83.:5l4i869m5139i76aia`83>!7>i3l3;6`>9880g>=hnh21<7*>9`8e<2=i9031?i54ogc4>5<#90k1j594n0;:>6c<3flj:7>5$0;b>c>03g;257=i;:mee0<72-;2m7h77:l2=<<3821djl:50;&2=d1e=4754098kcg4290/=4o5f958j4?>2=807bhn2;29 4?f2o2<7c?69;60?>iai80;6)?6a;d;3>h6100?865`f`294?"61h0m4:5a18;900=13:1(<7n:g:4?k7>13>i76ai9983>!7>i3l3;6`>9887g>=hn0=1<7*>9`8e<2=i90318i54og;5>5<#90k1j594n0;:>1c<3fl297>5$0;b>c>03g;257:i;:me=1<72-;2m7h77:l2=<<2821dj4<50;&2=d1e=4755098kc?6290/=4o5f958j4?>2<807bh60;29 4?f2o2<7c?69;70?>ia0o0;6)?6a;d;3>h6100>865`f9g94?"61h0m4:5a18;910=13?i76aie183>!7>i3l3;6`>9886g>=hnm?1<7*>9`8e<2=i90319i54ogab>5<#90k1j594n0;:>0c<3flij7>5$0;b>c>03g;257;i;:mef1<72-;2m7h77:l2=<<1821djl750;&2=d1e=4756098kc?b290/=4o5f958j4?>2?807bh63;29 4?f2o2<7c?69;40?>ia0?0;6)?6a;d;3>h6100=865`1177>5<#90k1==;<;o3:=?6<3f;;n;4?:%3:e?77=:1e=4751:9l55d2290/=4o51170?k7>13807b??b583>!7>i3;;9>5a18;97>=h99h86=4+18c955343g;257:4;n33f7<72-;2m7??529m5:18'55<#90k1==;<;o3:=?><3f;;mh4?:%3:e?77=:1e=4759:9l55gc290/=4o51170?k7>13k07b??ac83>!7>i3;;9>5a18;9f>=h99kj6=4+18c955343g;257m4;n33e<<72-;2m7??529m50;6)?6a;3316=i9031j65`11c5>5<#90k1==;<;o3:=?7732e::3:l2=<<6;21d==o=:18'5i68h:1<7*>9`824056e;29 4?f28:>?6`>98823>=h993o6=4+18c955343g;257?7;:m240418j4?>28307b??9c83>!7>i3;;9>5a18;95d=5$0;b>462;2d:544>b:9l55?>290/=4o51170?k7>13;h76a>08:94?"61h0:<8=4n0;:>4b<3f;;5:4?:%3:e?77=:1e=4751d98k46>=3:1(<7n:0267>h6100:j65`11;7>5<#90k1==;<;o3:=?4732e:<4=50;&2=d<68<90b<76:338?j771;0;6)?6a;3316=i9031>?54o02:5?6=,83j6<>:3:l2=<<5;21d==7?:18'5i681l1<7*>9`824057d;29 4?f28:>?6`>98813>=h992h6=4+18c955343g;257<7;:m24=g=83.:5l4>0418j4?>2;307b??8883>!7>i3;;9>5a18;96d=5$0;b>462;2d:544=b:9l55>0290/=4o51170?k7>138h76a>09494?"61h0:<8=4n0;:>7b<3f;;484?:%3:e?77=:1e=4752d98k46?<3:1(<7n:0267>h61009j65`11:0>5<#90k1==;<;o3:=?5732e:<5<50;&2=d<68<90b<76:238?j77080;6)?6a;3316=i9031??54o024b?6=,83j6<>:3:l2=<<4;21d==9j:18'5i68>n1<7*>9`82405;4;n333f<72-;2m7??529m58b;29 4?f28:>?6`>98803>=h99=j6=4+18c955343g;257=7;:m242?=83.:5l4>0418j4?>2:307b??7983>!7>i3;;9>5a18;97d=5$0;b>462;2d:544139h76a>06694?"61h0:<8=4n0;:>6b<3f;;;>4?:%3:e?77=:1e=4753d98k460:3:1(<7n:0267>h61008j65`1152>5<#90k1==;<;o3:=?2732e:<:>50;&2=d<68<90b<76:538?j77>o0;6)?6a;3316=i90318?54o025a?6=,83j6<>:3:l2=<<3;21d==8k:18'5i68?i1<7*>9`8240599;29 4?f28:>?6`>98873>=h99<36=4+18c955343g;257:7;:m2431=83.:5l4>0418j4?>2=307b??6783>!7>i3;;9>5a18;90d=5$0;b>462;2d:544;b:9l5503290/=4o51170?k7>13>h76a>07194?"61h0:<8=4n0;:>1b<3f;;:?4?:%3:e?77=:1e=4754d98k46193:1(<7n:0267>h6100?j65`1143>5<#90k1==;<;o3:=?3732e:<8k50;&2=d<68<90b<76:438?j77=m0;6)?6a;3316=i90319?54o026g?6=,83j6<>:3:l2=<<2;21d==;m:18'5i689`82405:8;29 4?f28:>?6`>98863>=h99?<6=4+18c955343g;257;7;:m2400=83.:5l4>0418j4?>2<307b??5483>!7>i3;;9>5a18;91d=5$0;b>462;2d:544:b:9l55gd290/=4o51170?k7>13?h76a>0`394?"61h0:<8=4n0;:>0b<3f;;5;4?:%3:e?77=:1e=4755d98k46?j3:1(<7n:0267>h6100>j65`11:3>5<#90k1==;<;o3:=?0732e:<:;50;&2=d<68<90b<76:738?j77>h0;6)?6a;3316=i9031:?54o026b?6=,83j6<>:3:l2=<<1;21d==;=:18'5i69;:1<7*>9`8254`f:l2=<<632e:=5?50;&2=d<698l0b<76:398k47?83:1(<7n:032b>h6100876a>16d94?"61h0:=1=5$0;b>476n2d:544:;:m252b=83.:5l4>10d8j4?>2?10c9884?>i69>h1<7*>9`8254`f:l2=<<>32e:=:750;&2=d<698l0b<76:`98k470?3:1(<7n:032b>h6100i76a>16494?"61h0:=f=5$0;b>476n2d:544k;:m2522=83.:5l4>10d8j4?>2l10c988e?>i69>81<7*>9`8254`4;n3234<72-;2m7?>1g9m598826>=h9810d8j4?>28>07b?>6b83>!7>i3;:=k5a18;950=5$0;b>476n2d:544>6:9l540f290/=4o5103e?k7>13;<76a>17;94?"61h0:=4><3f;::54?:%3:e?769o1e=4751898k471?3:1(<7n:032b>h6100:m65`1045>5<#90k1==0;6)?6a;325c=i9031=i54o0357?6=,83j6f:l2=<<6m21d=<8>:18'5i69?:1<7*>9`8254`4;n321c<72-;2m7?>1g9m598816>=h98?o6=4+18c9547a3g;257<<;:m250e=83.:5l4>10d8j4?>2;>07b?>5c83>!7>i3;:=k5a18;960=m7>5$0;b>476n2d:544=6:9l543>290/=4o5103e?k7>138<76a>14:94?"61h0:=7><3f;:9;4?:%3:e?769o1e=4752898k472=3:1(<7n:032b>h61009m65`1077>5<#90k1=i54o0365?6=,83j6f:l2=<<5m21d=<;?:18'5i69=l1<7*>9`8254`>4;n320`<72-;2m7?>1g9m598806>=h98>i6=4+18c9547a3g;257=<;:m251g=83.:5l4>10d8j4?>2:>07b?>4883>!7>i3;:=k5a18;970=5$0;b>476n2d:544<6:9l5420290/=4o5103e?k7>139<76a>15494?"61h0:=6><3f;:884?:%3:e?769o1e=4753898k473<3:1(<7n:032b>h61008m65`1060>5<#90k1=f:l2=<<4m21d=<=j:18'5i69:n1<7*>9`8254`4;n327f<72-;2m7?>1g9m598876>=h989j6=4+18c9547a3g;257:<;:m256?=83.:5l4>10d8j4?>2=>07b?>3983>!7>i3;:=k5a18;900=5$0;b>476n2d:544;6:9l5452290/=4o5103e?k7>13><76a>12694?"61h0:=1><3f;:?>4?:%3:e?769o1e=4754898k474:3:1(<7n:032b>h6100?m65`1012>5<#90k1=>50;&2=d<698l0b<76:5a8?j76:o0;6)?6a;325c=i90318i54o031a?6=,83j6f:l2=<<3m21d=<i69;i1<7*>9`8254`4;n326d<72-;2m7?>1g9m598866>=h98836=4+18c9547a3g;257;<;:m2571=83.:5l4>10d8j4?>2<>07b?>2783>!7>i3;:=k5a18;910=5$0;b>476n2d:544:6:9l5443290/=4o5103e?k7>13?<76a>13194?"61h0:=0><3f;:>?4?:%3:e?769o1e=4755898k47593:1(<7n:032b>h6100>m65`10:0>5<#90k1=m0;6)?6a;325c=i90319i54o0356?6=,83j6f:l2=<<2m21d=<;8:18'5i69=i1<7*>9`8254`4;n3204<72-;2m7?>1g9m5810c98856>=h988i6=4+18c9547a3g;2578<;:m254c=83.:5l4>10d8j4?>2?>07b?>eb83>!7>i3;:io5a18;94>=h9;>n6=4+18c954ce3g;257?4;n310a<72-;2m7?>ec9m55<#90k1=13=07b?=4683>!7>i3;:io5a18;9<>=h9;>=6=4+18c954ce3g;25774;n3100<72-;2m7?>ec9m55<#90k1=13l07b?=3d83>!7>i3;:io5a18;955=5$0;b>47bj2d:544>1:9l575d290/=4o510ga?k7>13;976a>22`94?"61h0:=hl4n0;:>45<3f;9?l4?:%3:e?76mk1e=4751598k44403:1(<7n:03ff>h6100:965`1314>5<#90k1=>850;&2=d<69lh0b<76:058?j75;<0;6)?6a;32ag=i9031=554o0000?6=,83j6i6::81<7*>9`825`dec9m59882`>=h9;8m6=4+18c954ce3g;257?j;:m267b=83.:5l4>1d`8j4?>28l07b?=2b83>!7>i3;:io5a18;965=5$0;b>47bj2d:544=1:9l574f290/=4o510ga?k7>138976a>23;94?"61h0:=hl4n0;:>75<3f;9>54?:%3:e?76mk1e=4752598k445?3:1(<7n:03ff>h61009965`1305>5<#90k1=?;50;&2=d<69lh0b<76:358?j75:=0;6)?6a;32ag=i9031>554o0016?6=,83j6:18'5i6:;:1<7*>9`825`dec9m5e;29 4?f28;nn6`>9881`>=h9;;o6=4+18c954ce3g;2571d`8j4?>2;l07b?=1c83>!7>i3;:io5a18;975=5$0;b>47bj2d:544<1:9l577>290/=4o510ga?k7>139976a>20594?"61h0:=hl4n0;:>65<3f;9=;4?:%3:e?76mk1e=4753598k446=3:1(<7n:03ff>h61008965`1337>5<#90k1=<=50;&2=d<69lh0b<76:258?j759;0;6)?6a;32ag=i9031?554o0025?6=,83j6i6:9l1<7*>9`825`dl4;n314`<72-;2m7?>ec9m59880`>=h9;:i6=4+18c954ce3g;257=j;:m265g=83.:5l4>1d`8j4?>2:l07b?=0883>!7>i3;:io5a18;905=5$0;b>47bj2d:544;1:9l5760290/=4o510ga?k7>13>976a>21494?"61h0:=hl4n0;:>15<3f;9<84?:%3:e?76mk1e=4754598k447<3:1(<7n:03ff>h6100?965`1320>5<#90k1==?50;&2=d<69lh0b<76:558?j75890;6)?6a;32ag=i90318554o03eb?6=,83j6i69on1<7*>9`825`dec9m59887`>=h98lj6=4+18c954ce3g;257:j;:m25c?=83.:5l4>1d`8j4?>2=l07b?>f983>!7>i3;:io5a18;915=5$0;b>47bj2d:544:1:9l54`2290/=4o510ga?k7>13?976a>1g694?"61h0:=hl4n0;:>05<3f;:j>4?:%3:e?76mk1e=4755598k47a:3:1(<7n:03ff>h6100>965`10d2>5<#90k1=50;&2=d<69lh0b<76:458?j76mo0;6)?6a;32ag=i90319554o03fa?6=,83j6i6:=l1<7*>9`825`dec9m59886`>=h9;8n6=4+18c954ce3g;257;j;:m2675=83.:5l4>1d`8j4?>2!7>i3;:io5a18;925=5$0;b>47bj2d:54491:9l5765290/=4o510ga?k7>13<976a>1g594?"61h0:=hl4n0;:>35<3f;:il4?:%3:e?76mk1e=4756598kg>d290/=4o5b9`8j4?>2910cokj:18'52;10cokl:18'52=10cokn:18'5290/=4o5b9`8j4?>2?10cok7:18'52110cok9:18'52h10cok<:18'52j10cok>:18'52l10coji:18'528:07blkd;29 4?f2k2i7c?69;32?>ielj0;6)?6a;`;f>h6100:>65`be`94?"61h0i4o5a18;956=6:9lfa0=83.:5l4m8c9m510coj::18'513;276amd283>!7>i3h3n6`>9882e>=hjm81<7*>9`8a5<#90k1n5l4n0;:>4e<3fho<7>5$0;b>g>e3g;257?k;:magc<72-;2m7l7b:l2=<<6m21dnnj50;&2=d2;:07bllb;29 4?f2k2i7c?69;02?>iekh0;6)?6a;`;f>h61009>65`bb;94?"61h0i4o5a18;966=10com;:18'5138276amc083>!7>i3h3n6`>9881e>=hjj:1<7*>9`8ao54oc`e>5<#90k1n5l4n0;:>7e<3fhii7>5$0;b>g>e3g;2572::07blma;29 4?f2k2i7c?69;12?>iej00;6)?6a;`;f>h61008>65`bc594?"61h0i4o5a18;976=:4;n`a1?6=,83j6o6m;o3:=?5232ein94?:%3:e?d?j2d:544<6:9lfg5=83.:5l4m8c9m510col=:18'5139276amb183>!7>i3h3n6`>9880e>=hjhl1<7*>9`8a5<#90k1n5l4n0;:>6e<3fhjo7>5$0;b>g>e3g;257=k;:maeg<72-;2m7l7b:l2=<<4m21dnlo50;&2=d290/=4o5b9`8j4?>2=:07bln8;29 4?f2k2i7c?69;62?>iei>0;6)?6a;`;f>h6100?>65`b`494?"61h0i4o5a18;906=6=4+18c9f=d4?:%3:e?d?j2d:544;6:9lfd7=83.:5l4m8c9m510coo?:18'5n3:1(<7n:c:a?k7>13>276am9d83>!7>i3h3n6`>9887e>=hj0n1<7*>9`8a5<#90k1n5l4n0;:>1e<3fh2n7>5$0;b>g>e3g;257:k;:ma=d<72-;2m7l7b:l2=<<3m21dn4750;&2=d2<:07bl66;29 4?f2k2i7c?69;72?>ie1<0;6)?6a;`;f>h6100>>65`b8694?"61h0i4o5a18;916=10co6i:18'513?276am8e83>!7>i3h3n6`>9886e>=hjll1<7*>9`8a5<#90k1n5l4n0;:>0e<3fho57>5$0;b>g>e3g;257;k;:mag`<72-;2m7l7b:l2=<<2m21dnn=50;&2=d2?:07blnd;29 4?f2k2i7c?69;42?>iei;0;6)?6a;`;f>h6100=>65`b8594?"61h0i4o5a18;926=5$0;b>f303g;257?4;naa=?6=,83j6n;8;o3:=?4<3fii47>5$0;b>f303g;257=4;naa3?6=,83j6n;8;o3:=?2<3fii:7>5$0;b>f303g;257;4;naa1?6=,83j6n;8;o3:=?0<3fii87>5$0;b>f303g;25794;naa7?6=,83j6n;8;o3:=?><3fii>7>5$0;b>f303g;25774;naa5?6=,83j6n;8;o3:=?g<3fijj7>5$0;b>f303g;257l4;naba?6=,83j6n;8;o3:=?e<3fijh7>5$0;b>f303g;257j4;nabg?6=,83j6n;8;o3:=?c<3fijn7>5$0;b>f303g;257h4;nabe?6=,83j6n;8;o3:=?7732ehm44?:%3:e?e2?2d:544>1:9lgd>=83.:5l4l569m53:1(<7n:b74?k7>13;?76ala583>!7>i3i>;6`>98821>=hkh91<7*>9`8`12=i9031=;54obc1>5<#90k1o894n0;:>41<3fij=7>5$0;b>f303g;257?7;:m`e5<72-;2m7m:7:l2=<<6121do4h50;&2=d1e=4751`98kf?b290/=4o5c458j4?>28h07bm6d;29 4?f2j?<7c?69;3`?>id1j0;6)?6a;a63>h6100:h65`c8`94?"61h0h9:5a18;95`=<3:1(<7n:b74?k7>138?76al9283>!7>i3i>;6`>98811>=hk081<7*>9`8`12=i9031>;54ob;2>5<#90k1o894n0;:>71<3fi2<7>5$0;b>f303g;257<7;:m`<`<72-;2m7m:7:l2=<<5121do5j50;&2=d1e=4752`98kf>d290/=4o5c458j4?>2;h07bm7b;29 4?f2j?<7c?69;0`?>id0h0;6)?6a;a63>h61009h65`c9;94?"61h0h9:5a18;96`=139?76al8083>!7>i3i>;6`>98801>=hk1:1<7*>9`8`12=i9031?;54ob5e>5<#90k1o894n0;:>61<3fi5$0;b>f303g;257=7;:m`3a<72-;2m7m:7:l2=<<4121do:m50;&2=d1e=4753`98kf1e290/=4o5c458j4?>2:h07bm8a;29 4?f2j?<7c?69;1`?>id?10;6)?6a;a63>h61008h65`c6594?"61h0h9:5a18;97`=h4;na41?6=,83j6n;8;o3:=?2732eh;94?:%3:e?e2?2d:544;1:9lg25=83.:5l4l569m513>?76al7183>!7>i3i>;6`>98871>=hk?l1<7*>9`8`12=i90318;54ob4g>5<#90k1o894n0;:>11<3fi=o7>5$0;b>f303g;257:7;:m`2g<72-;2m7m:7:l2=<<3121do;o50;&2=d1e=4754`98kf0>290/=4o5c458j4?>2=h07bm98;29 4?f2j?<7c?69;6`?>id>>0;6)?6a;a63>h6100?h65`c7494?"61h0h9:5a18;90`=6=4+18c9g0113??76al5d83>!7>i3i>;6`>98861>=hk9`8`12=i90319;54ob7`>5<#90k1o894n0;:>01<3fi>n7>5$0;b>f303g;257;7;:m`1d<72-;2m7m:7:l2=<<2121do8750;&2=d1e=4755`98kfde290/=4o5c458j4?>2idi<0;6)?6a;a63>h6100>h65`c8c94?"61h0h9:5a18;91`=;10cn8<:18'53:1(<7n:b74?k7>13!7>i3n9?6`>9883?>ic0?0;6)?6a;f17>h6100:76ak8483>!7>i3n9?6`>9881?>ic0=0;6)?6a;f17>h6100876ak8283>!7>i3n9?6`>9887?>ic0;0;6)?6a;f17>h6100>76ak8083>!7>i3n9?6`>9885?>ic090;6)?6a;f17>h6100<76ak7g83>!7>i3n9?6`>988;?>ic?l0;6)?6a;f17>h6100276ak7e83>!7>i3n9?6`>988b?>ic?k0;6)?6a;f17>h6100i76ak7`83>!7>i3n9?6`>988`?>ic?00;6)?6a;f17>h6100o76ak7983>!7>i3n9?6`>988f?>ic?>0;6)?6a;f17>h6100m76ak7783>!7>i3n9?6`>98824>=hl>?1<7*>9`8g66=i9031=<54oe57>5<#90k1h?=4n0;:>44<3fn5$0;b>a443g;257?<;:mg37<72-;2m7j=3:l2=<<6<21dh:>50;&2=d28<07bj9e;29 4?f2m887c?69;34?>ic>m0;6)?6a;f17>h6100:465`d7a94?"61h0o>>5a18;95<=c:9l`3>=83.:5l4k229m513;m76ak6583>!7>i3n9?6`>98814>=hl?91<7*>9`8g66=i9031><54oe41>5<#90k1h?=4n0;:>74<3fn==7>5$0;b>a443g;257<<;:mg25<72-;2m7j=3:l2=<<5<21dh8h50;&2=d2;<07bj:d;29 4?f2m887c?69;04?>ic=j0;6)?6a;f17>h61009465`d4c94?"61h0o>>5a18;96<=138m76ak5283>!7>i3n9?6`>98804>=hl<81<7*>9`8g66=i9031?<54oe72>5<#90k1h?=4n0;:>64<3fn?j7>5$0;b>a443g;257=<;:mg0`<72-;2m7j=3:l2=<<4<21dh9j50;&2=d2:<07bj;b;29 4?f2m887c?69;14?>ich61008465`d5;94?"61h0o>>5a18;97<=36=4+18c9`75o4;nf73?6=,83j6i<<;o3:=?5e32eo8;4?:%3:e?b5;2d:544139m76ak4083>!7>i3n9?6`>98874>=hl=:1<7*>9`8g66=i90318<54oe1e>5<#90k1h?=4n0;:>14<3fn8i7>5$0;b>a443g;257:<;:mg7a<72-;2m7j=3:l2=<<3<21dh>m50;&2=d2=<07bj<9;29 4?f2m887c?69;64?>ic;10;6)?6a;f17>h6100?465`d2594?"61h0o>>5a18;90<=13>m76ak3183>!7>i3n9?6`>98864>=hl;o1<7*>9`8g66=i90319<54oe0g>5<#90k1h?=4n0;:>04<3fn9o7>5$0;b>a443g;257;<;:mg6g<72-;2m7j=3:l2=<<2<21dh?o50;&2=d290/=4o5d318j4?>2<<07bj=8;29 4?f2m887c?69;74?>ic:>0;6)?6a;f17>h6100>465`d3494?"61h0o>>5a18;91<=6=4+18c9`7513?m76ak5183>!7>i3n9?6`>98854>=hl=?1<7*>9`8g66=i9031:<54oe1b>5<#90k1h?=4n0;:>34<3fn9j7>5$0;b>a443g;2578<;:mg67<72-;2m7j=3:l2=<<1<21dhk>50;&2=d28;07bk;0;29 4?f2mom7c?69;31?>ib;o0;6)?6a;ffb>h6100:?65`e2g94?"61h0oik5a18;951=7:9la6?=83.:5l4keg9m513;j76aj3783>!7>i3nnj6`>9882f>=hm:?1<7*>9`8gac=i9031=n54od17>5<#90k1hhh4n0;:>4b<3fo8?7>5$0;b>aca3g;257?j;:mf74<72-;2m7jjf:l2=<<6n21di>>50;&2=d2;;07bk=e;29 4?f2mom7c?69;01?>ib:m0;6)?6a;ffb>h61009?65`e3a94?"61h0oik5a18;961=44?:%3:e?bbn2d:544=7:9la7>=83.:5l4keg9m5138j76aj2583>!7>i3nnj6`>9881f>=hm;91<7*>9`8gac=i9031>n54od01>5<#90k1hhh4n0;:>7b<3fo9=7>5$0;b>aca3g;2572:;07bk>d;29 4?f2mom7c?69;11?>ib9k0;6)?6a;ffb>h61008?65`e0c94?"61h0oik5a18;971=;4;ng2139j76aj1283>!7>i3nnj6`>9880f>=hm881<7*>9`8gac=i9031?n54od33>5<#90k1hhh4n0;:>6b<3fo;j7>5$0;b>aca3g;257=j;:mf4`<72-;2m7jjf:l2=<<4n21di=j50;&2=d2=;07bk?b;29 4?f2mom7c?69;61?>ib8h0;6)?6a;ffb>h6100??65`e1;94?"61h0oik5a18;901=<:18'513>j76aj0083>!7>i3nnj6`>9887f>=hm9:1<7*>9`8gac=i90318n54oede>5<#90k1hhh4n0;:>1b<3fnmi7>5$0;b>aca3g;257:j;:mgba<72-;2m7jjf:l2=<<3n21dhkm50;&2=d2<;07bji9;29 4?f2mom7c?69;71?>icn10;6)?6a;ffb>h6100>?65`dg594?"61h0oik5a18;911=13?j76aj5283>!7>i3nnj6`>9886f>=hm=21<7*>9`8gac=i90319n54od1g>5<#90k1hhh4n0;:>0b<3fo8>7>5$0;b>aca3g;257;j;:mf62<72-;2m7jjf:l2=<<2n21di2?;07bk?6;29 4?f2mom7c?69;41?>icnk0;6)?6a;ffb>h6100=?65`ddg94?"61h0oik5a18;921=5<#90k1iol4n0;:>4=5<#90k1iol4n0;:>6=5<#90k1iol4n0;:>0=5<#90k1iol4n0;:>2=5<#90k1iol4n0;:><=6=4+18c9agd5<#90k1iol4n0;:>g=5<#90k1iol4n0;:>a=5<#90k1iol4n0;:>c=4;nd3`?6=,83j6hlm;o3:=?7632em2:9lb5d=83.:5l4jbc9m5n:18'513;>76ai0683>!7>i3oin6`>98822>=hn9<1<7*>9`8ffg=i9031=:54og26>5<#90k1iol4n0;:>4><3fl;87>5$0;b>`de3g;257?6;:me46<72-;2m7kmb:l2=<<6i21dj=<50;&2=d28i07bh?0;29 4?f2lhi7c?69;3g?>ibno0;6)?6a;gaf>h6100:i65`egf94?"61h0nno5a18;95c=4;ngef?6=,83j6hlm;o3:=?4632enjl4?:%3:e?cej2d:544=2:9lac?=83.:5l4jbc9m5138>76ajf783>!7>i3oin6`>98812>=hmo?1<7*>9`8ffg=i9031>:54odd7>5<#90k1iol4n0;:>7><3fom>7>5$0;b>`de3g;257<6;:mfb4<72-;2m7kmb:l2=<<5i21dik>50;&2=d2;i07bkje;29 4?f2lhi7c?69;0g?>ibmm0;6)?6a;gaf>h61009i65`eda94?"61h0nno5a18;96c=>4;ngfe?6=,83j6hlm;o3:=?5632eni44?:%3:e?cej2d:544<2:9la`1=83.:5l4jbc9m5139>76aje583>!7>i3oin6`>98802>=hml91<7*>9`8ffg=i9031?:54odg1>5<#90k1iol4n0;:>6><3fon=7>5$0;b>`de3g;257=6;:mfa5<72-;2m7kmb:l2=<<4i21diih50;&2=d2:i07bkkc;29 4?f2lhi7c?69;1g?>iblk0;6)?6a;gaf>h61008i65`eec94?"61h0nno5a18;97c=4;ngg13>>76ajd283>!7>i3oin6`>98872>=hmm;1<7*>9`8ffg=i90318:54odf3>5<#90k1iol4n0;:>1><3fohj7>5$0;b>`de3g;257:6;:mfg`<72-;2m7kmb:l2=<<3i21dinj50;&2=d2=i07bklb;29 4?f2lhi7c?69;6g?>ibkh0;6)?6a;gaf>h6100?i65`eb;94?"61h0nno5a18;90c=4;ng`2?6=,83j6hlm;o3:=?3632eno84?:%3:e?cej2d:544:2:9laf2=83.:5l4jbc9m513?>76ajc083>!7>i3oin6`>98862>=hmj:1<7*>9`8ffg=i90319:54od`e>5<#90k1iol4n0;:>0><3foii7>5$0;b>`de3g;257;6;:mffa<72-;2m7kmb:l2=<<2i21dj2ibnl0;6)?6a;gaf>h6100>i65`eg194?"61h0nno5a18;91c=4;ngg`?6=,83j6hlm;o3:=?0632enh?4?:%3:e?cej2d:54492:9laf1=83.:5l4jbc9m5:10chln:18'5750;9lf2b=831dn5;50;9lf6g=831dn5:50;9l3fe=831d;nj50;9l57?=831v5=9:1818>4>3;2=63=5b82e4=z{19>6=4={<:01?7>92799n4>a69~w2ea2909wS9lf:?11f60?=98i01k851838yv?0n3:1>v3=d682=c=:1>l1=9g9>=2c=98i0q~78d;296~;5l<0:5k5296f954e52z?1`1<61o165:m510a8yv?0j3:1>v3=d282=c=:1>h1=9g9>=2g=98i0q~789;296~;5l80:5k5296;954e52z?1`5<61o165:6510a8yv?0?3:1>v3=cg82=c=:1>=1=9g9>=20=98i0q~785;296~;5km0:5k52967954e52z?1`c<61o165::510a8yv?0;3:1>v3=dd82=c=:1>91=9g9>=24=98i0q~781;296~;5lj0:5k52963954e52z?1`g<61o165:>510a8yv?1n3:1>v3=d`82=c=:1?l1=9g9>=3c=98i0q~79d;296~;5l10:5k5297f954e52z?1f0<61o165;m510a8yv?1j3:1>v3=b582=c=:1?h1=52z\:51=::5224a95d>7>52z\:57=::9g9>=3g=98i0q~799;296~;50h0:5k5297;954e52z?1a3<61o165;6510a8yv>413:1>vP7389><51838yv>>i3:1>vP79`9>>03:1>vP7999>164km51838yv>>>3:1>vP7979>><3:1>vP7959>>:3:1>vP7939>?n3:1>vP78g9>?l3:1>vP78e9>?j3:1>vP78c9>?13:1>vP7889><`c=90;0q~678;296~X?01164hj51838yv>??3:1>vP7869><`e=90;0q~675;296~X?0<164ho51838yv>?<3:1>vP7859><`?=90;0q~673;296~X?0:164h651838yv>?:3:1>vP7839><`1=90;0q~671;296~X?08164h851838yv>?83:1>vP7819><`3=90;0q~68f;296~X??o164h:51838yv>0m3:1>vP77d9><`5=90;0q~68d;296~X??m164h<51838yv>0k3:1>vP77b9><`7=90;0q~68a;296~X??h164ih51838yv>013:1>vP7789>0?3:1>vP7769>0=3:1>vP7749>0;3:1>vP7729>=90;0q~682;296~X??;164i951838yv>093:1>vP7709>o164i:51838yv>1m3:1>vP76d9>m164i<51838yv>1k3:1>vP76b9>k164i>51838yv>1i3:1>vP76`9>0164nk51838yv>103:1>vP7699>>164nm51838yv>1>3:1>vP7679>=164n751838yv>1;3:1>vP7629>=90;0q~692;296~X?>;164n951838yv>193:1>vP7609>9164n;51838yv>2n3:1>vP75g9>2l3:1>vP75e9>2j3:1>vP75c9>203:1>vP7599>164om51838yv>2>3:1>vP7579>2<3:1>vP7559>2:3:1>vP7539>283:1>vP7519>3l3:1>vP74e9>3j3:1>vP74c9>313:1>vP7489>3?3:1>vP7469>3=3:1>vP7449>3:3:1>vP7439>383:1>vP7419>4m3:1>vP73d9>4k3:1>vP73b9>51838yv>4i3:1>vP73`9><<`=9;<0q~66c;296~X?1j165=?51348yv>>93:1>vP7909>0j3:1>vP77c9><`6=9;<0q~680;296~X??9164i;51348yv>1=3:1>vP7649>3n3:1>vP74g9>4?3:1>vP7369><4;292a}:9k=1h8521c:9`0=:9kk1h8521c`9`0=:9kn1h8521cg9`0=:9j:1h8521b39`0=:9j91h8521b69`0=:9j<1h8521b59`0=:9j31h8521bc9`0=:9ji1h8521bf9`0=:9jl1h8521e29`0=:9m81h8521e19`0=:9m?1h8521e49`0=:9m21h8521e;9`0=:9mh1h8521ea9`0=:9mo1h8521ed9`0=:9l;1h8521d09`0=:9l>1h8521d79`0=:9l=1h8521d:9`0=:9lk1h8521d`9`0=:9ln1h8521dg9`0=:9o:1h8521g39`0=:9o91h8521g69`0=:9o<1h8521g59`0=:9o31h8521gc9`0=:9oi1h8521gf9`0=:9ol1h8522129`0=::981h8522119`0=::9?1h8522149`0=::921h85221;9`0=::9h1h85221a9`0=::9o1h85221d9`0=::8;1h8522009`0=::8>1h8522079`0=::8=1h85220:9`0=::8k1h85220`9`0=::8n1h85220g9`0=::;:1h8522339`0=::;91h8522369`0=::;<1h8522359`0=::;31h85223c9`0=::;i1h85223f9`0=::;l1h8522229`0=:::81h8522219`0=:::?1h8522249`0=:::21h85222;9`0=:::h1h85222a9`0=:::o1h85222d9`0=::=;1h8522509`0=::=>1h8522579`0=::==1h85225:9`0=::=k1h85225`9`0=::=n1h85225g9`0=::<:1h8522439`0=::<91h8522469`0=::<<1h8522459`0=::c:?11f{t?8;1<71b9>60e=i1n0q~9?f;296~;em3;:o63=5b8b:n6=4={<``>47d348>o7o7a:p35b=838p1oo510a8973d2h227p}80b83>7}:j10:=n5224a9e=>52z?a2?76k2799n4n869~w26f2909w0l;:03`?842k3k3:6s|71;94?4|5k81=d>23ty<<54?:3y>f5<69j16>8m5a968yv17?3:1>v3ne;32g>;5=j0j4>5rs625>5<5s4kh6=98i01?;l:`:3?xu08=0;6?u2a7825f=::c:?11f=:1818g528;h70<:c;c4`>{t?9;1<71b9>60e=i>h0q~8if;296~;>k3;:o63=5b8b3d=z{?ln6=4={<;b>47d348>o7o89:p2cb=838p146510a8973d2h=37p}9fb83>7}:1?0:=n5224a9e2152z?:6?76k2799n4n749~w3`f2909w07?:03`?842k3k<86s|6g;94?4|58h?60;6?u21c7954b<5;?h6l9>;|q5b3<72;q64l4>1b9>60e=i>:0q~8i5;296~;6j?0:=i5224a9e3`52z?;2?76k2799n4n6d9~w3`42909w06;:03`?842k3k=h6s|6g094?4|5181=d0d3ty=j<4?:3y>3`<69j16>8m5a7c8yv0a83:1>v38c;32g>;5=j0j:45rs7ge>5<5s4=j6=98i01?;l:`44?xu1mm0;6?u277825f=::c:?11f<1v;km:18181528;h70<:c;c50>{t>lk1<71b9>60e=i?80q~8j8;296~;1k3;:o63=5b8b24=z{?o<6=4={47d348>o7o:f:p2`0=838p1nh510a8973d2h?n7p}9e483>7}:km0:=n5224a9e0b52z?`f?76k2799n4n5b9~w3c42909w0m6:03`?842k3k>n6s|6d094?4|5kl1=d3f3ty=i<4?:3y>e<<69j16>8m5a4;8yv0b83:1>v363;32g>;5=j0j955rs7fe>5<5s4=m6{t>mk1<7ab9>60e=i=l0q~8k8;296~;ek3;jo63=5b8b0`=z{?n<6=4={<`b>4gd348>o7o;d:p2a0=838p1o651`a8973d2h>h7p}9d483>7}:j?0:mn5224a9e1d52z?a0?7fk2799n4m139~w2272909w0l=:0c`?842k3h:=6s|72d94?4|5k:1=lm4=37`>g773tye`<6ij16>8m5b1d8yv14l3:1>v3nc;3bg>;5=j0i5<5s4k36l50;0x9d0=9hi01?;l:c2`?xu0;h0;6?u2a582ef=::7?nc:?11f{t?:=1<78;|q473<72;q65n4>ab9>60e=j9<0q~9<5;296~;>i3;jo63=5b8a40=z{>9?6=4={<;;>4gd348>o7l?4:p365=838p14851`a8973d2k:87p}83383>7}:1;0:mn5224a9f5452z?:4?7fk2799n4m009~w2572909w0?m4;32a>;5=j0i<=5rs60e>5<5s42n6{t?;n1<77}:0?0:mn5224a9ecg52z?;0?7fk2799n4nf89~w24>2909w06=:0c`?842k3km46s|73:94?4|5>o1=lm4=37`>d`03ty<>:4?:3y>3f<6ij16>8m5ag48yv15>3:1>v38a;3bg>;5=j0jj85rs606>5<5s4=367?nc:?11f:18181728kh70<:c;cfb>{t?;:1<7ab9>60e=iln0q~9>e;296~;c93;jo63=5b8baf=z{>;o6=4={4gd348>o7ojb:p34e=838p1nj51`a8973d2hoj7p}81c83>7}:kk0:mn5224a9e`?52z?`=?7fk2799n4ne99~w27>2909w0li:0c`?842k3kn:6s|70:94?4|5h31=lm4=37`>dc23ty<=:4?:3y>=6<6ij16>8m5ad68yv16>3:1>v38f;3bg>;5=j0ji>5rs636>5<5s4<26<3n>70865;f6?80>?3n>70868;f6?806k3n>708>d;f6?806m3n>708>f;f6?80583n>708=1;f6?805:3n>708=3;f6?80083n>70881;f6?800:3n>70883;f6?800<3n>70885;f6?800>3n>70887;f6?805>3n>70=if;f6?801?3n>708?c;f6?807l3n>708?e;f6?807n3n>708>0;f6?80693n>708>2;f6?806;3n>708:4;f6?802=3n>708:c;f6?802l3n>708:e;f6?802n3n>70890;f6?80193n>70892;f6?801;3n>708:6;f6?802?3n>708:8;f6?80213n>708:a;f6?802j3n>70896;f6?80?i3n>7087b;f6?80?k3n>7087d;f6?80?m3n>7087f;f6?80>83n>70861;f6?80>:3n>708=7;f6?83bk3n>70;i1;f6?83a>3n>70;lb;f6?83en3n>70;j3;f6?83b:3n>70;j1;f6?83b83n>70;kf;f6?83cm3n>70;kd;f6?83ck3n>70;l8;f6?83d?3n>70;l6;f6?83di3n>70;me;f6?83el3n>70;mc;f6?83ej3n>70;l9;f6?83?m3n>70;7d;f6?83?k3n>70;7b;f6?83?i3n>70;79;f6?83>>3n>70;65;f6?83><3n>70;63;f6?83>:3n>70;61;f6?83>83n>70;7f;f6?83?03n>70;77;f6?832n3n>70;92;f6?831i3n>70;9d;f6?830:3n>70;86;f6?83>k3n>70;6b;f6?83413n>70;<8;f6?834?3n>70;=f;f6?835m3n>70;=d;f6?83>03n>70;67;f6?832:3n>70;:1;f6?83283n>70;;f;f6?832i3n>70;:9;f6?83203n>70;:7;f6?832>3n>70;:5;f6?832<3n>70;:3;f6?833m3n>70;;d;f6?83fn3n>70;nd;f6?832m3n>70;:c;f6?832j3n>70;=2;f6?83593n>70;>c;f6?836j3n>70;85;f6?83e>3n>70:=b;f6?83f:3n>70;m3;f6?83>l3n>70;69;f6?835;3n>70<:c;d`5>{t?<:1<78j{<42g?7f827==i4>a19>24c=9h:01;?i:0c3?80583;j<6392082e5=:>;81=l>4=700>4g734<<<7?n0:?534<6i916::<51`28931428k;70884;3b4>;1?<0:m=5266495d6<5?=<6a19>25e=9h:01;>k:0c3?807m3;j<6390g82e5=:>8:1=l>4=732>4g734<:>7?n0:?556<6i916:8:51`08933228k9708:c;3b6>;1=m0:m?5264g95d4<5??m6a39>234=9h801;8<:0c1?802>3;j>6395682e7=:><21=l<4=77:>4g534<>m7?n2:?51g<6i;16:;851`28916a28;m70:>4;32a>;3890:=i52411954b<5=:?61e9>051=98n019>7:03g?82713;:h63;0`825a=:<9;1=47c34>;n7?>f:?757<69m168?o510g891e7288;70:mc;314>;3k=0:=h524b;954b<5=i361e9>0f7=98n019m=:03g?82d;3;:h63;be825a=:47c34>im7?>d:?7fg<69m168o6510f891d>28;o70;n6;32`>;3:90:=i5240c954b<51e9>0fd=98n018ol:03e?80503;:i63992825a=:<;i1=47c34?:87?=1:?6b1<69l169;>510g8901428;n70:nf;32`>;3j90:=i524c3954b<5=h961e9>0g3=98n019l9:03g?82e?3;:h63;a`825a=:47c34>jh7?>d:?7e`<69m169;7510f890d228;o70;6f;315>;5=j0mo=5rs66`>5<1s4<9?7ki;<443?ca349n:7?=2:?0`3<69o16?i:510g8973d2ok?7p}84c83>3}:>;81ik526649ac=:;l?1=?<4=2fg>47a349o97?>e:?11f63cg53ty<844?:7y>276=mo16:::5eg9>7`5=9;801>j7:03f?85dn3;:j63=5b8ee4=z{>>36=49{<42b?ca34<1d9>7a6=98l01?;l:gc3?xu0<>0;6;u260g9ac=:>>81ik523d3954b<5:nj6d;ge?80093om70=j0;32`>;4lk0:=h523e0954`<5;?h6k7k;|q401<72?q6:226=mo16?ih510f896bd28;n70=k3;32b>;5=j0m5n5rs66e>5<69r78il4>1g9>7`>=98l01>hj:03f?85bk3;:i63939825a=:>:?1=47c34<8i7?>e:?57c<69o16:>o510g8935e28;m708=b;32a>;1:j0:=k5263c954c<5?8n647c349no7?=0:?572<69l16:>6510g8935328;n708<5;32a>;1;80:=h52620954c<5?9n61e9>26d=98n01;;o1=47b34f:?11f;<1g2?76l278h:4>1e9>7a>=98n01>j6:03g?85ci3;:h6347c349oi7?>d:?0gc<69m16?i>510f896b628;o70=k2;32`>;4l:0:=i523e6954b<5:n>61g9>262=98n01;=::03e?80493;:h63933825c=:>=:1=47c34<9h7?>d:?56c<69m16:9<510f8932428;o70<:c;db=>{t?=<1<7jt=2g0>446349n97?=1:?0a1<6:816?h85133896cf288:70=j8;315>;4nl0:>=523d0954`<5:oh6<<=;<1f4?76m278hk4>1d9>7`7=98o01?;l:g;f?xu0<:0;6?u2693954c<5;?h6k7<;|q407<72;q6:5?510d8973d2o2=7p}90;296~;5=00:5<5261825f=z{:in6=4:30y>303=98k01?6n:0c3?84?i3;j>63=d98g3>;5l10m=63=d982e5=::m21=l<4=3f:>a1<5;n26k?4=3f:>4g7348o57?n2:?1`dio51`0897be2m=01?jm:g3897be28k;70;5lj0o;63=db8e5>;5lj0:m=522ea95d4<5;no6i94=3fg>c7<5;no6a19>6ac=9h801?ji:e5897ba2o;01?ji:0c3?84cn3;j>63=ce8g3>;5km0m=63=ce82e5=::jn1=l<4=3af>a1<5;in6k?4=3af>4g7348hi7?n2:?1gcnh51`0897b72m=01?j?:g3897b728k;70;5l80o;63=d08e5>;5l80:m=522e395d4<5;n96i94=3f1>c7<5;n964k7:?1`64>a19>6a5=9h801?j;:e5897b32o;01?j;:0c3?84c<3;j>63=d48g3>;5l<0m=63=d482e5=::m?1=l<4=3f5>a1<5;n=6k?4=3f5>4g7348o:7?n2:?1`2i951`0897d32m=01?l;:g3897d328k;70;5j<0o;63=b48e5>;5j<0:m=522c795d4<5=io6k:4=56a>c2<513n61b9>ak3;:o637fc825f=:0ok1=47d342m47?>c:?;b2<69j164k;510a89=`328;h706i3;32g>;?n;0:=n528g3954e<51l;61b9><`b=98i015kl:03`?8>bi3;:o637e8825f=:0l21=47d342n:7?>c:?;a0<69j164h:510a89=c428;h706j2;32g>;?m80:=n528ed954e<51nn61b9>c13;:o637d9825f=:0m=1=47d342o87?>c:?;`6<69j164i<510a89=b628;h706k0;32g>;?ko0:=n528bg954e<51io61b9>d?3;:o637c7825f=:0j?1=47d342h?7?>c:?;g7<69j164n?510a89=e728;h706me;32g>;?jm0:=n528ca954e<51hi61b9>=98i015l8:03`?8>e>3;:o637b4825f=:0k91=47d342i=7?>c:?;f5<69j164lh510a89=gb28;h706nd;32g>;?ij0:=n528``954e<51kj61b9>f<3;:o637a2825f=:0h81=47d3422j7?>c:?:44<69j164k8510a89=>=98i015m510a8973d20l:70<:c;;f`>;5=j02in5224a9=`d<5;?h64kn;<06g??b12799n46e99>60e=1l=01?;l:8g5?842k33n963=5b8:a1=::o77j0:?11f<>lo16>8m59eg8973d20no70<:c;;gg>;5=j02ho5224a9=ag<5;?h64j6;<06g??c?2799n46d79>60e=1m?01?;l:8f7?842k33o?63=5b8:`7=::o77lf:?11f<>kl16>8m59ba8973d20ii70<:c;;`e>;5=j02o45224a9=f><5;?h64m8;<06g??d>2799n46c49>60e=1j>01?;l:8a0?842k33h=63=5b8:g5=::o77md:?11f<>jj16>8m59c`8973d20hj70<:c;;a=>;5=j02n55224a9=g0<5;?h64l:;<06g??e<2799n46b29>60e=1k801?;l:8`2?842k33i<63=5b8:ec=::o77nb:?11f<>ih16>8m59`;8973d20k370<:c;;b3>;5=j02m;5224a9=d3<5;?h64o;;<06g??f;2799n46a39>60e=1h:01?;l:8;e?842k332i63=5b8:=a=::o776a:?11f<>1016>8m598:8973d203<70<:c;;:1>;5=j02595224a9=<5<5;?h647=;<06g??>92799n46919>60e=11l01?;l:8:f?842k333h63=5b8:<>>348>o7778:?11f<>0>16>8m59948973d202>70<:c;;;0>;5=j024>5224a9==4<5;?h646>;<06g?g302799n4n469>60e=i=<01?;l:`66?842k3k?863=5b8b06=::d26348>o7o;0:?11f8m5a2f8973d2h9h70<:c;c0f>;5=j0j?l5224a9e6?<5;?h6l=7;<06g?g4?2799n4n379>60e=i:?01?;l:`17?842k3k8>63=5b8b74=::>4=37`>d4a348>o7o=e:?11f8m5a3a8973d2h8i70<:c;c1e>;5=j0j>45224a9e71<5;?h6l<9;<06g?g5=2799n4n259>60e=i;901?;l:`01?842k3k9=63=5b8b65=::d7b348>o7o>c:?11f8m5a0c8973d2h;270<:c;c2<>;5=j0j=:5224a957d?348>o7?<1`9>60e=9:;270<:c;305==::?8;<06g?749?16>8m51236?842k3;8=95224a95674348>o7?<139>60e=9:;:70<:c;304c=::>j;<06g?748m16>8m5122`?842k3;8o7?<089>60e=9::370<:c;3042=::>9;<06g?748=16>8m51220?842k3;8o7?<019>60e=9;lm70<:c;31b`=::8m513da?842k3;9j45224a957`?348>o7?=f69>60e=9;l=70<:c;31b0=::8m513d1?842k3;9j<5224a957`7348>o7?=ed9>60e=9;oo70<:c;31af=::8m513g:?842k3;9i55224a957c0348>o7?=e79>60e=9;o>70<:c;31a6=::8m513g3?842k3;9hk5224a957bb348>o7?=de9>60e=9;nh70<:c;31`g=::8m513f4?842k3;9h;5224a957b2348>o7?=d59>60e=9;n870<:c;31`7=::;<06g?75l916>8m513ae?842k3;9oi5224a957ed348>o7?=cc9>60e=9;ij70<:c;31g<=::16>8m513a5?842k3;9o85224a957e3348>o7?=c39>60e=9;i:70<:c;31g5=::8m513`g?842k3;9nn5224a957de348>o7?=b`9>60e=9;h270<:c;305g=::??;<06g?748<16>8m513db?842k3;9ik5224a957c3348>o7?=d89>60e=9;in70<:c;31g6=::0428973d28:?j63=5b8241c<5;?h6<>;d:?11f<68=i01?;l:027f>;5=j0:<9o4=37`>46312799n4>05:8973d28:?;63=5b82413<5;?h6<>;4:?11f<68=901?;l:0276>;5=j0:<9?4=37`>46382799n4>02d8973d28:8i63=5b8246b<5;?h6<>;5=j0:<>64=37`>464?2799n4>0248973d28:8963=5b82462<5;?h6<><3:?11f<68:801?;l:0205>;5=j0:465m2799n4>03f8973d28:9o63=5b8247d<5;?h6<>=a:?11f<68;301?;l:021<>;5=j0:465>2799n4>0368973d28:9?63=5b82474<5;?h6<>=1:?11f<68;:01?;l:022b>;5=j0:<466l2799n4>00a8973d28::n63=5b8244?<5;?h6<>>8:?11f<688=01?;l:0222>;5=j0:<<;4=37`>466;2799n4>0008973d28::=63=5b82446<5;?h6<>?e:?11f<689n01?;l:023g>;5=j0:<=l4=37`>467i2799n4>01:8973d28:;;63=5b82450<5;?h6<>?5:?11f<689901?;l:0236>;5=j0:<=?4=37`>46782799n4ifg9>60e=noo01?;l:gdg?842k3lmo63=5b8ebg=::c`?348>o7hi7:?11f8m5fg78973d2ol?70<:c;de7>;5=j0mj?5224a9bc7<5;?h6kh?;<06g?`bn2799n4>0cc8973d28;:o63=5b8254d<5;?h6a:?11f<698301?;l:032<>;5=j0:=<94=37`>476>2799n4>1078973d28;:863=5b82545<5;?h61:?11f<698:01?;l:033b>;5=j0:==k4=37`>477l2799n4>11a8973d28;;n63=5b8255g<5;?h6;5=j0:==;4=37`>477<2799n4>1118973d28;;>63=5b82557<5;?h6;5=j0:46aj2799n4>0gc8973d28:m563=5b824c><5;?h6<>i7:?11f<68o<01?;l:02e1>;5=j0:46a;2799n4>0g08973d28:m<63=5b824``<5;?h6<>je:?11f<68ln01?;l:02fg>;5=j0:46bi2799n4>0d;8973d28:n463=5b824`1<5;?h6<>j5:?11f<68l>01?;l:02f7>;5=j0:46b92799n4>0d28973d28:oj63=5b824ac<5;?h6<>kd:?11f<68mi01?;l:02ge>;5=j0:46c02799n4>0e58973d28:o:63=5b824a3<5;?h6<>k4:?11f<68m901?;l:02g6>;5=j0:46dn2799n4>0bg8973d28:hh63=5b824fe<5;?h6<>lb:?11f<68jk01?;l:02`=>;5=j0:46d?2799n4>0b48973d28:h863=5b824f5<5;?h6<>l2:?11f<68j;01?;l:02`4>;5=j0:46em2799n4>0cf8973d28:io63=5b824gd<5;?h6d:?11f<698801?;l:0333>;5=j0:46a92799n4>0d48973d28:on63=5b824a6<5;?h6<>l5:?11f<68k201?;l:03;2>;5=j0:=h64=37`>47b?2799n4>1d48973d28;n963=5b825`2<5;?h6;5=j0:=h>4=37`>47cn2799n4>1ef8973d28;oo63=5b825ad<5;?h6;5=j0:=i94=37`>47c>2799n4>1e78973d28;o863=5b825a4<5;?h6;5=j0:=nk4=37`>47dl2799n4>1ba8973d28;hn63=5b825fg<5;?h6;5=j0:=n;4=37`>47d<2799n4>1b18973d28;h>63=5b825f7<5;?h6;5=j0:=om4=37`>47ej2799n4>1cc8973d28;i563=5b825g><5;?h6;5=j0:=o:4=37`>47e;2799n4>1c38973d28;i<63=5b825d`<5;?h6;5=j0:=ll4=37`>47fi2799n4>1`;8973d28;j463=5b825d0<5;?h601?;l:03b7>;5=j0:=l<4=37`>47f92799n4>1`28973d28;2j63=5b825;5=j0:=474=37`>47>02799n4>1858973d28;2:63=5b825<3<5;?h6;5=j0:=4>4=37`>47?n2799n4>19g8973d28;3h63=5b825=e<5;?h6;5=j0:=564=37`>47??2799n4>1d;8973d28;oi63=5b825a5<5;?h6;5=j0:=l94=37`>47>k2799n4>1838973d28;3863=5b82604<5;?h6<;5=j0:>o?4=37`>44e82799n4>2`d8973d288ji63=5b826db<5;?h6<;5=j0:>l64=37`>44f?2799n4>2`48973d288j963=5b826d2<5;?h6<;5=j0:>l>4=37`>44>m2799n4>28f8973d2882o63=5b826;5=j0:>494=37`>44>>2799n4>2878973d2882?63=5b826<4<5;?h6<<61:?11f<6:0:01?;l:00;b>;5=j0:>5k4=37`>44?l2799n4>29a8973d2883n63=5b826=g<5;?h6<<78:?11f<6:1=01?;l:00;2>;5=j0:>5;4=37`>44?<2799n4>2918973d2883>63=5b826=7<5;?h6<<70:?11f<6:>l01?;l:004`>;5=j0:>:m4=37`>440j2799n4>26c8973d288<563=5b8262><5;?h6<<87:?11f<6:><01?;l:0041>;5=j0:>::4=37`>440:2799n4>2638973d288<<63=5b8263`<5;?h6<<9e:?11f<6:?n01?;l:005g>;5=j0:>;l4=37`>441i2799n4>27;8973d288=;63=5b82630<5;?h6<<95:?11f<6:?>01?;l:0057>;5=j0:>;<4=37`>44192799n4>2728973d288>j63=5b8260c<5;?h6<<:c:?11f<6:;5=j0:>874=37`>44202799n4>2458973d288>:63=5b82603<5;?h6<<:4:?11f<6:<901?;l:00a1>;5=j0:>lo4=37`>44>n2799n4>2868973d2883563=5b8262c<5;?h6<<83:?11f<6:?201?;l:006`>;5=j0:>8>4=37`>g`5348>o7m:4:?11f8m5c408973d2j?:70<:c;a64>;5=j0h8k5224a9g1c<5;?h6n:k;<06g?e3k2799n4l4c9>60e=k=301?;l:b6;?842k3i?;63=5b8`03=::f23348>o7m;3:?11f8m5c538973d2j>;70<:c;a0a>;5=j0h?i5224a9g6e<5;?h6n=m;<06g?e4i2799n4l389>60e=k:201?;l:b14?842k3i8:63=5b8`70=::=4=37`>f55348>o7m<1:?11f8m5c3d8973d2j8n70<:c;a1`>;5=j0h>n5224a9g7d<5;?h6n60e=k;<01?;l:b06?842k3i9863=5b8`66=::f46348>o7m=0:?11f8m5c0f8973d2j;h70<:c;a2f>;5=j0h=l5224a9g4?<5;?h6n?7;<06g?e6?2799n4l179>60e=k8?01?;l:b37?842k3i:>63=5b8`54=::4=37`>f6a348>o7m?e:?11f8m5c1a8973d2j:i70<:c;a3e>;5=j0h<45224a9g51<5;?h6n>9;<06g?e7=2799n4l059>60e=k9901?;l:b21?842k3i;=63=5b8`45=::g`b348>o7lic:?11f8m5bgc8973d2kl270<:c;`e<>;5=j0ij:5224a9fc0<5;?h6oh:;<06g?da<2799n4mf29>60e=kf7b348>o7m>3:?11f8m5bgf8973d2kl;70<:c;aaa>;5=j0o>=5224a9`4`<5;?h6i?j;<06g?b6l2799n4k1b9>60e=l8h01?;l:e3b?842k3n:563=5b8g5==::a72348>o7j>4:?11f8m5d008973d2m;:70<:c;f24>;5=j0ok;<06g?b7k2799n4k0`9>60e=l9301?;l:e2;?842k3n;;63=5b8g43=::a63348>o7j?3:?11f8m5d138973d2jlm70<:c;aea>;5=j0hji5224a9gce<5;?h6nhm;<06g?eai2799n4lf89>60e=ko201?;l:bd4?842k3im:63=5b8`b1=::f`5348>o7mi1:?11f8m5cdd8973d2jon70<:c;af`>;5=j0hin5224a9g`d<5;?h6nk6;<06g?eb02799n4le69>60e=kl<01?;l:bg6?842k3in863=5b8`a6=::fc6348>o7mj0:?11f8m5cef8973d2jnh70<:c;agf>;5=j0hhl5224a9ga?<5;?h6nj7;<06g?ec?2799n4ld79>60e=km?01?;l:bf0?842k3io>63=5b8``4=::4=37`>fea348>o7mle:?11f8m5cba8973d2jii70<:c;a`e>;5=j0ho55224a9gf1<5;?h6nm9;<06g?ed=2799n4lc59>60e=kj901?;l:ba1?842k3ih=63=5b8`g5=::a46348>o7j>6:?11f8m5d128973d2jl>70<:c;afe>;5=j0hhk5224a9ga2<5;?h6nm6;<06g?eek2799n4k8`9>60e=lli01?;l:ega?842k3nnm63=5b8ga<=::ac0348>o7jj6:?11f8m5dd68973d2mo870<:c;ff5>;5=j0oi=5224a9`a`<5;?h6ijj;<06g?bcl2799n4kdb9>60e=lmh01?;l:efb?842k3no563=5b8g`==::ab2348>o7jk4:?11f8m5de08973d2mn:70<:c;fg4>;5=j0ook5224a9`fc<5;?h6imk;<06g?bdj2799n4kc`9>60e=lj301?;l:ea;?842k3nh;63=5b8gg3=::ae3348>o7jl3:?11f8m5db28973d2mhm70<:c;faa>;5=j0oni5224a9`ge<5;?h6ilm;<06g?bei2799n4kb89>60e=lk201?;l:e`4?842k3ni963=5b8gf1=::ad5348>o7jm1:?11f8m5d`d8973d2mkn70<:c;fb`>;5=j0omn5224a9`dg<5;?h6io6;<06g?bf02799n4ka69>60e=lh<01?;l:ec6?842k3nj863=5b8ge6=::ag6348>o7j6f:?11f8m5d8f8973d2m3h70<:c;f:f>;5=j0o5l5224a9`?2799n4k979>60e=l0>01?;l:e;0?842k3n2>63=5b8g=4=::4=37`>a>a348>o7j7e:?11f8m5d9a8973d2m2i70<:c;ff`>;5=j0oi?5224a9`a1<5;?h6iml;<06g?bd92799n4kb79>60e=lhh01?;l:ec3?842k3n2963=5b8g<==::`d?348>o7km7:?11f8m5ec78973d2lh?70<:c;ga7>;5=j0nn?5224a9ag7<5;?h6hl?;<06g?cfn2799n4jae9>60e=mhi01?;l:dca?842k3ojm63=5b8fe<=::`g0348>o7kn6:?11f8m5e`68973d2lk970<:c;gb5>;5=j0nm=5224a9a<`<5;?h6h7j;<06g?c>l2799n4j9b9>60e=m0h01?;l:d;b?842k3o2563=5b8f=2=::`?2348>o7k64:?11f8m5e808973d2l3:70<:c;g:4>;5=j0n4k5224a9a=c<5;?h6h6l;<06g?c?j2799n4j8`9>60e=m1301?;l:d:;?842k3o3;63=5b8f<3=::`>3348>o7k73:?11f8m5e928973d2l=m70<:c;g4a>;5=j0n;i5224a9a2e<5;?h6h9m;<06g?c0i2799n4j789>60e=m>201?;l:d55?842k3o<963=5b8f31=::`15348>o7k81:?11f8m5e7d8973d2l;5=j0n:o5224a9a3g<5;?h6h86;<06g?c102799n4j669>60e=m?<01?;l:d46?842k3o=863=5b8f26=::`07348>o7k:f:?11f8m5e4f8973d2l?h70<:c;g6f>;5=j0n9l5224a9a0?<5;?h6h;7;<06g?c2?2799n4jb89>60e=mho01?;l:dc0?842k3o2463=5b8f`10348>o7k9c:?11f816>8m5e468973d2o8970<:c;d;0>;5=j0m4>5224a9b=4<5;?h6k6>;<06g?`?82799n4i7g9>60e=n>o01?;l:g5g?842k3lc1?348>o7h87:?11f8m5f678973d2o=?70<:c;d47>;5=j0m;?5224a9b27<5;?h6k9?;<06g?`1m2799n4i6e9>60e=n?i01?;l:g4a?842k3l=m63=5b8e2<=::c00348>o7h96:?11f<16>8m5f718973d2o<970<:c;d55>;5=j0m:=5224a9b0`<5;?h6k;j;<06g?`2l2799n4i5b9>60e=n463=5b8e12=::c32348>o7h:4:?11f8m5f408973d2o?:70<:c;d64>;5=j0m8k5224a9b1b<5;?h6k:l;<06g?`3j2799n4i4`9>60e=n=301?;l:g6;?842k3l?;63=5b8e03=::c23348>o7h;2:?11f8m5f528973d2o9m70<:c;d0a>;5=j0m?i5224a9b6e<5;?h6k=m;<06g?`4i2799n4i389>60e=n:=01?;l:g15?842k3l8963=5b8e71=::=4=37`>c55348>o7h<1:?11f8m5f3d8973d2o8n70<:c;d1g>;5=j0m>o5224a9b7g<5;?h6k<6;<06g?`502799n4i269>60e=n;<01?;l:g06?842k3l9863=5b8e66=::c1f348>o7h9f:?11f=16>8m5f4;8973d2o>n70<:c;d77>;5=j0m?55224a9b7b<5;?h6k03n270::2;d7?822;3l?70::4;d7?822=3l?70::6;d7?822?3l?70::8;d7?82213l?70::a;d7?823l3l?70:;e;d7?823n3l?70::0;d7?82293l?7066e;3bg>;>890:mn528gd95de<51ln6ab9>a13;jo637f982ef=:0o=1=lm4=9d6>4gd342m87?nc:?;b6<6ij164k<51`a89=`628kh706i0;3bg>;?mo0:mn528dg95de<51oo6ab9><`?=9hi015k7:0c`?8>b?3;jo637e782ef=:0l?1=lm4=9g7>4gd342n?7?nc:?;a7<6ij164h?51`a89=ba28kh706ke;3bg>;?lm0:mn528ea95de<51ni6ab9>=9hi015j8:0c`?8>c>3;jo637d582ef=:0m91=lm4=9f1>4gd342o=7?nc:?;`5<6ij164nh51`a89=eb28kh706ld;3bg>;?kj0:mn528b`95de<51i26ab9>d<3;jo637c282ef=:0j81=lm4=9a2>4gd342h<7?nc:?;f`<6ij164oj51`a89=dd28kh706mb;3bg>;?jh0:mn528c;95de<51h36ab9>e:3;jo637b082ef=:0k:1=lm4=9ce>4gd342ji7?nc:?;ea<6ij164lm51`a89=ge28kh706na;3bg>;?i10:mn528`595de<51k=6ab9>f93;jo6379g82ef=:19;1=lm4=9d5>4gd348>o7??159>60e=99:27p}9cg83>7}::<=1=4h4=37`>d713ty=oh4?:3y>602=90l01?;l:`36?xu1km0;6?u224395<`<5;?h6l?;;|q5gf<72;q6>9k518d8973d2h;87p}9c`83>7}::=h1=4h4=37`>d763ty=o44?:3y>61>=90l01?;l:`33?xu1k10;6?u225795<`<5;?h6l>i;|q5g2<72;q6>9<518d8973d2h:n7p}9c783>7}:::l1=4h4=37`>d6c3ty=o84?:3y>66e=90l01?;l:`2`?xu1k=0;6?u222;95<`<5;?h6l>m;|q5g6<72;q6>>8518d8973d2h:j7p}9c383>7}:::91=4h4=37`>d6>3ty=o<4?:3y>666=90l01?;l:`2;?xu1jo0;6?u223f95<`<5;?h6l>9;|q5f`<72;q6>?o518d8973d2h:>7p}9be83>7}::;=1=4h4=37`>d633ty=nn4?:3y>672=90l01?;l:`20?xu1jk0;6?u223395<`<5;?h6l>=;|q5fd<72;q6>7}::8h1=4h4=37`>d673ty=n54?:3y>64>=90l01?;l:8de?xu1j>0;6?u220795<`<5;?h64hj;|q5f3<72;q6><<518d8973d20lo7p}9b583>7}::9l1=4h4=37`><`e3ty=n>4?:3y>65e=90l01?;l:8db?xu1j;0;6?u221;95<`<5;?h64h6;|q5f4<72;q6>=8518d8973d20l37p}9b183>7}::991=4h4=37`><`03ty=mk4?:3y>656=90l01?;l:8d5?xu1il0;6?u21gf95<`<5;?h64h:;|q5ea<72;q6=ko518d8973d20l?7p}9ab83>7}:9o=1=4h4=37`><`43ty=mo4?:3y>5c2=90l01?;l:8d1?xu1i00;6?u21g395<`<5;?h64kj;|q5e=<72;q6=hk518d8973d20o87p}9a683>7}:9lh1=4h4=37`>5`>=90l01?;l:8ag?xu1i<0;6?u21d795<`<5;?h64m=;|q5e1<72;q6=h<518d8973d20h<7p}9a283>7}:9ml1=4h4=37`>5ae=90l01?;l:8c2?xu1i80;6?u21e;95<`<5;?h6479;|q5e5<72;q6=i8518d8973d202i7p}9d583>7}:9m91=4h4=37`>d2>3ty=h>4?:3y>5a6=90l01?;l:`1f?xu1l;0;6?u21bf95<`<5;?h6l=<;|q5`4<72;q6=no518d8973d2h837p}9d183>7}:9j=1=4h4=37`>d7c3ty=oo4?:3y>5f2=90l01?;l:`31?xu1k90;6?u21b395<`<5;?h6l>8;|q5f0<72;q6=ok518d8973d20lh7p}9a`83>7}:9kh1=4h4=37`>5g>=90l01?;l:8:3?xudm3:1>vPle:?`b?75>2wxh=4?:3y]`5=:l80:>;5rs7`94?4|V?h01;m51348yv0c2909wS8k;<4f>4413ty=j7>52z\5b>;083;9:6s|7083>7}Y?816;?4>279~w3>=838pR;64=7;9570{tkj0;6?uQcb9>ga<6:?1v5=50;0xZ=5<51>1=?84}r:2>5<5sW2:706=:005?xu0l3:1>vP8d:?4a?75>2wx;o4?:3y]3g=:?j0:>;5rs6;94?4|V>301:o51348yv102909wS98;<5;>4413ty<97>52z\41>;0>3;9:6s|7283>7}Y?:16;94>279~wd3=838pRl;4=`4957052b58263=z{k=1<7=9;<0q~lm:181[de34hh6<<9;|q`5?6=:rTh=63l2;312>{tk<0;6?uQc49>g3<6:?1v5;50;0xZ=3<51<1=?84}r::>5<5sW22706n:005?xu?l3:1>vP7d:?;a?75>2wx4k4?:3y];5rs8794?4|V0?014851348yv?>2909wS76;<;b>4413ty2h7>52z\:`>;>m3;9:6s|a083>7}Yi816m?4>279~wd5=838pRl=4=`69570j272o7?=6:p=2<72;qU5:52998263=z{0;1<7{tjm0;6?uQbe9>f`<6:?1vo750;0xZg?<5kk1=?84}r`6>5<5sWh>70l9:005?xue93:1>vPm1:?a6?75>2wxmi4?:3y]ea=:il0:>;5rs`594?4|Vh=01l651348yv0?13:1>v399082=c=::;|q5<=<72;q6:4>518d8973d28:?:6s|69594?4|5?2m6<7i;<06g?77;k1v;69:18180?m3;2j63=5b8246652z?58m51106?xu10=0;6?u269a95<`<5;?h6<>>a:p2=5=838p1;6m:0;e?842k3;;5<5s4<3m7?6f:?11f<689>0q~8=6;29b~;1:?0:5k523d19576<5:o>6<219>7`g=9;:01>k7:003?85am3;:j6347a349oj7?>f:?0a4<69o16:5?510f8973d2ol27p}99383>7}:>081=4h4=37`>ccd3ty3;7>52z\;3>;?03;9:6s|8c83>7}Y0k164n4>279~w3?b2909w0?ic;ge?87e>3;2=6s|68f94?4|5;:96hh4=0`6>4?63ty=5n4?:3y>65>=mo16=o:51838yv0>13:1>v399682=c=:>021ik5rs7;5>5<5s4<287?6f:?5=0;2i:0:><528b82ef=z{<3o6=49{<7b5?76n27>mo4>1d9>17}:;=k1=4?4=37`>g>43ty88n4?:3y>71e=90l01?;l:c3a?xu47}:;>31=4h4=37`>g153ty8:;4?:3y>7=2=90l01?;l:c55?xu4>>0;6?u239595<`<5;?h6o98;|q02=<72;q6?56518d8973d2k=37p}<6883>7}:;131=4h4=37`>g1>3ty8:l4?:3y>7=g=90l01?;l:c5b?xu4>k0;6?u239`95<`<5;?h6o9m;|q02f<72;q6?5m518d8973d2k=h7p}<4d83>7}:;?l1=4h4=37`>g3c3ty88k4?:3y>726=90l01?;l:c7f?xu4=90;6?u236395<`<5;?h6o;i;|q014<72;q6?:<518d8973d2k<;7p}<5383>7}:;>91=4h4=37`>g063ty89>4?:3y>722=90l01?;l:c41?xu4==0;6?u236795<`<5;?h6o8<;|q010<72;q6?:8518d8973d2k7}:;>=1=4h4=37`>g023ty89:4?:3y>72>=90l01?;l:c45?xu4=00;6?u236c95<`<5;?h6o87;|q01d<72;q6?:l518d8973d2k<27p}<5c83>7}:;>i1=4h4=37`>g0f3ty89n4?:3y>72b=90l01?;l:c4a?xu4=m0;6?u236g95<`<5;?h6o8l;|q01`<72;q6?:h518d8973d2k7}:;1:1=4h4=37`>g0b3ty8:=4?:3y>7=7=90l01?;l:c4e?xu4>80;6?u239095<`<5;?h6o9?;|q027<72;q6?5=518d8973d2k=:7p}<6583>7}:;1?1=4h4=37`>g143ty8:84?:3y>7=0=90l01?;l:c56?xu4km0;6?u229c9`3=::a39>6=b=9h:01>:l:0c3?853?3;j<63<4582e5=::1i1=445349??7?>d:?0<`<69j16>8m5b6f8yv5f;3:1;hu22``9`0=::hn1h8522`g9`0=::hl1h8522c29`0=::k;1h8522c09`0=::k91h8522`39`0=::h81h8522`19`0=::h>1h8522`79`0=::h<1h8522`59`0=::h21h8522`;9`0=::hk1h8522`a9`0=::l91h8522d69`0=::l?1h8522d49`0=:;1l1h85229f9`0=:;=i1h85233d9`0=:;::1h8523239`0=:;:81h8523219`0=:;:>1h8523279`0=:;:<1h8523259`0=::j31h8523159`0=:;921h8523019`0=:;8o1h8523339`0=:;;81h8523319`0=:;;>1h8523379`0=:;;<1h85231;9`0=:;9k1h85231`9`0=:;9i1h85231f9`0=:;9o1h85231d9`0=:;8:1h8523039`0=:;881h8523069`0=:;8?1h8523049`0=:;8=1h85230:9`0=:;831h85230c9`0=:;8h1h85230a9`0=:;8n1h85230d9`0=:;;:1h85237f9`0=:;?o1h85236;9`0=:;1>1h8523959`0=:;121h85239;9`0=:;1k1h85239`9`0=:;1i1h85237d9`0=:;>:1h8523639`0=:;>81h8523619`0=:;>>1h8523679`0=:;><1h8523659`0=:;>21h85236c9`0=:;>h1h85236a9`0=:;>n1h85236g9`0=:;>l1h8523929`0=:;1;1h8523909`0=:;191h8523979`0=:;1<1h8523559`0=:;=>1h85229c9`2=::m21h;522e;9`3=::mk1h;522e`9`3=::mi1h;522ef9`3=::mo1h;522ed9`3=::jn1h;522bg9`3=::jl1h;522e29`3=::m;1h;522e09`3=::m91h;522e69`3=::m?1h;522e49`3=::m=1h;522c69`3=::k?1h;523509`0=::74}r1`f?6=?r79444>219>6=e=98l01>:6:003?84003;9=63=76825c=::>81=g>33ty8m94?:6y>6=?=98l01?6l:03f?85313;:j63=798265=::>=1=447348>o7l6i:dd89712288:70<87;315>;5?;0:=i5224a9f=3n7>52z?;e5<6ij16>8m5659~w73f2909w06n0;32g>;5=j0=?6s|3b494?4|5;=964}r1`=?6=:r79i84jf:?11f7m:18084fj3om70<:e;315>;5=j0i?<5rs2;`>5<4s48jh7ki;<06b?7592799n4m339~w6?c2908w07i:18084e83om70<92;315>;5=j0i?85rs2c3>5<4s48i=7ki;<057?7592799n4m379~w6g62908w07?:18084f93om70<96;315>;5=j0i=i5rs2;2>5<4s48j>7ki;<053?7592799n4m1d9~w6?52908w07;:18084f=3om70<9a;315>;5=j0i><5rs2;6>5<4s48j:7ki;<05f?7592799n4m239~w6?12908w077:18084f13om70<9e;315>;5=j0i>85rs2;:>5<4s48jm7ki;<05b?7592799n4m279~w6?f2908w06=4={<04=?76l2799n4m3c9~w6d72909w0<8b;32`>;5=j0i8;5rs2`a>5<5s48d:?11flj:181840n3;:h63=5b8a10=z{:hm6=4={<0;5?76l2799n4m579~w6e72909w0<73;32`>;5=j0i9:5rs2a2>5<5s48397?>d:?11fm=:18184??3;:h63=5b8a1<=z{:i86=4={<04=?7592799n4m5`9~w6e32909w0<8b;315>;5=j0i9o5rs2c5>5<5s48f:?11fo8:18184?83;:j63=5b8a7a=z{:k36=4={<0;6?76n2799n4m3d9~w6g>2909w0<74;32b>;5=j0i?k5rs2cb>5<5s483:7?>f:?11fom:18184?03;:j63=5b8a04=z{:kh6=4={<04e?76n2799n4m439~w6gc2909w0<8c;32b>;5=j0i8>5rs2cf>5<5s48oi:181840n3;9=63=5b8a00=z{:h:6=4={<0;5?7592799n4m469~w6d52909w0<73;315>;5=j0i855rs2`0>5<5s48397?=1:?11fl;:18184??3;9=63=5b8a0d=z{:h>6=4={<04e?76l2799n4m4c9~w6d12909w0<8c;32`>;5=j0i8n5rs2`4>5<5s48d:?11fl7:18184?83;:h63=5b8a0`=z{:h26=4={<0;6?76l2799n4m4g9~w6df2909w0<74;32`>;5=j0i9=5rs2``>5<5s483:7?>d:?11flk:18184?03;:h63=5b8a11=z{:>>6=4={<170?ca349?:7?61:p71>=838p1>:8:dd8962>283:7p}<8e83>77|5:a><5:=26i64=2:7>a><5:2<6i64=2:;>a><5:226i64=2:b>a><5:2i6i64=2:`>a><5:a><5:=:6i64=251>a><5:=86i64=257>a><5:=>6i64=255>a><5:=<6i64=25;>a><5:=j6i64=25a>a><5:=h6i64=25g>a><5:=n6i64=25e>a><5:2;6i64=2:2>a><5:296i64=2:0>a><5:2>6i64=2:5>a><5:2n6<7>;|q1gd<720q6>nl518389=ce28kh706j0;3bg>;?l<0:mn528bc95de<51hm6ab9><52z?1a3909~w62e290::v3=d98g<>;5l00o463=d`8g<>;5lk0o463=db8g<>;5lm0o463=dd8g<>;5lo0o463=ce8g<>;5kl0o463=cg8g<>;5l90o463=d08g<>;5l;0o463=d28g<>;5l=0o463=d48g<>;5l?0o463=d68g<>;5j=0o463=b48g<>;5000:5<5rs3a`>5<5s483m7h>;<047?7>92wx?>o50;0x964a2ll01?96:0;2?xu4;k0;6?u23229ac=::>h1=4?4}r10g?6=:r78?<4jf:?13a<6181v>=k:181854:3om70<8f;3:5>{t;:o1<7``<5;2:6<7>;|q07c<72;q6?>:5eg9>6=5=90;0q~=;0;296~;4;<0nj63=8482=4=z{:>:6=4={<102?ca3483;7?61:p76>=839p1>=8:dd897e>2ll01?98:0;2?xu40o0;69u239d95<`<5;=>6209~w6202909mv3<4682=c=::k>1j=52354954b<5:>j6209>71?=98n01?;j:003?842l3;9<63=5g8265=::?:1=?>4=342>447348=>7?=0:?126<6:916>;:513289702288;70<96;314>;5>>0:>=5227:9576<5;<26<219>63e=9;:01?8k:003?841m3;9<63=6g8265=::>21=47b348<57?=0:?13f<69l16>:l51328971c28;m70<8f;32b>;5080:=k52291954`<5;2>6219>620=98l01?9>:03g?840;3;:h63<42825`=z{:>?6=4=ez?001<61o16>o;5f19>710=98o01>:n:03g?84?13;:h63=8b8265=:;=31=47a348>h7?>f:?11c<69o16>;>510d8970628;m70<92;32b>;5>:0:=k52276954`<5;<>61g9>63>=98l01?86:03e?841i3;:j63=6c825c=::?i1=47a348=i7?>f:?12c<69o16>:6510g8971>28;m70<8b;32b>;5?l0:=h5226f9576<5;2;61d9>6=7=9;:01?6;:03f?84?;3;9<63=87825`=::1?1=?>4=3:;>47b3483;7?=0:?130<69o16>:8510f8971628;n70<83;32a>;4<:0:=k5rs261>5<5:r794i4jf:?00<<6:816>8k510g8973c28;n70<:f;32a>;5>90:=h52273954c<5;<961d9>633=98o01?89:03f?841?3;:i63=69825`=::?31=47b348=n7?>e:?12f<69l16>;j510g8970b28;n70<9f;32a>;5?10:=k5226;954c<5;=i61d9>6=7=98o01?6<:03f?84?=3;:i63=86825`=::>?1=47b348<;7?=2:?007<61o1v?6k:18184?l3;2j63<4b8fb>{t:l=1<74?a349=h7ki;|q1b7<72;q6?=6518d8960b2ll0q~n278494jf:p757=838p1><>:0;e?85??3om7p}<0383>7}:;;81=4h4=2:;>``52z?066<61o16?575eg9~w6632909w0==4;3:b>;40h0nj6s|31794?5|5::<6hh4=206>4?a3493n7ki;|q043<72:q6?=65eg9>770=90l01>6l:dd8yv4b03:1?v3<128fb>;4800:5k5237d9ac=z{;o26=4<{<12a?ca349;m7?6f:?035ho50;1x96462ll01>>m:0;e?85093om7p}=ec83>6}:;;81ik5231a95<`<5:=96hh4}r0fg?6=;r78>>4jf:?04a<61o16?:=5eg9~w7cc2908w0==4;ge?857m3;2j63<758fb>{t:lo1<7=t=206>``<5::m6<7i;<141?ca3ty9ik4?:2y>770=mo16?<>518d896112ll0q~=1ik5rs3d2>5<4s49;m7ki;<126?7>n278;54jf:p6c5=839p1>>m:dd89673283m70=8a;ge?xu5n=0;6>u231a9ac=:;8?1=4h4=25a>``53z?04a9g9>72e=mo1v?h9:180857m3om70=>7;3:b>;4?m0nj6s|2g594?5|5::m6hh4=23;>4?a3495eg9>74?=90l01>9i:dd8yv4a13:1?v3<108fb>;49h0:5k523929ac=z{;lj6=4<{<126?ca349:n7?6f:?0<4kl50;1x96732ll01>?l:0;e?85?:3om7p}=fb83>6}:;8?1ik5230f95<`<5:286hh4}r0ea?6=;r78=;4jf:?05c<61o16?5;5eg9~w7`a2908w0=>7;ge?85583;2j63<878fb>{t;;=1<74?a3422h7?>c:p77>=838p1>=?:0;e?8>f13;:o6s|33;94?4|5:9:6<7i;<:a0?76k2wx??o50;0x9655283m706mf;32g>{t;;h1<74?a342hm7?>c:p77e=838p1>=;:0;e?8>c=3;:o6s|33f94?4|5:9>6<7i;<:f4?76k2wx??k50;0x9651283m706jb;32g>{t:j31<74?a348hn7?>c:p6`4=838p1?k::0;e?84093;:j6s|2d394?4|5;o?6<7i;<047?7592wx>h>50;0x97c4283m70<81;314>{t:kl1<7c6<5;?o6<7>;|q1f`<72;q6>i85f19>63`=90;0q~7}::m81j=5227`95<752z?1`4909~w7d?2909w04=34;>4?63ty9o54?:3y>6fc=n916>;951838yv4d?3:1>v3=ce8e4>;5>?0:5<5rs3a5>5<5s48oj7h?;<051?7>92wx>n;50;0x97bb2o:01?8;:0;2?xu5k=0;6?u22ef9b5=::?91=4?4}r0`7?6=:r79hn4i0:?127<6181v?m=:18184cj3l;70<91;3:5>{t:j;1<7c6<5;<;6<7>;|q1g5<72;q6>i75f19>60`=90;0q~n2799h4>1e9~w7?f2909w0;5=o0:=i5rs3;a>5<5s48ji7?6f:?125<69m1v?7l:18184fn3;2j63=60825a=z{;3o6=4={<0a4?7>n279:?4>1e9~w7?b2909w0;5>:0:=i5rs3;e>5<5s48i>7?6f:?121<69m1v?o?:18184e;3;2j63=64825a=z{;2n6=4={<0b5?7>n279:;4>1e9~w7>a2909w0;5>>0:=i5rs3;3>5<5s48j?7?6f:?12=<69m1v?7>:18184f<3;2j63=68825a=z{;396=4={<0b1?7>n279:l4>1e9~w7?42909w0;5>k0:=i5rs3;7>5<5s48j;7?6f:?12f<69m1v?7::18184f03;2j63=6e825a=z{;3=6=4={<0b=?7>n279:h4>1e9~w7?02909w0;5>o0:=i5rs3;;>5<5s48jo7?6f:?11a<69m1v?;7:181842>3;2j63=568fb>{t:4?a348>87ki;|q117<72;q6>8>518d897362ll0q~<;f;296~;5h6=4={<07e?7>n2798o4jf:p61?=838p1?:8:0;e?84303om7p}=4783>7}::=>1=4h4=366>``52z?104<61o16>9<5eg9~w7272909w0<;5;o0nj6s|22f94?4|5;9i6<7i;<00g?ca3ty9?l4?:3y>66>=90l01?=6:dd8yv44?3:1>v3=3482=c=:::<1ik5rs317>5<5s488>7?6f:?176>?50;0x974a283m70<<0;ge?xu5:l0;6?u223a95<`<5;8o6hh4}r01f?6=:r79>44>9g9>67g=mo1v?<7:181845>3;2j63=268fb>{t:;?1<74?a348987ki;|q167<72;q6>?>518d897462ll0q~<>f;296~;59m0:5k5220g9ac=z{;;h6=4={<02e?7>n279=o4jf:p64?=838p1??8:0;e?84603om7p}=1783>7}::8>1=4h4=336>``52z?154<61o16><<5eg9~w7772909w0;58o0nj6s|21f94?4|5;:i6<7i;<03g?ca3ty965>=90l01?>6:dd8yv47?3:1>v3=0482=c=::9<1ik5rs327>5<5s48;>7?6f:?146=?50;0x94`a283m709g9>5cg=mo1v3;2j63>f68fb>{t9o?1<74?a34;m87ki;|q2b7<72;q6=k>518d894`62ll0q~?jf;296~;6mm0:5k521dg9ac=z{8oh6=4={<3fe?7>n27:io4jf:p5`?=838p1e783>7}:9l>1=4h4=0g6>``52z?2a4<61o16=h<5eg9~w4c72909w0?ke;3:b>;6lo0nj6s|1ef94?4|58ni6<7i;<3gg?ca3ty:hl4?:3y>5a>=90l01v3>d482=c=:9m<1ik5rs0f7>5<5s4;o>7?6f:?2`69g9>5fg=mo1v3;2j63>c68fb>{t9j?1<74?a34;h87ki;|q2g7<72;q6=n>518d894e62ll0q~?mf;296~;6jm0:5k521cg9ac=z{8hh6=4={<3ae?7>n27:no4jf:p5g?=838p147|5???6i64=776>a><5??h6i64=77g>a><5??n6i64=77e>a><5?<;6i64=742>a><5?<96i64=740>a><5??=6i64=774>a><5??36i64=77:>a><5??j6i64=77a>a><5:ln6<7>;|q0ag<720q6:=m5d99>25b=l116:=k5d99>25`=l116:<>5d99>247=l116:<<5d99>245=l116?hm51838yv5b13:15v39718g<>;1?80o4639738g<>;1?:0o4639758g<>;1?<0o4639778g<>;1?>0o46392wx:;:50;0x93002ll01;8::0;2?xu1:=0;6?u23gd9ac=:>;?1=4?4}r1e7?6=:r7=994jf:?0`f<6181v>h=:181802=3om70=kb;3:5>{t;o;1<7``<5:nj6<7>;|q0b5<72;q6:8j5eg9>7a?=90;0q~=jf;296~;1=l0nj637}:>?;1ik523e695<752z?5274>909~w6`>2909w0893;ge?85c:3;2=6s|3g:94?4|5??=6hh4=2f2>4?63ty8j:4?:3y>201=mo16?i>51838yv5a>3:1>v39598fb>;4ko0:5<5rs2d6>5<5s4<>57ki;<1ga?7>92wx?k:50;0x933f2ll01>jk:0;2?xu4mm0;6?u264`9ac=:;m<1=4?4}r44{t>>k1<7``<5?996<7>;|q53g<72;q6:5j5eg9>263=90;0q~88c;296~;10l0nj6393982=4=z{?=o6=4={<4;b?ca34<8o7?61:p22c=838p1;7?:dd89327283:7p}97g83>7}:>0;1ik5265395<752z?563909~w323290?w08:4;3:b>;4lj0:=k5244a954`<5?8j6<<=;|q50g<72=q6:8;518d896be28;m70:90;32b>;1:k0:>?5rs76`>5<2s4<>o7?6f:?0`d<69o168;l510d89356288970:nf;315>{t>=n1<7;t=77g>4?a349o57?>f:?72a<69o16:>:5130891d3288:7p}94d83>0}:>47a34>=j7?>f:?572<6:;168o;51338yv03n3:19v395g82=c=:;m=1=47a34<8m7?=2:?7f3<6:81v;;?:18680183;2j6391=44534>i;7?=1:p207=83?p1;8>:0;e?85c<3;:j63;74825c=:4453ty=9?4?:4y>234=90l01>j<:03f?820?3;:j6392d825`=:4>9g9>7a4=98o01996:03e?805k3;:i63;ab8264=z{?>>6=4:{<462?7>n278h<4>1d9>00`=98l01;=>:03e?82fl3;9=6s|65494?3|5??<6<7i;<1g4?76m27?:<4>1g9>262=98l019oj:002?xu1<>0;68u264:95<`<5:im61g9>0g6=9;;0q~8;8;291~;1=00:5k523eg954c<5=<>6209~w32>290>w08:a;3:b>;4lm0:=h52475954`<5?9m6;3>00:=k524c19577<5?>967}:>9o1=4h4=711>4473ty>jn4?:2y>25e=90l01;219>05b=9;;0q~8?0;29f~;1990:5k523d1954b<5?<>6?4>1g9>04c=98n01;=7:003?826=3;:h63;198265=:=o91=??4=4db>47a3ty=<<4?:by>247=90l01>k;:03g?801=3;:h63;27825a=:<;81=47b34<8m7?=0:?75=<69l168?;513389140288970;i3;314>;2nh0:=i5rs721>57?6f:?0a0<69m168=h51338914128;n70:>e;32b>;1;l0:>=52407954`<5=886<<>;<7ejl4>219>1`c=98o0q~8?3;29=~;19:0:5k523d4954b<5?8>6?4>219>04`=98o018h<:03f?83ai3;9>639428265=z{?8<6=4;{<41e?75927=>:4>9g9>27>=9;;01;7<:03f?xu1>>0;6?u267595<`<5?8i6<<>;|q523<72;q6:;8518d8932428;n7p}6}:;ol1=4h4=706>47c34<8m7?=1:p1;4m<0:=k523d6954`<5:o=61e9>042=98n019>m:03g?826:3;:i63:a7825`=:<;:1=47b34?mn7?>e:?6b5<69o168=m510g890?d283m708=8;32b>;3:j0:=i525g6954b<5<<;6:44>1d9>1g3=98o0187i:003?xu2=k0;6>u24b6954`<5?9n6<<>;<76f?7>n2wx8?l50;6x93012ll0191d9>7`2=98o01>k9:03f?826?3;:i63;278265=:<9o1=?>4=501>47b34>:?7?>e:?75c<69m169k=510d890`f28;n70;l9;3:b>;1:10:>=5rs4a`>5<4s4>;87?=0:?56`<6:8169im518d8yv3dl3:1?v3;048265=:>;i1=??4=4fg>4?a3ty>oh4?:2y>050=9;:01;=>:003?83cm3;2j6s|5bd94?5|5=:<6<hk4>9g9~w0b72908w0:?8;314>;1;>0:>=525d295<`53z?74<<6:916:>l5133890c6283m7p}:d383>6}:<9k1=?>4=71e>44634?n>7?6f:p1a5=83>p19>k:03f?827k3;9<63:e282=c=:>=81=?>4}r430?6=:r7=::181807l3om70=j0;3:5>{t>9<1<7``<5:o:6<7>;|q542<72;q6:=h5eg9>7`4=90;0q~8?8;296~;1990nj637}:>891ik523d495<753z?535<61o168==510d8934b288;7p}96883>6}:>>;1=4h4=527>47a34<9o7?=0:p23g=839p1;9=:0;e?827=3;:j639338264=z{?n27?<;4>1g9>263=9;;0q~89c;297~;1?=0:5k52415954`<5?936<<>;|q52a<72:q6::;518d8916?28;m708{t>?o1<7=t=755>4?a34>;57?>f:?57c<6:91v;8i:180800?3;2j63;0`825c=:>=91=??4}r420?6=:r7==n4>9g9>27g=98l0q~8>5;296~;19m0:5k5263`954`52z?55`<61o16:>?51338yv06?3:1>v391g82=c=:>:>1=??4}r42=4>9g9>261=9;;0q~8>9;296~;1:80:5k5262c954`53z?567<61o16:>k510d893?428;m7p}91c83>44|5?886<7i;<1fg?76n27>mn4>1e9>0d`=98o019l?:03f?82e93;:i63;b3825`=:47b34>i97?>e:?7f3<69l168o9510g891gf28;n70:nb;32a>;3ij0:=h524`f954c<5=kn68;32b>;3:>0:><5rs506>5<4s4>:o7?=1:?763<618168?9510d8yv26;3:1?v3;1582=4=:<831=?>4=50;>4473ty?><4?:2y>074=90;019<<:03f?83bn3;9<6s|40394?2|5=:n6927?=44>1e9>07>=98n0q~:>d;297~;38l0:><5240g95<7<5=;j6<<>;|q6b=<72283:70:=5;314>;2n10:=k525dd9574:n7>53z?75f<618168?>510d8917f288;7p}:c183>2}:<9:1=47a34>;>7?=0:?6b<<69m169n8518d89176288;70;i5;32a>{t=ln1<74?634?no7ki;|q6b7<72;q69k?5eg9>1c2=90;0q~;i7;296~;2nk0:5<525g49ac=z{=826=4l{<61e?7>927>i>4k8:?6a7i<4k8:?6a5hk4k8:?6``hi4k8:?6`fo54k8:?6g2o;4k8:p1`1=838p19>i:0;2?83d13om7p}:e783>7}:<9o1=4?4=4ab>``52z?74g<618169nl5eg9~w0c22909w0:?c;3:5>;2jo0nj6s|5d:94?4|5=;j6<7>;<7af?ca3ty>i44?:3y>076=90;018ll:dd8yv3bi3:1>v3;2982=4=:=kn1ik5rs4ga>5<5s4>:57?61:?6f`909>1f>=mo1v8j;:181827;3;2=63:db8fb>{t=m?1<74?634?oh7ki;|q6`3<72;q68=;5183890bb2ll0q~;k7;296~;38?0:5<525ed9ac=z{927>i=4jf:p1a?=838p19>7:0;2?83b93om7p}:d`83>7}:<931=4?4=4g1>``52z?74d<618169h=5eg9~w0e6290=w0:?1;32a>;38;0:=k525g;954c<5j84>1g9~w0e5290>w0:?2;32a>;2n00:=k525b:95<`<5=;:6<<=;<7e1?7582wx9k850;37827n3;9>63;15825c=:<8i1=?>4=534>47c34>;i7?>f:?74g<6:8168<=510f89172288;70:=5;32a>;3:>0:>=524329577<5=;m6j54>1e9>1cg=9;;018kj:03g?827k3;:j63:f782=c=:<;n1=47a3ty>j<4?:02x9173288;70:>c;32a>;38l0:=h5241`9576<5=;36:4>1e9>075=98l019?i:003?83a03;9<63:fc8265=:=ll1=??4=52g>47a34?m=7?6f:?754<69l169k:510d8yv3bk3:1hv3;0g8265=:<8>1=??4=53`>47a34>:>7?>f:?766<69m168;2mo0:=i5241f954b<5j94>219~w0ef290ow0:?0;32b>;38:0:=h52416954c<5=:>61d9>05>=98o019>6:03f?827i3;:i63;008265=:<981=??4=50b>47c34?hm7?6f:p1fd=838p19;<7ab?7>n27>m>4>219~w0d0290=w0;96;314>;39h0:=k525639576<5;94>219~w0d?290;2>j0:=h52563954`<5<<36n27>>94>219>122=98o0q~;m9;29<~;3:>0:=h5243:9577<5<:54>219>1gb=90l018<::03g?830<3;:j6s|5cc94??|5=;86209>13e=98l0189>:03g?83103;9=63:bd82=c=:=;?1=47c3ty>544?:5y>055=9;:01876:0;e?83>i3;:h63;2e825`=z{<==6=4>1z?74c<69l168;39<0:><5240;9574<5=8>6>4>219>1c5=9;8018h7:03f?83bn3;:i63;0e8265=:=><1=4h4=50`>44734>:=7?>d:?6b0<69m1v88i:18683083;2=63:6d825`=:44534?2j7?>f:p0=2=838p197j:00b?82?=3;2=6s|44394?4|5=?:6<7>;<6:a?b>3ty?4?4?:2y>007=9h80197k:00b?82?;3;2=6s|44294?5|5=?;6<7>;<665?b>34>2h7j6;|q7<5<72:q688>51`0891?d288j70:71;3:5>{t<=l1<7=t=56e>4?634>><7j6;<6:g?b>3ty?;h4?:2y>01`=9h80197m:00b?820n3;2=6s|45g94?5|5=>n6<7>;<67b?b>34>2n7j6;|q73f<72:q689k51`0891?f288j70:8d;3:5>{t<=n1<7=t=56g>4?634>?i7j6;<6:e?b>3ty?;l4?:2y>01b=9h801976:00b?820j3;2=6s|44c94?5|5=?j6<7>;<67`?b>34>257j6;|q7=3<72:q688o51`0891g0288j70:67;3:5>{t<<31<7=t=57:>4?634>>m7j6;<6b3?b>3ty?594?:2y>00?=9h8019o9:00b?82>=3;2=6s|44:94?5|5=?36<7>;<66=?b>34>j:7j6;|q7=7<72:q688651`0891g2288j70:63;3:5>{t<<=1<7=t=574>4?634>>47j6;<6b1?b>3ty?5=4?:2y>001=9h8019o;:00b?82>93;2=6s|44494?5|5=?=6<7>;<663?b>34>j87j6;|q7<`<72:q688851`0891g4288j70:7f;3:5>{t<4?634>>:7j6;<6b7?b>3ty?4n4?:2y>003=9h8019o=:00b?82?l3;2=6s|44694?5|5=??6<7>;<661?b>34>j>7j6;|q7{t<<91<7=t=570>4?634>>87j6;<6b5?b>3ty?454?:2y>005=9h8019o?:00b?82?13;2=6s|44094?5|5=?96<7>;<667?b>34>j<7j6;|q7<3<72:q688<51`0891?a288j70:77;3:5>{t<=h1<7=t=56a>4?634>>>7j6;<6:b?b>3ty?i<4?:3y>0c?=9;k019k=:0;2?xu3l80;6?u24e395<7<5=l26i74}r6gb?6=;r7?h<4>a39>0c>=9;k019k?:0;2?xu3l90;6>u24e295<7<5=n:6i74=5d;>a?oh7>53z?7`5<6i;168k9513c891bb283:7p};cg83>6}:a?<5=l<6i74}r6gf?6=;r7?ok4>a39>0c0=9;k019jl:0;2?xu3lh0;6>u24ec95<7<5=im6i74=5d5>a?m?7>53z?7`d<6i;169=<513c891`3283:7p};d883>6}:a?<5<:96i74}r6e5?6=;r7?h44>a39>157=9;k019h=:0;2?xu3l10;6>u24e:95<7<5=n26i74=422>a?nj7>53z?7`=<6i;169=>513c891`7283:7p};d683>6}:a?<5<:;6i74}r6f`?6=;r7?h:4>a39>0c`=9;k019kj:0;2?xu3l?0;6>u24e495<7<5=n<6i74=5de>a?nn7>53z?7`3<6i;168kk513c891cd283:7p};d483>6}:a?<5=ln6i74}r6f=?6=;r7?h84>a39>0cb=9;k019kn:0;2?xu3l=0;6>u24e695<7<5=n>6i74=5dg>a?n;7>53z?7`1<6i;168km513c891c?283:7p};d283>6}:a?<5=lh6i74}r6f1?6=;r7?h>4>a39>0cd=9;k019k9:0;2?xu3l;0;6>u24e095<7<5=n86i74=5da>a?n?7>53z?7`7<6i;168ko513c891c3283:7p};ce83>6}:a?<5=lj6i74}r65909>1=c=mo1v8>6:18182>m3;2=63;68825`=z{=<=6=4={<653?7>927>4i4jf:p15>=838p197k:0;2?821?3;:i6s|47694?4|5=<>6<7>;<7;g?ca3ty><:4?:3y>0;0;6?u247195<7<5<2i6hh4}r732?6=:r7?5o4>909>035=98o0q~:90;296~;3>80:5<5259c9ac=z{<:>6=4={<6:e?7>927?:<4>1d9~w13b2909w0::f;3:5>;2000nj6s|51694?4|5=326<7>;<66b?76m2wx8:650;0x911>283:70;66;ge?xu29;0;6?u24`595<7<5==261;296~;3i?0:5<52465954c<87>52z?730<6181694:5eg9~w0772909w0:n5;3:5>;3?<0:=h5rs551>5<5s4>{t<>:1<74?634?2>7ki;|q64`<72;q68l=51838911628;n7p};6d83>7}:``52z?7e7<618168;h510g8yv21k3:1>v3;6e82=4=:=0:1ik5rs42`>5<5s4>j=7?61:?72a<69l1v98n:181821j3;2=63:8g8fb>{t=9h1<74?634>=n7?>e:p00b=838p198?:0;2?83?03om7p}:0`83>7}:<0l1=4?4=543>47b3ty?9o4?:3y>00e=90;01868:dd8yv37;3:1>v3;9982=4=:<b2m20186k:e:890>d2m20186m:e:890>f2m201866:e:890?12m20187::e:890?32m20187<:e:890?52m20187>:e:890?72m20186i:e:890>?2m201868:e:8yv3183:1>v3:5g8fb>;2>90:5<5rs440>5<5s4?=>7ki;<75=?7>92wx9;l50;0x900e283:70;9a;ge?xu2>l0;6?u257g95<7<5<;?4jf:?636<6181v88::180831>3;2=63:6b8264=:=?21=?44k8:?67=?:4k8:?66c>h4k8:?66a=94>909~w02?290mw0;;c;3:5>;3io0:=k524c2954`<5=h:64>1g9>0g2=98l019l::03e?82e>3;:j63;b6825c=:47a34>jo7?>f:?7ea<69o168lk510d8yv3f83:1>v3:a082=4=:=k<1ik5rs50f>5<5s4>j47?61:?6331=4?4}r601?6=:r7>9>4jf:?7f0<6181v9=9:181832<3om70:m6;3:5>{t<:=1<7``<5=h<6<7>;|q77=<72;q69885eg9>0dg=90;0q~:<9;296~;2=>0nj63;ac82=4=z{=9j6=4={<76jo7?61:p06d=838p18;6:dd891gc283:7p};3b83>7}:=8<7>52z?60c909~w1562909w0;:0;ge?82e93;2=6s|42094?4|54?63ty??>4?:3y>104=mo168o=51838yv3>m3:1>v3;c482=4=:=0l1=909>0d`=9;:0q~:;2;296~;3nh0:5<524c69576??7>52z?7bg<618168o;51328yv23<3:1>v3;fb82=4=:4}r671?6=:r7?ji4>909>0g1=9;:0q~:;6;296~;3nl0:5<524`c9576?;7>52z?7bc<618168ll51328yv2303:1>v3:0182=4=:4}r67=?6=:r7><<4>909>0db=9;:0q~:;a;296~;28;0:5<524`g95768i7>52z?7b3<618168o>51328yv24n3:1>v3;f682=4=:4}r674?6=:r7?j54>909>0g4=9;:0q~:;1;296~;3n00:5<524c1957652z?7gg<6181694m5eg9~w03c2909w0:l4;3:5>;2=k0nj6s|5c394?4|5=i26<7>;<76a?ca3ty>n=4?:3y>0f>=90;018;l:dd8yv3e:3:1>v3;c`82=4=:=021ik5rs4cf>5<5s4>h;7?61:?6=2=50;0x91e7283:70;nf;ge?xu2:00;6?u24ca95<7<5909>161=mo1v8=::18182d:3;2=63:398fb>{t=:<1<74?634?857ki;|q66d<72;q68oj51838904c2ll0q~;=b;296~;3jl0:5<5253g9ac=z{<8h6=4={<6ab?7>927>>k4jf:p14`=838p19ln:0;2?83593om7p}:2183>7}:``52z?7f=<618169;29j0nj6s|5`594?74s4>=57?>d:?722<69m168;;510f8910428;o70:91;32`>;3=o0:=i5246;954b<5==<64>1e9>027=98n0198i:03g?821l3;:h63;6c825a=:47c34?::7?>d:?6ef<618169:;5eg9~w0g2290=w0:l5;316>;2i?0:5<5257`954b<5<m>4>239~w0d42908w0:lc;32b>;2j:0:5k525c7957653z?7gg<69l169?=518d8904328897p}:7683>6}:=h21=47c34?3;7?6f:p12c=839p18o7:03g?83?03;2j63;86825f=z{<=m6=4<{<7b4k4>9g9>0=?=98i0q~;70;297~;2i10:>=5258295<`<5=2i6{t=181<7=t=4c;>44534?2>7?6f:?7m44>1e9>1<2=90l0197<:03`?xu20<0;6>u25`;954`<5<3>6<7i;<6:1?76k2wx95850;1x90g>288;70;66;3:b>;31>0:=n5rs45;>5<4s4?j57?=1:?6<<<61o168:l510a8yv3013:1?v3:a88267=:=1k1=4h4=55g>47d3ty>;l4?:2y>1dg=98o0186m:0;e?820n3;:o6s|56`94?5|5n27?4<4>1b9~w01d2908w0;na;32b>;20m0:5k52491954e53z?6ed<6:91695k518d891>228;h7p}:3383>7}:4?a3ty>?=4?:2y>0f6=98l019m=:03f?834?3;2j6s|52394?5|5=i;6?54>9g9~w04?2909w0:mc;32a>;2:o0:5k5rs405>5<4s4>io7?>f:?7f`<69l169?j518d8yv35?3:1?v3;bb825a=:4?a3ty>;?4?:dy>0f3=98n01889:03g?831j3;9<63:6d8265=:=?>1=??4=444>44734>h:7?=0:?7gg<6:8168l6510g89015283m70;90;314>;2?:0:=k525c79574<5;2>k0:>?5257g9574<5<1d9>0d>=9;:0188k:0;e?83193;:j63:a58265=z{<;=4>219>13d=98o0188;:03e?831?3;:j63:69825c=:47c34?=m7?6f:?624<69l169l:51338yv31:3:1mv3;c48264=:=>:1=47c34?=87?>d:?622<69m168n8510d891g>28;n70;92;3:b>;2>80:=i525`6954cj7>59z?7g0<69l169:>510g8900128;m70:n8;316>;2=o0:5k525`1954c<5<<;6m94>1g9~w012290hw0;9b;32b>;2>l0:=k525769576<5=k36n27>>94>1d9>136=9;;0189<:003?83113;:j63:b4825c=:=h>1=47b3ty>554?:2y>0f?=98o019m7:003?83>03;2j6s|58594?5|5n27>5l4>1g9~w0ga290=w0:l9;314>;3k10:=h524bc954c<5=ih6n27>5l4>219~w0gc290;3k00:=k524b:954`<5=i<6mi4>9g9>1i7>53z?7g1<69m168nl51328903b283m7p}:5b83>7}:1=?>4=47`>4?a3ty>n;4?:2y>1d7=9;:018?9:03f?83e>3;2j6s|52c94?5|5<>j68i4>9g9~w05a2908w0;;a;32`>;253z?60d<69o1698=518d891c128;h7p}:4083>6}:==k1=?>4=477>4?a34>n47?>c:p114=839p18:n:002?832=3;2j63;e`825f=z{<>86=4<{<77e?75:27>9;4>9g9>0`e=98i0q~;;4;297~;2{t==<1<7=t=46a>47a34?>57?6f:?7b7<69j1v8:8:180833j3;9<63:5`82=c=:1=8o4>209>11`=90l019jl:03`?xu2;j0;6>u255`9574<5j50;6x902d28;n70;:1;3:b>;29=0:=h524d2954e54z?60f<69m1698<518d8907328;o70:j2;32g>{t=8o1<747b34?9>7?6f:p14b=838p19lm:03f?83593;2j6s|50:94?4|5=ho6n2wx9<950;0x91d>28;n70;>b;3:b>{t9:?1<74?6348<57?=2:p56e=838p1?9l:0;2?840j3;9>6s|14294?4|5;=n6<7>;<04`?75:2wx=;;50;0x97>7283:70<8f;316>{t9>k1<74?63483=7?=2:p561=838p1?6;:0;2?84?;3;9>6s|12:94?4|5;2=6<7>;<0;1?75:2wx=>750;0x97>?283:70<77;316>{t:>>1<74?6348<;7?=0:p623=838p1?99:0;2?840?3;:h6s|26294?4|5;=:6<7>;<047?75:2wx>:?50;0x9715283:70<83;32b>{t>:<1<74?634<847?=2:p265=838p1;=;:0;2?804=3;9>6s|62294?4|5?9:6<7>;<406?75:2wx:>j50;0x935b283:708;0;32a>{t>:o1<74?634f:p26?=838p1;=n:0;2?804k3;:i6s|62c94?4|5?9i6<7>;<40g?76n2wx:?o50;0x934e283:708=d;32a>{t>;h1<74?634<9h7?>f:p27?=838p1;;<41b?76n2wx8<>50;0x917>28;n70:>1;3:5>{t<8?1<74?634>:47?=2:p04>=838p19?::0;2?82603;9=6s|40;94?4|5=;36<7>;<62=?76n2wx8?:50;0x9142283:70:=8;32a>{t<;=1<74?634>947?>f:p56g=838p19<<:0;2?82583;9>6s|12`94?4|5=;m6<7>;<62e?75:2wx9k=50;0x90`4283:70;i4;315>{t=ok1<74?634?mn7?=2:p1cd=838p18hn:0;2?83aj3;:j6s|5dg94?4|5;<7fb?76n2wx9hh50;0x90ca283:70;i0;32`>{t9:n1<74?634>;o7?=1:p56c=838p188l:0;2?831j3;9=6s|15094?4|5<=:6<7>;<75a?7592wx9;:50;0x9003283:70;99;316>{t=?=1<74?634?=57?=1:p13>=838p1887:0;2?83113;9<6s|15:94?4|5=i=6<7>;<7b7?76n2wx=9750;0x91ed283:70:lb;316>{t9=k1<74?634>j47?=1:p11?=839p18:n:0;2?833k3;9<63:158265=z{<>j6=4<{<77f?7>927>8n4>1g9>142=98l0q~;n8;296~;2i10:5<525`a957452z?6e<<618169lm51328yv3fi3:1>v3:a`82=4=:=hi1=??4}r7bf?6=:r7>mo4>909>1de=98o0q~9j7;296~X0m>164>8510a8yv1ck3:1>vP8db9><63=98i0q~h::181[`234l=6n6=4={<:e2?7>92799n496:p51`=838p1>5083>7}:;8l1ik528d295<7>7>52z?05a909~w4342909w0=>c;ge?8>di3;2=6s|14694?4|5:;i6hh4=9`e>4?63ty:984?:3y>74g=mo164o:51838yv72>3:1>v3<188fb>;?i00:5<5rs074>5<5s49:47ki;<::`?7>92wx=8650;0x94d02ll01;751838yv7213:1>v3>b`8fb>;0n3;2=6s|14c94?4|58ho6hh4=8195<7n7>52z?2g5{t9``<5jh1=4?4}r36b?6=:r7:on4jf:?``?7>92wx=;>50;0x94ea2ll01nh51838yv7193:1>v3>d38fb>;c93;2=6s|17094?4|58n>6hh4=7a95<752z?2`={t9?=1<7``<5>>1=4?4}r3592wx=;750;0x94c02ll01:651838yv71i3:1>v3>e`8fb>;0i3;2=6s|17`94?4|58oo6hh4=6a95<752z?2b5{t9?l1<7``<51<1=4?4}r344?6=:r7=594jf:?;92wx=:?50;0x94`a2ll015o51838yv70:3:1>v39968fb>;?k3;2=6s|16194?4|5;:>6hh4=9g95<752z?14gj:dd89<4=90;0q~?86;296~;5980nj6366;3:5>{t9>=1<7``<5021=4?4}r3492wx=:750;0x977f2ll014m51838yv70j3:1>v3=1e8fb>;>m3;2=6s|16a94?4|5;8;6hh4=`295<752z?1667?61:p52c=838p1?<9:dd89d2=90;0q~?8f;296~;5:00nj63n6;3:5>{t91:1<7``<5h21=4?4}r3;5?6=:r79>k4jf:?bg?7>92wx=5<50;0x97552ll01lk51838yv7?;3:1>v3=348fb>;e83;2=6s|19694?4|5;936hh4=c095<752z?17g{t9121<7``<5kk1=4?4}r3;=?6=:r798:4jf:?ag?7>92wx=5o50;0x972f2ll01ok51838yv7?j3:1>v3=4e8fb>;d:3;2=6s|19a94?4|5;?;6hh4=b695<752z?116=90;0q~7;7;296~X><>165:h51838yv?3=3:1>vP6449>=2c=90;0q~7;4;296~X><=165:j51838yv?3;3:1>vP6429>=2e=90;0q~7;2;296~X><;165:l51838yv?393:1>vP6409>=2g=90;0q~7;0;296~X><9165:751838yv?4n3:1>vP63g9>=2>=90;0q~7;l165:951838yv?4l3:1>vP63e9>=20=90;0q~7;j165:;51838yv?4i3:1>vP63`9>=22=90;0q~7<9;296~X>;0165:=51838yv?403:1>vP6399>=24=90;0q~7<7;296~X>;>165:?51838yv?4>3:1>vP6379>=26=90;0q~7<5;296~X>;<165;h51838yv?4<3:1>vP6359>=3c=90;0q~7<3;296~X>;:165;j51838yv?4:3:1>vP6339>=3e=90;0q~7<1;296~X>;8165;l51838yv?693:1>vP6109>=3g=90;0q~7>0;296~X>99165;751838yv?7m3:1>vP60d9>=3>=90;0q~;i:181[3a34<;6<7>;|q70f<72:q689m51838912e28k970:68;31e>{t4?634>hh7?n2:?7b0<6:h1v9{t=h91<7``<5;|q6f0<72;q69o=5eg9>1g3=90;0q~;6f;296~;21m0nj63:9g82=4=z{<3j6=4={<7:=?ca34?2m7?61:p172=838p18<<:dd89043283:7p}<4283>7}:;=81ik5235195<752z?5=74>909~w34?2909w08=7;ge?80503;2=6s|12d94?4|592wx=9>50;0x914c283:70:=c;316>{t9=;1<74?634?987?=1:p515=838p18h::0;2?83a<3;9>6s|15694?4|5<<:6<7>;<754?75:2wx=9;50;0x9013283:70;83;315>{t9=<1<74?634d:p511=838p1;:<:0;2?80393;:i6s|15a94?4|58>o692wvb0;295~N6io1vb1;295~N6io1vb2;295~N6io1vb3;295~N6io1vb4;295~N6io1vb5;295~N6io1vb6;295~N6io1vb7;295~N6io1vb8;295~N6io1vb9;295~N6io1vba;295~N6io1vbb;295~N6io1vbc;295~N6io1vbd;295~N6io1vbe;295~N6io1vbf;295~N6io1vb0;295~N6io1vb1;295~N6io1vb2;295~N6io1vb3;295~N6io1vb4;295~N6io1vb5;295~N6io1vb6;295~N6io1vb7;295~N6io1vb8;295~N6io1vb9;295~N6io1vba;295~N6io1vbb;295~N6io1vbc;295~N6io1vbd;295~N6io1vbe;295~N6io1vbf;295~N6io1vb0;295~N6io1vb1;295~N6io1vb2;295~N6io1vb3;295~N6io1vb4;295~N6io1vb5;295~N6io1vb6;295~N6io1vb7;295~N6io1vb8;295~N6io1vb9;295~N6io1vba;295~N6io1vbb;295~N6io1vbc;295~N6io1vbd;295~N6io1vbe;295~N6io1vbf;295~N6io1vb?0;295~N6io1vb?>?1;295~N6io1vb?>?2;295~N6io1vb?>?3;295~N6io1vb?>?4;295~N6io1vb?>?5;295~N6io1vb?>?6;295~N6io1vb?>?7;295~N6io1vb?>?8;295~N6io1vb?>?9;295~N6io1vb?>?a;295~N6io1vb?>?b;295~N6io1vb?>?c;295~N6io1vb?>?d;295~N6io1vb?>?e;295~N6io1vb?>?f;295~N6io1vb?>>0;295~N6io1vb?>>1;295~N6io1vb?>>2;295~N6io1vb?>>3;295~N6io1vb?>>4;295~N6io1vb?>>5;295~N6io1vb?>>6;295~N6io1vb?>>7;295~N6io1vb?>>8;295~N6io1vb?>>9;295~N6io1vb?>>a;295~N6io1vb?>>b;295~N6io1vb?>>c;295~N6io1vb?>>d;295~N6io1vb?>>e;295~N6io1vb?>>f;295~N6io1vb?>=0;295~N6io1vb?>=1;295~N6io1vb?>=2;295~N6io1vb?>=3;295~N6io1vb?>=4;295~N6io1vb?>=5;295~N6io1vb?>=6;295~N6io1vb?>=7;295~N6io1vb?>=8;295~N6io1vb?>=9;295~N6io1vb?>=a;295~N6io1vb?>=b;295~N6io1vb?>=c;295~N6io1vb?>=d;295~N6io1vb?>=e;295~N6io1vb?>=f;295~N6io1vb?><0;295~N6io1vb?><1;295~N6io1vb?><2;295~N6io1vb?><3;295~N6io1vb?><4;295~N6io1vb?><5;295~N6io1vb?><6;295~N6io1vb?><7;295~N6io1vb?><8;295~N6io1vb?><9;295~N6io1vb?>;0;295~N6io1vb?>;1;295~N6io1vb?>;2;295~N6io1vb?>;3;295~N6io1vb?>;4;295~N6io1vb?>;5;295~N6io1vb?>;6;295~N6io1vb?>;7;295~N6io1vb?>;8;295~N6io1vb?>;9;295~N6io1vb?>;a;295~N6io1vb?>;b;295~N6io1vb?>;c;295~N6io1vb?>;d;295~N6io1vb?>;e;295~N6io1vb?>;f;295~N6io1vb?>:0;295~N6io1vb?>:1;295~N6io1vb?>:2;295~N6io1vb?>:3;295~N6io1vb?>:4;295~N6io1vb?>:5;295~N6io1vb?>:6;295~N6io1vb?>:7;295~N6io1vb?>:8;295~N6io1vb?>:9;295~N6io1vb?>:a;295~N6io1vb?>:b;295~N6io1vb?>:c;295~N6io1vb?>:d;295~N6io1vb?>:e;295~N6io1vb?>:f;295~N6io1vb?>90;295~N6io1vb?>91;295~N6io1vb?>92;295~N6io1vb?>93;295~N6io1vb?>94;295~N6io1vb?>95;295~N6io1vb?>96;295~N6io1vb?>97;295~N6io1vb?>98;295~N6io1vb?>99;295~N6io1vb?>9a;295~N6io1vb?>9b;295~N6io1vb?>9c;295~N6io1vb?>9d;295~N6io1vb?>9e;295~N6io1vb?>9f;295~N6io1vb?>80;295~N6io1vb?>81;295~N6io1vb?>82;295~N6io1vb?>83;295~N6io1vb?>84;295~N6io1vb?>85;295~N6io1vb?>86;295~N6io1vb?>87;295~N6io1vb?>88;295~N6io1vb?>89;295~N6io1vb?>8a;295~N6io1vb?>8b;295~N6io1vb?>8c;295~N6io1vb?>8d;295~N6io1vb?>8e;295~N6io1vb?>8f;295~N6io1vb?>70;295~N6io1vb?>71;295~N6io1vb?>72;295~N6io1vb?>73;295~N6io1vb?>74;295~N6io1vb?>75;295~N6io1vb?>76;295~N6io1vb?>77;295~N6io1vb?>78;295~N6io1vb?>79;295~N6io1vb?>7a;295~N6io1vb?>7b;295~N6io1vb?>7c;295~N6io1vb?>7d;295~N6io1vb?>7e;295~N6io1vb?>7f;295~N6io1vb?>60;295~N6io1vb?>61;295~N6io1vb?>62;295~N6io1vb?>63;295~N6io1vb?>64;295~N6io1vb?>65;295~N6io1vb?>66;295~N6io1vb?>67;295~N6io1vb?>68;295~N6io1vb?>69;295~N6io1vb?>6a;295~N6io1vb?>6b;295~N6io1vb?>6c;295~N6io1vb?>6d;295~N6io1vb?>6e;295~N6io1vb?>6f;295~N6io1vb?>n0;295~N6io1vb?>n1;295~N6io1vb?>n2;295~N6io1vb?>n3;295~N6io1vb?>n4;295~N6io1vb?>n5;295~N6io1vb?>n6;295~N6io1vb?>n7;295~N6io1vb?>n8;295~N6io1vb?>n9;295~N6io1vb?>na;295~N6io1vb?>nb;295~N6io1vb?>nc;295~N6io1vb?>nd;295~N6io1vb?>ne;295~N6io1vb?>nf;295~N6io1vb?>m0;295~N6io1vb?>m1;295~N6io1vb?>m2;295~N6io1vb?>m3;295~N6io1vb?>m4;295~N6io1vb?>m5;295~N6io1vb?>m6;295~N6io1vb?>m7;295~N6io1vb?>m8;295~N6io1vb?>m9;295~N6io1vb?>ma;295~N6io1vb?>mb;295~N6io1vb?>mc;295~N6io1vb?>md;295~N6io1vb?>me;295~N6io1vb?>mf;295~N6io1vb?>l0;295~N6io1vb?>l1;295~N6io1vb?>l2;295~N6io1vb?>l3;295~N6io1vb?>l4;295~N6io1vb?>l5;295~N6io1vb?>l6;295~N6io1vb?>l7;295~N6io1vb?>l8;295~N6io1vb?>l9;295~N6io1vb?>la;295~N6io1vb?>lb;295~N6io1vb?>lc;295~N6io1vb?>ld;295~N6io1vb?>le;295~N6io1vb?>lf;295~N6io1vb?>k0;295~N6io1vb?>k1;295~N6io1vb?>k2;295~N6io1vb?>k3;295~N6io1vb?>k4;295~N6io1vb?>k5;295~N6io1vb?>k6;295~N6io1vb?>k7;295~N6io1vb?>k8;295~N6io1vb?>k9;295~N6io1vb?>ka;295~N6io1vb?>kb;295~N6io1vb?>kc;295~N6io1vb?>kd;295~N6io1vb?>ke;295~N6io1vb?>kf;295~N6io1vb?>j0;295~N6io1vb?>j1;295~N6io1vb?>j2;295~N6io1vb?>j3;295~N6io1vb?>j4;295~N6io1vb?>j5;295~N6io1vb?>j6;295~N6io1vb?>j7;295~N6io1vb?>j8;295~N6io1vb?>j9;295~N6io1vb?>ja;295~N6io1vb?>jb;295~N6io1vb?>jc;295~N6io1vb?>jd;295~N6io1vb?>je;295~N6io1vb?>jf;295~N6io1vb?>i0;295~N6io1vb?>i1;295~N6io1vb?>i2;295~N6io1vb?>i3;295~N6io1vb?>i4;295~N6io1vb?>i5;295~N6io1vb?>i6;295~N6io1vb?>i7;295~N6io1vb?>i8;295~N6io1vb?>i9;295~N6io1vb?>ia;295~N6io1vb?>ib;295~N6io1vb?>ic;295~N6io1vb?>id;295~N6io1vb?>ie;295~N6io1vb?>if;295~N6io1vb???0;295~N6io1vb???1;295~N6io1vb???2;295~N6io1vb???3;295~N6io1vb???4;295~N6io1vb???5;295~N6io1vb???6;295~N6io1vb???7;295~N6io1vb???8;295~N6io1vb???9;295~N6io1vb???a;295~N6io1vb???b;295~N6io1vb???c;295~N6io1vb???d;295~N6io1vb???e;295~N6io1vb???f;295~N6io1vb??>0;295~N6io1vb??>1;295~N6io1vb??>2;295~N6io1vb??>3;295~N6io1vb??>4;295~N6io1vb??>5;295~N6io1vb??>6;295~N6io1vb??>7;295~N6io1vb??>8;295~N6io1vb??>9;295~N6io1vb??>a;295~N6io1vb??>b;295~N6io1vb??>c;295~N6io1vb??>d;295~N6io1vb??>e;295~N6io1vb??>f;295~N6io1vb??=0;295~N6io1vb??=1;295~N6io1vb??=2;295~N6io1vb??=3;295~N6io1vb??=4;295~N6io1vb??=5;295~N6io1vb??=6;295~N6io1vb??=7;295~N6io1vqpsO@By11d1=l=>oi478}ABA5{GHYqvLM \ No newline at end of file diff --git a/WiiChuck/circuit/DUO_LX9/papilio_duo_lx9.bit b/WiiChuck/circuit/DUO_LX9/papilio_duo_lx9.bit deleted file mode 100644 index e45c161..0000000 Binary files a/WiiChuck/circuit/DUO_LX9/papilio_duo_lx9.bit and /dev/null differ diff --git a/WiiChuck/circuit/DUO_LX9/sch2HdlBatchFile b/WiiChuck/circuit/DUO_LX9/sch2HdlBatchFile deleted file mode 100644 index e69de29..0000000 diff --git a/WiiChuck/circuit/LX9/papilio_pro.bit b/WiiChuck/circuit/LX9/papilio_pro.bit deleted file mode 100644 index 01041fc..0000000 Binary files a/WiiChuck/circuit/LX9/papilio_pro.bit and /dev/null differ diff --git a/WiiChuck/circuit/PSL_Papilio_One_250K.xise b/WiiChuck/circuit/PSL_Papilio_One_250K.xise deleted file mode 100644 index 616da4c..0000000 --- a/WiiChuck/circuit/PSL_Papilio_One_250K.xise +++ /dev/null @@ -1,367 +0,0 @@ - - - -
- - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
diff --git a/WiiChuck/circuit/PSL_Papilio_One_500K.xise b/WiiChuck/circuit/PSL_Papilio_One_500K.xise deleted file mode 100644 index cb5a3be..0000000 --- a/WiiChuck/circuit/PSL_Papilio_One_500K.xise +++ /dev/null @@ -1,375 +0,0 @@ - - - -
- - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
diff --git a/WiiChuck/circuit/PSL_Papilio_Pro_LX9.xise b/WiiChuck/circuit/PSL_Papilio_Pro_LX9.xise deleted file mode 100644 index 65e2947..0000000 --- a/WiiChuck/circuit/PSL_Papilio_Pro_LX9.xise +++ /dev/null @@ -1,408 +0,0 @@ - - - -
- - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
diff --git a/WiiChuck/circuit/schematic_papilio_DUO.pdf b/WiiChuck/circuit/schematic_papilio_DUO.pdf deleted file mode 100644 index 23a05ae..0000000 Binary files a/WiiChuck/circuit/schematic_papilio_DUO.pdf and /dev/null differ diff --git a/WiiChuck/circuit/schematic_papilio_one_250k.pdf b/WiiChuck/circuit/schematic_papilio_one_250k.pdf deleted file mode 100644 index 4a8e7dc..0000000 Binary files a/WiiChuck/circuit/schematic_papilio_one_250k.pdf and /dev/null differ diff --git a/WiiChuck/circuit/schematic_papilio_one_500k.pdf b/WiiChuck/circuit/schematic_papilio_one_500k.pdf deleted file mode 100644 index 6083c3f..0000000 Binary files a/WiiChuck/circuit/schematic_papilio_one_500k.pdf and /dev/null differ diff --git a/WiiChuck/circuit/schematic_papilio_pro.pdf b/WiiChuck/circuit/schematic_papilio_pro.pdf deleted file mode 100644 index 5a5f2e2..0000000 Binary files a/WiiChuck/circuit/schematic_papilio_pro.pdf and /dev/null differ diff --git a/examples.ino b/examples.ino index 3162492..01ebebd 100644 --- a/examples.ino +++ b/examples.ino @@ -37,6 +37,51 @@ http://forum.gadgetfactory.net TABLE OF CONTENTS FOR EXAMPLE PROJECTS +****IMPORTANT - Here is a list of all of the pre-existing circuits that you can use in your DesignLab Sketches ********* + example://Circuit_Library_Descriptions/Circuit_Library_Descriptions.ino + +New/Featured + RGB LED Matrix Panel + Use the SmartMatrix library to make cool graphics on a 32x32 RGB LED Panel with 1024 RGB pixels. + The SmartMatrix Animated GIF player works as well as 1-Pixel Pacman from HackaDay. + Go to File/Examples/SmartMatrix_32x32 + + ZPUino VGA Adapter + This exciting VGA adapter lets you change resolutions on the fly and use the AdaFruit GFX library to program it. This is the latest and greatest VGA adapter. + Go to File/Examples/ZPUino_VGA_Adapter + + Audio Project - RetroCade Synth + The RetroCade Synth project has been updated to work with ZPUino 2.0. + The MIDI library has been updated to fix Note-Off issues. + How about putting all of these audio chips together and putting them under MIDI control? That's what this project does, there is even a special MegaWing to provide high quality audio jacks, MIDI connnectors, and a Digital readout. + example://Audio_RetroCade_Synth/Audio_RetroCade_Synth.ino + + Servo Library - Works for Arduino and ZPUino projects now + Go to File/Examples/Servo + + Nintendo WiiChuck Example - I2C library + The WiiChuck Example lets you tap into the Nintendo Wii Chuck controller by connecting it to a Wii Wing. + The WiiChuck uses the I2C "Chip" and accompanying library and shows how to use I2C in your own projects. + example://WiiChuck/WiiChuck.ino + http://store.gadgetfactory.net/wii-wing/ + + Robot Control Library + This Robot Control Library is one of the best libraries available on Opencores.com. It has been converted to DesignLab format for ease of use. + Working now are: + -PWM Output + -Quadrature Decoder + Still to be ported: + -Stepper Controller + -PID Controller + There are working examples for the Encoder Wing available in the Gadget Factory store. + Go to File/Examples/Robot Control Library + http://store.gadgetfactory.net/encoder-wing/ + + PS/2 Library - For mouse and keyboard input + The default Arduino library has been tested and verified to work with ZPUino as well. + Use this library for mouse and keyboard input from the PS/2 ports of the Arcade MegaWing or the Computing Shield. + Go to File/Examples/PS2 + UTILITY PROJECTS Wishbone Slots This is a very useful sketch that shows what is connected to the ZPUino Wishbone Slots. @@ -75,7 +120,9 @@ PAPILIO DUO PROJECTS AVR to Wishbone Bridge How to access Wishbone peripherals from the AVR. - Go to File/Examples/AVR_Wishbone_Bridge + You can follow a tutorial showing how to use the Wishbone bridge to communicate between the AVR and the ZPUino on the FPGA: + http://gadgetfactory.net/learn/2015/05/25/papilio-duo-avr-to-zpuino-communication-over-wishbone/ + example://AVR_to_ZPUino_Communications/AVR_to_ZPUino_Communications.ino ZPUino VGA Adapter This exciting VGA adapter lets you change resolutions on the fly and use the AdaFruit GFX library to program it. This is the latest and greatest VGA adapter. @@ -170,6 +217,8 @@ ZPUINO SOFT PROCESSOR PROJECTS example://Papilio_QuickStart/Papilio_QuickStart.ino Audio Project - RetroCade Synth + The RetroCade Synth project has been updated to work with ZPUino 2.0. + The MIDI library has been updated to fix Note-Off issues. How about putting all of these audio chips together and putting them under MIDI control? That's what this project does, there is even a special MegaWing to provide high quality audio jacks, MIDI connnectors, and a Digital readout. example://Audio_RetroCade_Synth/Audio_RetroCade_Synth.ino @@ -205,4 +254,4 @@ MISC PROJECTS Bitcoin Miner Go to File/Examples/BitCoin_Miner to get started mining your very own BitCoins on the Papilio. -*/ \ No newline at end of file +*/ diff --git a/hdmi-generic/smallfs/image.jpg b/hdmi-generic/smallfs/image.jpg new file mode 100644 index 0000000..4815adf Binary files /dev/null and b/hdmi-generic/smallfs/image.jpg differ diff --git a/libraries/AVR_Wishbone_Bridge/AVR_Wishbone_Bridge.cpp b/libraries/AVR_Wishbone_Bridge/AVR_Wishbone_Bridge.cpp deleted file mode 100644 index 82b712f..0000000 --- a/libraries/AVR_Wishbone_Bridge/AVR_Wishbone_Bridge.cpp +++ /dev/null @@ -1,78 +0,0 @@ -/* - - AVR_Wishbone_Bridge - Allows AVR to communicate with wishbone chips in the FPGA. - - Allows AVR to communicate with wishbone chips in the FPGA - - License: GNU General Public License V3 - - (C) Copyright (Gadget Factory) - - For more help on how to make an Arduino style library: - http://arduino.cc/en/Hacking/LibraryTutorial - - */ - -#include "AVR_Wishbone_Bridge.h" - -uint32_t REGISTER::read() -{ - uint32_t val = 0; - uint8_t v; - int retries = 8; - int i; - - digitalWrite(SS,LOW); - SPI.transfer(0x40); // Read. - SPI.transfer(_address>>24); - SPI.transfer(_address>>16); - SPI.transfer(_address>>8); - SPI.transfer(_address); - do { - v = SPI.transfer(0xff); - if (v==0xFE) break; - } while (--retries); - - if (retries==0) { - Serial.print("Error communicating."); - } else { - // Read out value. - for (i=0;i<4;i++) { - v = SPI.transfer(0xff); - val<<=8; - val|=v; - } - } - digitalWrite(SS,HIGH); - return val; -} - -void REGISTER::write(uint32_t val) -{ - uint8_t v; - int retries = 8; - int i; - - digitalWrite(SS,LOW); - SPI.transfer(0xC0); // Write. - SPI.transfer(_address>>24); - SPI.transfer(_address>>16); - SPI.transfer(_address>>8); - SPI.transfer(_address); - SPI.transfer(val>>24); - SPI.transfer(val>>16); - SPI.transfer(val>>8); - SPI.transfer(val); - - do { - v = SPI.transfer(0xff); - if (v==0xFE) break; - } while (--retries); - - if (retries==0) { - Serial.print("Error communicating."); - } - digitalWrite(SS,HIGH); -} - - diff --git a/libraries/AVR_Wishbone_Bridge/AVR_Wishbone_Bridge.h b/libraries/AVR_Wishbone_Bridge/AVR_Wishbone_Bridge.h deleted file mode 100644 index ab91bea..0000000 --- a/libraries/AVR_Wishbone_Bridge/AVR_Wishbone_Bridge.h +++ /dev/null @@ -1,40 +0,0 @@ -/* - - AVR_Wishbone_Bridge - Allows AVR to communicate with wishbone chips in the FPGA. - - Allows AVR to communicate with wishbone chips in the FPGA - - License: GNU General Public License V3 - - (C) Copyright (Gadget Factory) - - For more help on how to make an Arduino style library: - http://arduino.cc/en/Hacking/LibraryTutorial - - */ - -#ifndef __AVR_Wishbone_Bridge_H__ -#define __AVR_Wishbone_Bridge_H__ - -#include - -#define IOBASE 0x8000000 -#define IO_SLOT_OFFSET_BIT 23 -//#define IO_SLOT(x) (IOBASE + (x< - - BLOCK - 2015-1-2T17:35:23 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - GPIO Pins - - - - - - - Clocks - - - - - - - - - - - - - - - - - - - Wishbone - Slot 5 - - Wishbone - Slot 6 - - Wishbone - Slot 8 - - Wishbone - Slot 9 - - Wishbone - Slot 10 - - Wishbone - Slot 11 - - Wishbone - Slot 12 - - Wishbone - Slot 13 - - Wishbone - Slot 14 - - - - - - - Author: Alvaro Lopes - alvie.com/zpuino - Visit Papilio.cc for Documentation - AVR Wishbone Bridge V2.0 - Uses ZPUino Soft Processor - System Clock runs at 96Mhz - - - - - - - - External Pins - - - This bridge uses SPI pins 10-13. You must disconnect them from your circuit for the bridge to work. - - diff --git a/libraries/AVR_Wishbone_Bridge/AVR_Wishbone_Bridge.vhd b/libraries/AVR_Wishbone_Bridge/AVR_Wishbone_Bridge.vhd deleted file mode 100644 index a2ee2e2..0000000 --- a/libraries/AVR_Wishbone_Bridge/AVR_Wishbone_Bridge.vhd +++ /dev/null @@ -1,382 +0,0 @@ --- --- --- ZPUINO implementation on Gadget Factory 'Papilio Pro' Board --- --- Copyright 2011 Alvaro Lopes --- --- Vanilla Variant --- --- Version: 1.0 --- --- 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 AUTHOR ``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. --- --- - -library ieee; -use ieee.std_logic_1164.all; -use ieee.numeric_std.all; - -entity AVR_Wishbone_Bridge is - port ( - --32Mhz input clock is converted to a 96Mhz clock --- CLK: in std_logic; - - --Clock outputs to be used in schematic - clk_96Mhz: out std_logic; --This is the clock that the system runs on. - clk_1Mhz: out std_logic; --This is a 1Mhz clock for symbols like the C64 SID chip. - clk_osc_32Mhz: out std_logic; --This is the 32Mhz clock from external oscillator. - - -- Connection to the main SPI flash --- SPI_SCK: out std_logic; --- SPI_MISO: in std_logic; --- SPI_MOSI: out std_logic; --- SPI_CS: out std_logic; - - ext_pins_in : in std_logic_vector(100 downto 0); - ext_pins_out : out std_logic_vector(100 downto 0); - ext_pins_inout : inout std_logic_vector(100 downto 0); - - gpio_bus_in : in std_logic_vector(200 downto 0); - gpio_bus_out : out std_logic_vector(200 downto 0); - - -- UART (FTDI) connection --- TXD: out std_logic; --- RXD: in std_logic; - --- DRAM_ADDR : OUT STD_LOGIC_VECTOR (12 downto 0); --- DRAM_BA : OUT STD_LOGIC_VECTOR (1 downto 0); --- DRAM_CAS_N : OUT STD_LOGIC; --- DRAM_CKE : OUT STD_LOGIC; --- DRAM_CLK : OUT STD_LOGIC; --- DRAM_CS_N : OUT STD_LOGIC; --- DRAM_DQ : INOUT STD_LOGIC_VECTOR(15 downto 0); --- DRAM_DQM : OUT STD_LOGIC_VECTOR(1 downto 0); --- DRAM_RAS_N : OUT STD_LOGIC; --- DRAM_WE_N : OUT STD_LOGIC; - - -- The LED --- LED: out std_logic; - - --There are more bits in the address for this wishbone connection - wishbone_slot_video_in : in std_logic_vector(100 downto 0); - wishbone_slot_video_out : out std_logic_vector(100 downto 0); - vgaclkout: out std_logic; - - --Input and output reversed for the master - wishbone_slot_5_in : out std_logic_vector(100 downto 0); - wishbone_slot_5_out : in std_logic_vector(100 downto 0); - - wishbone_slot_6_in : out std_logic_vector(100 downto 0); - wishbone_slot_6_out : in std_logic_vector(100 downto 0); - - wishbone_slot_8_in : out std_logic_vector(100 downto 0); - wishbone_slot_8_out : in std_logic_vector(100 downto 0); - - wishbone_slot_9_in : out std_logic_vector(100 downto 0); - wishbone_slot_9_out : in std_logic_vector(100 downto 0); - - wishbone_slot_10_in : out std_logic_vector(100 downto 0); - wishbone_slot_10_out : in std_logic_vector(100 downto 0); - - wishbone_slot_11_in : out std_logic_vector(100 downto 0); - wishbone_slot_11_out : in std_logic_vector(100 downto 0); - - wishbone_slot_12_in : out std_logic_vector(100 downto 0); - wishbone_slot_12_out : in std_logic_vector(100 downto 0); - - wishbone_slot_13_in : out std_logic_vector(100 downto 0); - wishbone_slot_13_out : in std_logic_vector(100 downto 0); - - wishbone_slot_14_in : out std_logic_vector(100 downto 0); - wishbone_slot_14_out : in std_logic_vector(100 downto 0) - --- wishbone_slot_15_in : out std_logic_vector(61 downto 0); --- wishbone_slot_15_out : in std_logic_vector(33 downto 0) - - - - ); - -end entity AVR_Wishbone_Bridge; - -architecture behave of AVR_Wishbone_Bridge is - -constant wordPower : integer := 5; -constant wordSize : integer := 2**wordPower; -constant maxAddrBitIncIO : integer := 27; -constant maxIOBit: integer := maxAddrBitIncIO - 1; -constant minIOBit: integer := 2; -constant maxAddrBitBRAM : integer := 20; - - component sdram_ctrl is - port ( - wb_clk_i: in std_logic; - wb_rst_i: in std_logic; - - wb_dat_o: out std_logic_vector(wordSize-1 downto 0); - wb_dat_i: in std_logic_vector(wordSize-1 downto 0); - wb_adr_i: in std_logic_vector(maxIOBit downto minIOBit); - wb_we_i: in std_logic; - wb_cyc_i: in std_logic; - wb_stb_i: in std_logic; - wb_sel_i: in std_logic_vector(3 downto 0); - wb_ack_o: out std_logic; - wb_stall_o: out std_logic; - - -- extra clocking - clk_off_3ns: in std_logic; - - -- SDRAM signals - DRAM_ADDR : OUT STD_LOGIC_VECTOR (11 downto 0); - DRAM_BA : OUT STD_LOGIC_VECTOR (1 downto 0); - DRAM_CAS_N : OUT STD_LOGIC; - DRAM_CKE : OUT STD_LOGIC; - DRAM_CLK : OUT STD_LOGIC; - DRAM_CS_N : OUT STD_LOGIC; - DRAM_DQ : INOUT STD_LOGIC_VECTOR(15 downto 0); - DRAM_DQM : OUT STD_LOGIC_VECTOR(1 downto 0); - DRAM_RAS_N : OUT STD_LOGIC; - DRAM_WE_N : OUT STD_LOGIC - - ); - end component sdram_ctrl; - - COMPONENT ZPUino_Papilio_DUO_V2_blackbox - PORT( - CLK : IN std_logic; - SPI_MISO : IN std_logic; - gpio_bus_in : IN std_logic_vector(200 downto 0); - RXD : IN std_logic; - sram_wb_dat_o : IN std_logic_vector(wordSize-1 downto 0); - sram_wb_ack_o : IN std_logic; - sram_wb_stall_o : IN std_logic; - wishbone_slot_video_in : IN std_logic_vector(100 downto 0); - wishbone_slot_5_out : IN std_logic_vector(100 downto 0); - wishbone_slot_6_out : IN std_logic_vector(100 downto 0); - wishbone_slot_8_out : IN std_logic_vector(100 downto 0); - wishbone_slot_9_out : IN std_logic_vector(100 downto 0); - wishbone_slot_10_out : IN std_logic_vector(100 downto 0); - wishbone_slot_11_out : IN std_logic_vector(100 downto 0); - wishbone_slot_12_out : IN std_logic_vector(100 downto 0); - wishbone_slot_13_out : IN std_logic_vector(100 downto 0); - wishbone_slot_14_out : IN std_logic_vector(100 downto 0); - clk_96Mhz : OUT std_logic; - clk_1Mhz : OUT std_logic; - clk_osc_32Mhz : OUT std_logic; - SPI_SCK : OUT std_logic; - SPI_MOSI : OUT std_logic; - SPI_CS : OUT std_logic; - gpio_bus_out : OUT std_logic_vector(200 downto 0); - TXD : OUT std_logic; - LED : OUT std_logic; - -- Connection to the AVR SPI - AVRSPI_SCK: in std_logic; - AVRSPI_MISO: out std_logic; - AVRSPI_MISOTRIS: out std_logic; - AVRSPI_MOSI: in std_logic; - AVRSPI_NCS: in std_logic; - AVRSPI_CS: in std_logic; - sram_wb_dat_i : OUT std_logic_vector(wordSize-1 downto 0); - sram_wb_adr_i : OUT std_logic_vector(maxAddrBitIncIO downto 0); - sram_wb_we_i : OUT std_logic; - sram_wb_cyc_i : OUT std_logic; - sram_wb_stb_i : OUT std_logic; - sram_wb_clk_i : OUT std_logic; - sram_wb_rst_i : OUT std_logic; - sram_wb_sel_i : OUT std_logic_vector(3 downto 0); - clk_sysclk_sram_we : OUT std_logic; - clk_sysclk_sram_wen : OUT std_logic; - wishbone_slot_video_out : OUT std_logic_vector(100 downto 0); - vgaclkout : OUT std_logic; - wishbone_slot_5_in : OUT std_logic_vector(100 downto 0); - wishbone_slot_6_in : OUT std_logic_vector(100 downto 0); - wishbone_slot_8_in : OUT std_logic_vector(100 downto 0); - wishbone_slot_9_in : OUT std_logic_vector(100 downto 0); - wishbone_slot_10_in : OUT std_logic_vector(100 downto 0); - wishbone_slot_11_in : OUT std_logic_vector(100 downto 0); - wishbone_slot_12_in : OUT std_logic_vector(100 downto 0); - wishbone_slot_13_in : OUT std_logic_vector(100 downto 0); - wishbone_slot_14_in : OUT std_logic_vector(100 downto 0) - ); - END COMPONENT; - - - component sram_ctrl8 is - port ( - wb_clk_i: in std_logic; - wb_rst_i: in std_logic; - - wb_dat_o: out std_logic_vector(31 downto 0); - wb_dat_i: in std_logic_vector(31 downto 0); - wb_adr_i: in std_logic_vector(maxIObit downto minIObit); - wb_sel_i: in std_logic_vector(3 downto 0); - wb_we_i: in std_logic; - wb_cyc_i: in std_logic; - wb_stb_i: in std_logic; - wb_ack_o: out std_logic; - wb_stall_o: out std_logic; - clk_we: in std_logic; - clk_wen: in std_logic; - - -- SRAM signals - sram_addr: out std_logic_vector(18 downto 0); - sram_data: inout std_logic_vector(7 downto 0); - sram_ce: out std_logic; - sram_we: out std_logic; - sram_oe: out std_logic - ); - end component sram_ctrl8; - - signal sram_wb_ack_o: std_logic; - signal sram_wb_dat_i: std_logic_vector(wordSize-1 downto 0); - signal sram_wb_dat_o: std_logic_vector(wordSize-1 downto 0); - signal sram_wb_adr_i: std_logic_vector(maxAddrBitIncIO downto 0); - signal sram_wb_cyc_i: std_logic; - signal sram_wb_stb_i: std_logic; - signal sram_wb_we_i: std_logic; - signal sram_wb_sel_i: std_logic_vector(3 downto 0); - signal sram_wb_stall_o: std_logic; - signal clk_off_3ns, sram_wb_clk_i, sram_wb_rst_i: std_logic; - signal sysclk_sram_we, sysclk_sram_wen: std_ulogic; - signal AVRSPI_MISO, AVRSPI_MISOTRIS: std_logic; - -begin - ext_pins_inout(11) <= 'Z' when AVRSPI_MISOTRIS='1' else AVRSPI_MISO; - - Inst_ZPUino_Papilio_DUO_V2_blackbox: ZPUino_Papilio_DUO_V2_blackbox PORT MAP( - CLK => ext_pins_in(0), - clk_96Mhz => clk_96Mhz, - clk_1Mhz => clk_1Mhz, - clk_osc_32Mhz => clk_osc_32Mhz, - SPI_SCK => ext_pins_out(22), - SPI_MISO => ext_pins_in(1), - SPI_MOSI => ext_pins_out(23), - SPI_CS => ext_pins_out(24), - gpio_bus_in => gpio_bus_in, - gpio_bus_out => gpio_bus_out, - TXD => ext_pins_out(25), - RXD => ext_pins_in(2), - --LED => ext_pins_out(26), - LED => OPEN, - AVRSPI_SCK => ext_pins_inout(9), - AVRSPI_MISO => AVRSPI_MISO, - AVRSPI_MISOTRIS => AVRSPI_MISOTRIS, - AVRSPI_MOSI => ext_pins_inout(10), - AVRSPI_NCS => ext_pins_inout(8), - AVRSPI_CS => '1', - sram_wb_clk_i => sram_wb_clk_i, - sram_wb_rst_i => sram_wb_rst_i, - sram_wb_dat_o => sram_wb_dat_o, - sram_wb_dat_i => sram_wb_dat_i, - sram_wb_adr_i => sram_wb_adr_i, - sram_wb_we_i => sram_wb_we_i, - sram_wb_cyc_i => sram_wb_cyc_i, - sram_wb_stb_i => sram_wb_stb_i, - sram_wb_sel_i => sram_wb_sel_i, - sram_wb_ack_o => sram_wb_ack_o, - sram_wb_stall_o => sram_wb_stall_o, - clk_sysclk_sram_we => sysclk_sram_we, - clk_sysclk_sram_wen => sysclk_sram_wen, - wishbone_slot_video_in => wishbone_slot_video_in, - wishbone_slot_video_out => wishbone_slot_video_out, - vgaclkout => vgaclkout, - wishbone_slot_5_in => wishbone_slot_5_in, - wishbone_slot_5_out => wishbone_slot_5_out, - wishbone_slot_6_in => wishbone_slot_6_in, - wishbone_slot_6_out => wishbone_slot_6_out, - wishbone_slot_8_in => wishbone_slot_8_in, - wishbone_slot_8_out => wishbone_slot_8_out, - wishbone_slot_9_in => wishbone_slot_9_in, - wishbone_slot_9_out => wishbone_slot_9_out, - wishbone_slot_10_in => wishbone_slot_10_in, - wishbone_slot_10_out => wishbone_slot_10_out, - wishbone_slot_11_in => wishbone_slot_11_in, - wishbone_slot_11_out => wishbone_slot_11_out, - wishbone_slot_12_in => wishbone_slot_12_in, - wishbone_slot_12_out => wishbone_slot_12_out, - wishbone_slot_13_in => wishbone_slot_13_in, - wishbone_slot_13_out => wishbone_slot_13_out, - wishbone_slot_14_in => wishbone_slot_14_in, - wishbone_slot_14_out => wishbone_slot_14_out - ); - - sram_inst: sram_ctrl8 - port map ( - wb_clk_i => sram_wb_clk_i, - wb_rst_i => sram_wb_rst_i, - wb_dat_o => sram_wb_dat_o, - wb_dat_i => sram_wb_dat_i, - wb_adr_i => sram_wb_adr_i(maxIObit downto minIObit), - wb_we_i => sram_wb_we_i, - wb_cyc_i => sram_wb_cyc_i, - wb_stb_i => sram_wb_stb_i, - wb_sel_i => sram_wb_sel_i, - --wb_cti_i => CTI_CYCLE_CLASSIC, - wb_ack_o => sram_wb_ack_o, - wb_stall_o => sram_wb_stall_o, - - -- SRAM signals - sram_addr => ext_pins_out(18 downto 0), - sram_data => ext_pins_inout(7 downto 0), - sram_ce => ext_pins_out(19), - sram_we => ext_pins_out(20), - sram_oe => ext_pins_out(21), - clk_we =>sysclk_sram_we, - clk_wen =>sysclk_sram_wen - ); - - -- sram_inst: sdram_ctrl - -- port map ( - -- wb_clk_i => sram_wb_clk_i, - -- wb_rst_i => sram_wb_rst_i, - -- wb_dat_o => sram_wb_dat_o, - -- wb_dat_i => sram_wb_dat_i, - -- wb_adr_i => sram_wb_adr_i(maxIObit downto minIObit), - -- wb_we_i => sram_wb_we_i, - -- wb_cyc_i => sram_wb_cyc_i, - -- wb_stb_i => sram_wb_stb_i, - -- wb_sel_i => sram_wb_sel_i, - -- --wb_cti_i => CTI_CYCLE_CLASSIC, - -- wb_ack_o => sram_wb_ack_o, - -- wb_stall_o => sram_wb_stall_o, - - -- clk_off_3ns => clk_off_3ns, - -- DRAM_ADDR => ext_pins_out(15 downto 4), - -- DRAM_BA => ext_pins_out(17 downto 16), - -- DRAM_CAS_N => ext_pins_out(18), - -- DRAM_CKE => ext_pins_out(19), - -- DRAM_CLK => ext_pins_out(20), - -- DRAM_CS_N => ext_pins_out(21), - -- DRAM_DQ => ext_pins_inout(15 downto 0), - -- DRAM_DQM => ext_pins_out(23 downto 22), - -- DRAM_RAS_N => ext_pins_out(24), - -- DRAM_WE_N => ext_pins_out(25) - - -- ); --- DRAM_ADDR(12) <= '0'; - -end behave; diff --git a/libraries/AVR_Wishbone_Bridge/AVR_Wishbone_Bridge_Test.cpp b/libraries/AVR_Wishbone_Bridge/AVR_Wishbone_Bridge_Test.cpp deleted file mode 100644 index e353e53..0000000 --- a/libraries/AVR_Wishbone_Bridge/AVR_Wishbone_Bridge_Test.cpp +++ /dev/null @@ -1,38 +0,0 @@ -/* - - AVR_Wishbone_Bridge_Test - Summarize your library here. - - Describe your library here. - - License: GNU General Public License V3 - - (C) Copyright (Your Name Here) - - For more help on how to make an Arduino style library: - http://arduino.cc/en/Hacking/LibraryTutorial - - */ - -#include "Arduino.h" -#include "AVR_Wishbone_Bridge_Test.h" -#include "AVR_Wishbone_Bridge.h" - -AVR_Wishbone_Bridge_Test::AVR_Wishbone_Bridge_Test() -{ - -} - -void AVR_Wishbone_Bridge_Test::setup(unsigned int wishboneSlot) -{ - this->wishboneSlot = wishboneSlot; -} - -unsigned long AVR_Wishbone_Bridge_Test::readButtons() -{ - return REGISTER(IO_SLOT(wishboneSlot),1); -} - -void AVR_Wishbone_Bridge_Test::writeLEDs(unsigned long value) -{ - REGISTER(IO_SLOT(wishboneSlot),0) = value; -} diff --git a/libraries/AVR_Wishbone_Bridge/AVR_Wishbone_Bridge_Test.h b/libraries/AVR_Wishbone_Bridge/AVR_Wishbone_Bridge_Test.h deleted file mode 100644 index d1d5123..0000000 --- a/libraries/AVR_Wishbone_Bridge/AVR_Wishbone_Bridge_Test.h +++ /dev/null @@ -1,36 +0,0 @@ -/* - - AVR_Wishbone_Bridge_Test - Summarize your library here. - - Describe your library here. - - License: GNU General Public License V3 - - (C) Copyright (Your Name Here) - - For more help on how to make an Arduino style library: - http://arduino.cc/en/Hacking/LibraryTutorial - - */ - -#ifndef __AVR_Wishbone_Bridge_Test_H__ -#define __AVR_Wishbone_Bridge_Test_H__ - -#include -#include -#include -#include "Arduino.h" -#include "AVR_Wishbone_Bridge.h" - -class AVR_Wishbone_Bridge_Test -{ - public: - AVR_Wishbone_Bridge_Test(); - void setup(unsigned int wishboneSlot); - unsigned long readButtons(); - void writeLEDs(unsigned long value); - private: - int wishboneSlot; -}; - -#endif diff --git a/libraries/AVR_Wishbone_Bridge/AVR_Wishbone_Bridge_Test.sym b/libraries/AVR_Wishbone_Bridge/AVR_Wishbone_Bridge_Test.sym deleted file mode 100644 index 51b8ad9..0000000 --- a/libraries/AVR_Wishbone_Bridge/AVR_Wishbone_Bridge_Test.sym +++ /dev/null @@ -1,19 +0,0 @@ - - - BLOCK - 2014-12-2T18:55:59 - - - - - - - AVR_Wishbone_Bridge_Test - - - - - - - - diff --git a/libraries/AVR_Wishbone_Bridge/AVR_Wishbone_Bridge_Test.vhd b/libraries/AVR_Wishbone_Bridge/AVR_Wishbone_Bridge_Test.vhd deleted file mode 100644 index c7da2e2..0000000 --- a/libraries/AVR_Wishbone_Bridge/AVR_Wishbone_Bridge_Test.vhd +++ /dev/null @@ -1,78 +0,0 @@ --------------------------------------------------------------------------------- --- Copyright (c) 1995-2013 Xilinx, Inc. All rights reserved. --------------------------------------------------------------------------------- --- ____ ____ --- / /\/ / --- /___/ \ / Vendor: Xilinx --- \ \ \/ Version : 14.7 --- \ \ Application : --- / / Filename : xil_12112_30 --- /___/ /\ Timestamp : 09/23/2014 15:24:59 --- \ \ / \ --- \___\/\___\ --- ---Command: ---Design Name: --- - -library ieee; -use ieee.std_logic_1164.ALL; -use ieee.numeric_std.ALL; -library UNISIM; -use UNISIM.Vcomponents.ALL; - -entity AVR_Wishbone_Bridge_Test is - port ( wishbone_in : in std_logic_vector (100 downto 0); - wishbone_out : out std_logic_vector (100 downto 0); - - --Put your external connections here - leds : out std_logic_vector(3 downto 0); - buttons : in std_logic_vector(3 downto 0) - ); -end AVR_Wishbone_Bridge_Test; - -architecture BEHAVIORAL of AVR_Wishbone_Bridge_Test is - - COMPONENT Wishbone_to_Registers - PORT( - wishbone_in : IN std_logic_vector(100 downto 0); - register0_in : IN std_logic_vector(31 downto 0); - register1_in : IN std_logic_vector(31 downto 0); - register2_in : IN std_logic_vector(31 downto 0); - wishbone_out : OUT std_logic_vector(100 downto 0); - register0_out : OUT std_logic_vector(31 downto 0); - register1_out : OUT std_logic_vector(31 downto 0); - register2_out : OUT std_logic_vector(31 downto 0) - ); - END COMPONENT; - - signal register0_in: std_logic_vector(31 downto 0); - signal register0_out: std_logic_vector(31 downto 0); - signal register1_in: std_logic_vector(31 downto 0); - signal register1_out: std_logic_vector(31 downto 0); - signal register2_in: std_logic_vector(31 downto 0); - signal register2_out: std_logic_vector(31 downto 0); - - --Put your unique register names here - -begin - - --Put your code here - leds <= register0_out(3 downto 0); - register1_in(3 downto 0) <= buttons; - - --Do not touch - Inst_Wishbone_to_Registers: Wishbone_to_Registers PORT MAP( - wishbone_in => wishbone_in, - wishbone_out => wishbone_out, - register0_in => register0_in, - register0_out => register0_out, - register1_in => register1_in, - register1_out => register1_out, - register2_in => register2_in, - register2_out => register2_out - ); - -end BEHAVIORAL; - - diff --git a/libraries/AVR_Wishbone_Bridge/Edit_Your_Chip_Design.sch b/libraries/AVR_Wishbone_Bridge/Edit_Your_Chip_Design.sch deleted file mode 100644 index afdd6cd..0000000 --- a/libraries/AVR_Wishbone_Bridge/Edit_Your_Chip_Design.sch +++ /dev/null @@ -1,90 +0,0 @@ - - - - - - - - - - 2015-1-2T17:35:23 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/libraries/AVR_Wishbone_Bridge/circuit/DUO_LX9/papilio_duo_lx9.bit b/libraries/AVR_Wishbone_Bridge/circuit/DUO_LX9/papilio_duo_lx9.bit deleted file mode 100644 index 50bb241..0000000 Binary files a/libraries/AVR_Wishbone_Bridge/circuit/DUO_LX9/papilio_duo_lx9.bit and /dev/null differ diff --git a/libraries/AVR_Wishbone_Bridge/circuit/PSL_Papilio_DUO_LX9.xise b/libraries/AVR_Wishbone_Bridge/circuit/PSL_Papilio_DUO_LX9.xise deleted file mode 100644 index c72c60d..0000000 --- a/libraries/AVR_Wishbone_Bridge/circuit/PSL_Papilio_DUO_LX9.xise +++ /dev/null @@ -1,411 +0,0 @@ - - - -
- - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
diff --git a/libraries/AVR_Wishbone_Bridge/circuit/schematic_papilio_DUO.pdf b/libraries/AVR_Wishbone_Bridge/circuit/schematic_papilio_DUO.pdf deleted file mode 100644 index 9fb310f..0000000 Binary files a/libraries/AVR_Wishbone_Bridge/circuit/schematic_papilio_DUO.pdf and /dev/null differ diff --git a/libraries/AVR_Wishbone_Bridge/examples/AVR_Wishbone_Bridge/AVR_Wishbone_Bridge.ino b/libraries/AVR_Wishbone_Bridge/examples/AVR_Wishbone_Bridge/AVR_Wishbone_Bridge.ino deleted file mode 100644 index 955fd17..0000000 --- a/libraries/AVR_Wishbone_Bridge/examples/AVR_Wishbone_Bridge/AVR_Wishbone_Bridge.ino +++ /dev/null @@ -1,45 +0,0 @@ -/* - Gadget Factory - Template to make your own Schematic Symbol and Community Core Library for the Papilio FPGA and DesignLab - - To use this sketch do the following steps: - 1) - - Tools for generating your own libraries: - - - Tutorials: - http://learn.gadgetfactory.net - - - created 2014 - by Jack Gassett - http://www.gadgetfactory.net - - This example code is in the public domain. - */ -#define circuit AVR_Wishbone_Bridge - -#include "AVR_Wishbone_Bridge.h" -#include "AVR_Wishbone_Bridge_Test.h" -#include "SPI.h" - -AVR_Wishbone_Bridge_Test AVR_Wishbone_Bridge_Test; - -void setup() { - // put your setup code here, to run once: - SPI.begin(); - Serial.begin(9600); - AVR_Wishbone_Bridge_Test.setup(5); - -} - -void loop() { - Serial.println(AVR_Wishbone_Bridge_Test.readButtons()); - AVR_Wishbone_Bridge_Test.writeLEDs(0xf); - - //REGISTER(IO_SLOT(5),0) = 0xf; - //Serial.println(REGISTER(IO_SLOT(5),1)); - - delay(1000); -} diff --git a/libraries/AVR_Wishbone_Bridge/examples/Show_Devices/Show_Devices.ino b/libraries/AVR_Wishbone_Bridge/examples/Show_Devices/Show_Devices.ino deleted file mode 100644 index ff74815..0000000 --- a/libraries/AVR_Wishbone_Bridge/examples/Show_Devices/Show_Devices.ino +++ /dev/null @@ -1,174 +0,0 @@ -#include "AVR_Wishbone_Bridge.h" -#include "SPI.h" - -struct vendor_type { - uint8_t vendor; - const char *name; -}; - -const struct vendor_type vendors[] = { - { 0x08, "ZPUino" }, - { 0x02, "VGAArcade" }, - { 0x03, "ZPUino Contrib" }, - { 0x04, "OpenCores" }, - { 0x0, NULL } -}; - -struct product_type { - uint8_t vendor; - uint8_t product; - const char *name; -}; - -const struct product_type products[] = { - { 0x08, 0x01, "System Controller" }, - { 0x08, 0x02, "Bootloader Code" }, - { 0x08, 0x03, "On-board SPI flash" }, - { 0x08, 0x10, "SPI interface" }, - { 0x08, 0x11, "UART" }, - { 0x08, 0x12, "GPIO Controller" }, - { 0x08, 0x13, "Dual Timer Interface with PWM" }, - { 0x08, 0x14, "16-Bit Dual SigmaDelta" }, - { 0x08, 0x15, "Hardware CRC16 engine" }, - { 0x08, 0x16, "Seven Segment Display Driver" }, - { 0x08, 0x18, "HQVGA (240x160) 8-bit Graphics Adaptor" }, - { 0x08, 0x19, "8-bit single-port Character RAM" }, - { 0x08, 0x1A, "VGA (640x480) 15-bit Graphics Adaptor" }, - { 0x08, 0x1B, "VGA Text-mode (640x480) 80x30 3-bit Adaptor" }, - { 0x08, 0x1C, "ZX Spectrum Graphics Adaptor" }, - { 0x02, 0x01, "YM2149 Sound Chip" }, - { 0x02, 0x02, "POKEY Sound Chip" }, - { 0x03, 0x01, "SID6581 Sound Chip" }, - { 0x04, 0x01, "I2C Master Controller" }, - { 0x04, 0x02, "CORDIC" }, - { 0x0, 0x0, NULL } -}; - -const struct vendor_type *getVendor(uint8_t vendor) -{ - int i; - for (i=0;vendors[i].name;i++) { - if (vendor==vendors[i].vendor) - return &vendors[i]; - } - return NULL; -} - -const struct product_type *getVendorProduct(uint8_t vendor,uint8_t product) -{ - int i; - for (i=0;products[i].name;i++) { - if (vendor==products[i].vendor && product==products[i].product) { - return &products[i]; - } - } - return NULL; -} - -void showSystemInfo() -{ - unsigned int basereg = 16; - const struct product_type * p[16]; - const struct vendor_type *v[16]; - int sppout, sppin; - - int i; - for (i=0;i<16;i++) { - Serial.print("Slot "); - Serial.print(i); - Serial.print(": "); - unsigned val = REGISTER(SYSCTLBASE,basereg+i); - if (val==0) { - p[i]=NULL; - v[i]=NULL; - Serial.println("No device attached"); - } else { - v[i] = getVendor(val>>8); - Serial.print(v[i]->name ? v[i]->name:"Unknown vendor"); - Serial.print(" "); - p[i] = getVendorProduct(val>>8,val&0xff); - Serial.println(p[i] ? p[i]->name : "Unknown product"); - } - } - sppout = REGISTER(SYSCTLBASE, 32); - sppin = REGISTER(SYSCTLBASE, 48); - - Serial.print("PPS outputs: "); - Serial.println( sppout ); - - for (i=0;i<32;i++) { - unsigned val = REGISTER(SYSCTLBASE, 64+i); - if (i>8)&0xff); - Serial.print(" of '"); - - if (dev<16) { - if (p[dev]) { - Serial.print(p[dev]->name); - } - Serial.print("' in slot "); - Serial.println(dev); - } - } - } - } - - Serial.print("SPP inputs: "); - Serial.println( sppin ); - - for (i=0;i<32;i++) { - unsigned val = REGISTER(SYSCTLBASE, 64+i); - if (i>16)&0xff; - if (dev==0xff) { - /* Not connected */ - Serial.println("is not used."); - } else { - Serial.print("maps pin "); - Serial.print((val>>24)&0xff); - Serial.print(" of '"); - - if (dev<16) { - if (p[dev]) { - Serial.print(p[dev]->name); - } - Serial.print("' in slot "); - Serial.println(dev); - } - } - } - } - -} - -void setup() -{ - Serial.begin(115200); - SPI.begin(); - delay(3000); -} - -void loop() -{ - int i; -#if 1 - Serial.println("Press ENTER to show system info"); - - while (!Serial.available()); - Serial.read(); -#endif - showSystemInfo(); -} - diff --git a/libraries/Arcade_MegaWing/circuit/PSL_Papilio_One_500K.xise b/libraries/Arcade_MegaWing/circuit/PSL_Papilio_One_500K.xise index cb5a3be..661ece6 100644 --- a/libraries/Arcade_MegaWing/circuit/PSL_Papilio_One_500K.xise +++ b/libraries/Arcade_MegaWing/circuit/PSL_Papilio_One_500K.xise @@ -18,26 +18,32 @@ + + + + + + diff --git a/libraries/Audio_Wing/circuit/PSL_Papilio_One_500K.xise b/libraries/Audio_Wing/circuit/PSL_Papilio_One_500K.xise index cb5a3be..661ece6 100644 --- a/libraries/Audio_Wing/circuit/PSL_Papilio_One_500K.xise +++ b/libraries/Audio_Wing/circuit/PSL_Papilio_One_500K.xise @@ -18,26 +18,32 @@ + + + + + + diff --git a/libraries/Benchy/BENCHY_sa_SumpBlaze_LogicAnalyzer16.sym b/libraries/Benchy/BENCHY_sa_SumpBlaze_LogicAnalyzer16.sym new file mode 100644 index 0000000..ef5380f --- /dev/null +++ b/libraries/Benchy/BENCHY_sa_SumpBlaze_LogicAnalyzer16.sym @@ -0,0 +1,74 @@ + + + BLOCK + 2015-6-12T6:34:29 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Set the brams generic + to define how many + 1024 byte bram blocks + to use. + + + + + + + + + + + + + + + + + + + + + + + + + Sump Blaze Logic Analyzer x16 + + + + + + + + + + \ No newline at end of file diff --git a/libraries/Benchy/BENCHY_sa_SumpBlaze_LogicAnalyzer16.vhd b/libraries/Benchy/BENCHY_sa_SumpBlaze_LogicAnalyzer16.vhd new file mode 100644 index 0000000..287236b --- /dev/null +++ b/libraries/Benchy/BENCHY_sa_SumpBlaze_LogicAnalyzer16.vhd @@ -0,0 +1,277 @@ +---------------------------------------------------------------------------------- +-- Papilio_Logic.vhd +-- +-- Copyright (C) 2006 Michael Poppitz +-- +-- This program is free software; you can redistribute it and/or modify +-- it under the terms of the GNU General Public License as published by +-- the Free Software Foundation; either version 2 of the License, or (at +-- your option) any later version. +-- +-- This program is distributed in the hope that it will be useful, but +-- WITHOUT ANY WARRANTY; without even the implied warranty of +-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +-- General Public License for more details. +-- +-- You should have received a copy of the GNU General Public License along +-- with this program; if not, write to the Free Software Foundation, Inc., +-- 51 Franklin St, Fifth Floor, Boston, MA 02110, USA +-- +---------------------------------------------------------------------------------- +-- +-- Details: http://www.sump.org/projects/analyzer/ +-- +-- Logic Analyzer top level module. It connects the core with the hardware +-- dependent IO modules and defines all la_inputs and outputs that represent +-- phyisical pins of the fpga. +-- +-- It defines two constants FREQ and RATE. The first is the clock frequency +-- used for receiver and transmitter for generating the proper baud rate. +-- The second defines the speed at which to operate the serial port. +-- +---------------------------------------------------------------------------------- + +library ieee; +use ieee.std_logic_1164.all; +use ieee.std_logic_arith.all; +use ieee.std_logic_unsigned.all; + +entity BENCHY_sa_SumpBlaze_LogicAnalyzer16 is + generic ( + brams: integer := 12 + ); + port( + clk_32Mhz : in std_logic; + --extClockIn : in std_logic; +-- extClockOut : out std_logic; + --extTriggerIn : in std_logic; + --extTriggerOut : out std_logic; + --la_input : in std_logic_vector(31 downto 0); + la0 : in std_logic; + la1 : in std_logic; + la2 : in std_logic; + la3 : in std_logic; + la4 : in std_logic; + la5 : in std_logic; + la6 : in std_logic; + la7 : in std_logic; + la8 : in std_logic; + la9 : in std_logic; + la10 : in std_logic; + la11 : in std_logic; + la12 : in std_logic; + la13 : in std_logic; + la14 : in std_logic; + la15 : in std_logic; + rx : in std_logic; + tx : out std_logic +-- miso : out std_logic; +-- mosi : in std_logic; +-- sclk : in std_logic; +-- cs : in std_logic; +-- dataReady : out std_logic; +-- adc_cs_n : inout std_logic; + --armLED : out std_logic; + --triggerLED : out std_logic + ); +end BENCHY_sa_SumpBlaze_LogicAnalyzer16; + +architecture behavioral of BENCHY_sa_SumpBlaze_LogicAnalyzer16 is + + component clockman + port( + clkin : in STD_LOGIC; + clk0 : out std_logic + ); + end component; + + COMPONENT eia232 + generic ( + FREQ : integer; + SCALE : integer; + RATE : integer + ); + PORT( + clock : IN std_logic; + reset : in std_logic; + speed : IN std_logic_vector(1 downto 0); + rx : IN std_logic; + data : IN std_logic_vector(31 downto 0); + send : IN std_logic; + tx : OUT std_logic; + cmd : OUT std_logic_vector(39 downto 0); + execute : OUT std_logic; + busy : OUT std_logic + ); + END COMPONENT; + + component spi_slave + port( + clock : in std_logic; + data : in std_logic_vector(31 downto 0); + send : in std_logic; + mosi : in std_logic; + sclk : in std_logic; + cs : in std_logic; + miso : out std_logic; + cmd : out std_logic_vector(39 downto 0); + execute : out std_logic; + busy : out std_logic; + dataReady : out std_logic; + tx_bytes : in integer range 0 to 4 + ); + end component; + + component core + port( + clock : in std_logic; + cmd : in std_logic_vector(39 downto 0); + execute : in std_logic; + la_input : in std_logic_vector(31 downto 0); + la_inputClock : in std_logic; + output : out std_logic_vector (31 downto 0); + outputSend : out std_logic; + outputBusy : in std_logic; + memoryIn : in std_logic_vector(35 downto 0); + memoryOut : out std_logic_vector(35 downto 0); + memoryRead : out std_logic; + memoryWrite : out std_logic; + extTriggerIn : in std_logic; + extTriggerOut : out std_logic; + extClockOut : out std_logic; + armLED : out std_logic; + triggerLED : out std_logic; + tx_bytes : out integer range 0 to 4 + ); + end component; + + component sram_bram + generic ( + brams: integer := 12 + ); + port( + clock : in std_logic; + output : out std_logic_vector(35 downto 0); + la_input : in std_logic_vector(35 downto 0); + read : in std_logic; + write : in std_logic + ); + end component; + + signal cmd : std_logic_vector (39 downto 0); + signal memoryIn, memoryOut : std_logic_vector (35 downto 0); + signal output, la_input : std_logic_vector (31 downto 0); + signal clock : std_logic; + signal read, write, execute, send, busy : std_logic; + signal tx_bytes : integer range 0 to 4; + signal extClockIn, extTriggerIn : std_logic; + + --Constants for UART + constant FREQ : integer := 100000000; -- limited to 100M by onboard SRAM + constant TRXSCALE : integer := 54; -- 16 times the desired baud rate. Example 100000000/(16*115200) = 54 + constant RATE : integer := 115200; -- maximum & base rate + constant SPEED : std_logic_vector (1 downto 0) := "00"; --Sets the speed for UART communications + + +begin + --la_input <= (others => '0'); + la_input(0) <= la0; + la_input(1) <= la1; + la_input(2) <= la2; + la_input(3) <= la3; + la_input(4) <= la4; + la_input(5) <= la5; + la_input(6) <= la6; + la_input(7) <= la7; + la_input(8) <= la8; + la_input(9) <= la9; + la_input(10) <= la10; + la_input(11) <= la11; + la_input(12) <= la12; + la_input(13) <= la13; + la_input(14) <= la14; + la_input(15) <= la15; + + + +-- adc_cs_n <= '1'; --Disables ADC + + Inst_clockman: clockman + port map( + clkin => clk_32Mhz, + clk0 => clock + ); + + Inst_eia232: eia232 + generic map ( + FREQ => FREQ, + SCALE => TRXSCALE, + RATE => RATE + ) + PORT MAP( + clock => clock, + reset => '0', + speed => SPEED, + rx => rx, + tx => tx, + cmd => cmd, + execute => execute, + data => output, + send => send, + busy => busy + ); + +-- Inst_spi_slave: spi_slave +-- port map( +-- clock => clock, +-- data => output, +-- send => send, +-- mosi => mosi, +-- sclk => sclk, +-- cs => cs, +-- miso => miso, +-- cmd => cmd, +-- execute => execute, +-- busy => busy, +-- dataReady => dataReady, +-- tx_bytes => tx_bytes +-- ); + +extClockIn <= '0'; --External clock disabled +extTriggerIn <= '0'; --External trigger disabled + + Inst_core: core + port map( + clock => clock, + cmd => cmd, + execute => execute, + la_input => la_input, + la_inputClock => extClockIn, + output => output, + outputSend => send, + outputBusy => busy, + memoryIn => memoryIn, + memoryOut => memoryOut, + memoryRead => read, + memoryWrite => write, + extTriggerIn => extTriggerIn, + extTriggerOut => open, + extClockOut => open, + armLED => open, + triggerLED => open, + tx_bytes => tx_bytes + ); + + Inst_sram: sram_bram + generic map ( + brams => brams + ) + port map( + clock => clock, + output => memoryIn, + la_input => memoryOut, + read => read, + write => write + ); +end behavioral; + diff --git a/libraries/Benchy/BENCHY_sa_SumpBlaze_LogicAnalyzer32.sym b/libraries/Benchy/BENCHY_sa_SumpBlaze_LogicAnalyzer32.sym new file mode 100644 index 0000000..3003753 --- /dev/null +++ b/libraries/Benchy/BENCHY_sa_SumpBlaze_LogicAnalyzer32.sym @@ -0,0 +1,29 @@ + + + BLOCK + 2015-6-12T6:48:35 + + + + + + + + + + + + + + + + + + + Set the brams generic + to define how many + 512 byte bram blocks + to use. + Sump Blaze Logic Analyzer x32 + + diff --git a/libraries/Benchy/BENCHY_sa_SumpBlaze_LogicAnalyzer32.vhd b/libraries/Benchy/BENCHY_sa_SumpBlaze_LogicAnalyzer32.vhd new file mode 100644 index 0000000..9669090 --- /dev/null +++ b/libraries/Benchy/BENCHY_sa_SumpBlaze_LogicAnalyzer32.vhd @@ -0,0 +1,244 @@ +---------------------------------------------------------------------------------- +-- Papilio_Logic.vhd +-- +-- Copyright (C) 2006 Michael Poppitz +-- +-- This program is free software; you can redistribute it and/or modify +-- it under the terms of the GNU General Public License as published by +-- the Free Software Foundation; either version 2 of the License, or (at +-- your option) any later version. +-- +-- This program is distributed in the hope that it will be useful, but +-- WITHOUT ANY WARRANTY; without even the implied warranty of +-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +-- General Public License for more details. +-- +-- You should have received a copy of the GNU General Public License along +-- with this program; if not, write to the Free Software Foundation, Inc., +-- 51 Franklin St, Fifth Floor, Boston, MA 02110, USA +-- +---------------------------------------------------------------------------------- +-- +-- Details: http://www.sump.org/projects/analyzer/ +-- +-- Logic Analyzer top level module. It connects the core with the hardware +-- dependent IO modules and defines all la_inputs and outputs that represent +-- phyisical pins of the fpga. +-- +-- It defines two constants FREQ and RATE. The first is the clock frequency +-- used for receiver and transmitter for generating the proper baud rate. +-- The second defines the speed at which to operate the serial port. +-- +---------------------------------------------------------------------------------- + +library ieee; +use ieee.std_logic_1164.all; +use ieee.std_logic_arith.all; +use ieee.std_logic_unsigned.all; + +entity BENCHY_sa_SumpBlaze_LogicAnalyzer32 is + generic ( + brams: integer := 12 + ); + port( + clk_32Mhz : in std_logic; + --extClockIn : in std_logic; +-- extClockOut : out std_logic; + --extTriggerIn : in std_logic; + --extTriggerOut : out std_logic; + la : in std_logic_vector(31 downto 0); + rx : in std_logic; + tx : out std_logic +-- miso : out std_logic; +-- mosi : in std_logic; +-- sclk : in std_logic; +-- cs : in std_logic; +-- dataReady : out std_logic; +-- adc_cs_n : inout std_logic; + --armLED : out std_logic; + --triggerLED : out std_logic + ); +end BENCHY_sa_SumpBlaze_LogicAnalyzer32; + +architecture behavioral of BENCHY_sa_SumpBlaze_LogicAnalyzer32 is + + component clockman + port( + clkin : in STD_LOGIC; + clk0 : out std_logic + ); + end component; + + COMPONENT eia232 + generic ( + FREQ : integer; + SCALE : integer; + RATE : integer + ); + PORT( + clock : IN std_logic; + reset : in std_logic; + speed : IN std_logic_vector(1 downto 0); + rx : IN std_logic; + data : IN std_logic_vector(31 downto 0); + send : IN std_logic; + tx : OUT std_logic; + cmd : OUT std_logic_vector(39 downto 0); + execute : OUT std_logic; + busy : OUT std_logic + ); + END COMPONENT; + + component spi_slave + port( + clock : in std_logic; + data : in std_logic_vector(31 downto 0); + send : in std_logic; + mosi : in std_logic; + sclk : in std_logic; + cs : in std_logic; + miso : out std_logic; + cmd : out std_logic_vector(39 downto 0); + execute : out std_logic; + busy : out std_logic; + dataReady : out std_logic; + tx_bytes : in integer range 0 to 4 + ); + end component; + + component core + port( + clock : in std_logic; + cmd : in std_logic_vector(39 downto 0); + execute : in std_logic; + la_input : in std_logic_vector(31 downto 0); + la_inputClock : in std_logic; + output : out std_logic_vector (31 downto 0); + outputSend : out std_logic; + outputBusy : in std_logic; + memoryIn : in std_logic_vector(35 downto 0); + memoryOut : out std_logic_vector(35 downto 0); + memoryRead : out std_logic; + memoryWrite : out std_logic; + extTriggerIn : in std_logic; + extTriggerOut : out std_logic; + extClockOut : out std_logic; + armLED : out std_logic; + triggerLED : out std_logic; + tx_bytes : out integer range 0 to 4 + ); + end component; + + component sram_bram + generic ( + brams: integer := 12 + ); + port( + clock : in std_logic; + output : out std_logic_vector(35 downto 0); + la_input : in std_logic_vector(35 downto 0); + read : in std_logic; + write : in std_logic + ); + end component; + + signal cmd : std_logic_vector (39 downto 0); + signal memoryIn, memoryOut : std_logic_vector (35 downto 0); + signal output, la_input : std_logic_vector (31 downto 0); + signal clock : std_logic; + signal read, write, execute, send, busy : std_logic; + signal tx_bytes : integer range 0 to 4; + signal extClockIn, extTriggerIn : std_logic; + + --Constants for UART + constant FREQ : integer := 100000000; -- limited to 100M by onboard SRAM + constant TRXSCALE : integer := 54; -- 16 times the desired baud rate. Example 100000000/(16*115200) = 54 + constant RATE : integer := 115200; -- maximum & base rate + constant SPEED : std_logic_vector (1 downto 0) := "00"; --Sets the speed for UART communications + + +begin + --la_input <= (others => '0'); + la_input <= la; + +-- adc_cs_n <= '1'; --Disables ADC + + Inst_clockman: clockman + port map( + clkin => clk_32Mhz, + clk0 => clock + ); + + Inst_eia232: eia232 + generic map ( + FREQ => FREQ, + SCALE => TRXSCALE, + RATE => RATE + ) + PORT MAP( + clock => clock, + reset => '0', + speed => SPEED, + rx => rx, + tx => tx, + cmd => cmd, + execute => execute, + data => output, + send => send, + busy => busy + ); + +-- Inst_spi_slave: spi_slave +-- port map( +-- clock => clock, +-- data => output, +-- send => send, +-- mosi => mosi, +-- sclk => sclk, +-- cs => cs, +-- miso => miso, +-- cmd => cmd, +-- execute => execute, +-- busy => busy, +-- dataReady => dataReady, +-- tx_bytes => tx_bytes +-- ); + +extClockIn <= '0'; --External clock disabled +extTriggerIn <= '0'; --External trigger disabled + + Inst_core: core + port map( + clock => clock, + cmd => cmd, + execute => execute, + la_input => la_input, + la_inputClock => extClockIn, + output => output, + outputSend => send, + outputBusy => busy, + memoryIn => memoryIn, + memoryOut => memoryOut, + memoryRead => read, + memoryWrite => write, + extTriggerIn => extTriggerIn, + extTriggerOut => open, + extClockOut => open, + armLED => open, + triggerLED => open, + tx_bytes => tx_bytes + ); + + Inst_sram: sram_bram + generic map ( + brams => brams + ) + port map( + clock => clock, + output => memoryIn, + la_input => memoryOut, + read => read, + write => write + ); +end behavioral; + diff --git a/libraries/Benchy/BENCHY_sa_SumpBlaze_LogicAnalyzer8.sym b/libraries/Benchy/BENCHY_sa_SumpBlaze_LogicAnalyzer8.sym index f742303..7fe3a65 100644 --- a/libraries/Benchy/BENCHY_sa_SumpBlaze_LogicAnalyzer8.sym +++ b/libraries/Benchy/BENCHY_sa_SumpBlaze_LogicAnalyzer8.sym @@ -1,7 +1,7 @@ BLOCK - 2014-10-31T15:52:14 + 2015-6-12T6:20:12 @@ -27,7 +27,7 @@ Set the brams generic to define how many - 512 byte bram blocks + 2048 byte bram blocks to use. diff --git a/libraries/Benchy/Chip_Designer.xise b/libraries/Benchy/Chip_Designer.xise index e73b5b6..f1f9435 100644 --- a/libraries/Benchy/Chip_Designer.xise +++ b/libraries/Benchy/Chip_Designer.xise @@ -15,6 +15,29 @@ + + + + + + + + + + + + + + + + + + + + + + + @@ -25,6 +48,11 @@ + + + + + @@ -35,6 +63,11 @@ + + + + + @@ -80,6 +113,9 @@ + + + @@ -130,6 +166,11 @@ + + + + + @@ -175,7 +216,152 @@ - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -190,12 +376,180 @@ - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -210,11 +564,19 @@ - + + + + + + + + + @@ -257,12 +619,12 @@ - + - + @@ -277,6 +639,11 @@ + + + + + @@ -287,11 +654,44 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -312,6 +712,11 @@ + + + + + @@ -357,37 +762,42 @@ - + - + - + - + - + - + + + + + + - + @@ -432,7 +842,7 @@ - + @@ -769,6 +1179,14 @@ + + + + + + + + diff --git a/libraries/Benchy/Edit_Your_Chip_Design.sch b/libraries/Benchy/Edit_Your_Chip_Design.sch index b457f69..7d8a3db 100644 --- a/libraries/Benchy/Edit_Your_Chip_Design.sch +++ b/libraries/Benchy/Edit_Your_Chip_Design.sch @@ -7,7 +7,7 @@ - 2014-10-31T15:52:14 + 2015-6-12T6:20:12 @@ -50,6 +50,37 @@ + + 2015-6-12T6:36:9 + + + + + + + + + + + + + + + + + + + + + + + 2015-6-12T6:44:31 + + + + + + @@ -82,8 +113,35 @@ - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -93,5 +151,9 @@ + + + + \ No newline at end of file diff --git a/libraries/Benchy/Mem_Gen_36bit.vhd b/libraries/Benchy/Mem_Gen_36bit.vhd index 671341a..844bb7f 100644 --- a/libraries/Benchy/Mem_Gen_36bit.vhd +++ b/libraries/Benchy/Mem_Gen_36bit.vhd @@ -43,7 +43,7 @@ entity Mem_Gen_36bit is brams: integer := 12 ); Port ( CLK : in STD_LOGIC; - ADDR : in STD_LOGIC_VECTOR (12 downto 0); + ADDR : in STD_LOGIC_VECTOR (13 downto 0); WE : in STD_LOGIC; DOUT : out STD_LOGIC_VECTOR (35 downto 0); DIN : in STD_LOGIC_VECTOR (35 downto 0)); @@ -51,7 +51,8 @@ end Mem_Gen_36bit; architecture Behavioral of Mem_Gen_36bit is - type RAMBlDOut_Type is array(2**(ADDR'length-9)-1 downto 0) of std_logic_vector(dout'range); + --type RAMBlDOut_Type is array(2**(ADDR'length-9)-1 downto 0) of std_logic_vector(dout'range); + type RAMBlDOut_Type is array(31 downto 0) of std_logic_vector(dout'range); signal RAMBlDOut : RAMBlDOut_Type; signal WEB : std_logic_vector((brams-1) downto 0); diff --git a/libraries/Benchy/include_symbols.edif b/libraries/Benchy/include_symbols.edif deleted file mode 100644 index e69de29..0000000 diff --git a/libraries/Benchy/sram_bram.vhd b/libraries/Benchy/sram_bram.vhd index e8b8c4e..811077f 100644 --- a/libraries/Benchy/sram_bram.vhd +++ b/libraries/Benchy/sram_bram.vhd @@ -57,13 +57,13 @@ architecture behavioral of sram_bram is port ( clk: IN std_logic; we: IN std_logic; - addr: IN std_logic_VECTOR(12 downto 0); + addr: IN std_logic_VECTOR(13 downto 0); din: IN std_logic_VECTOR(35 downto 0); dout: OUT std_logic_VECTOR(35 downto 0) ); end component; - signal addra : std_logic_vector (12 downto 0) := (others => '0'); + signal addra : std_logic_vector (13 downto 0) := (others => '0'); signal writeSignal : std_logic; signal bramIn, bramOut : std_logic_vector (35 downto 0); diff --git a/libraries/BitCoin_Miner/circuit/LX9/BitCoin_Miner.vhi b/libraries/BitCoin_Miner/circuit/LX9/BitCoin_Miner.vhi deleted file mode 100644 index b67ea14..0000000 --- a/libraries/BitCoin_Miner/circuit/LX9/BitCoin_Miner.vhi +++ /dev/null @@ -1,31 +0,0 @@ - --- VHDL Instantiation Created from source file BitCoin_Miner.vhd -- 14:42:48 03/31/2015 --- --- Notes: --- 1) This instantiation template has been automatically generated using types --- std_logic and std_logic_vector for the ports of the instantiated module --- 2) To use this template to instantiate this entity, cut-and-paste and then edit - - COMPONENT BitCoin_Miner - PORT( - clk_32Mhz : IN std_logic; - RxD : IN std_logic; - disp_switch : IN std_logic; - TxD : OUT std_logic; - anode : OUT std_logic_vector(3 downto 0); - segment : OUT std_logic_vector(7 downto 0); - led : OUT std_logic_vector(1 downto 0) - ); - END COMPONENT; - - Inst_BitCoin_Miner: BitCoin_Miner PORT MAP( - clk_32Mhz => , - RxD => , - TxD => , - anode => , - segment => , - disp_switch => , - led => - ); - - diff --git a/libraries/Gameduino/GD.cpp b/libraries/Gameduino/Gameduino.cpp similarity index 99% rename from libraries/Gameduino/GD.cpp rename to libraries/Gameduino/Gameduino.cpp index 2ef4f6d..b0e8df3 100644 --- a/libraries/Gameduino/GD.cpp +++ b/libraries/Gameduino/Gameduino.cpp @@ -8,13 +8,13 @@ #include "wirish.h" HardwareSPI SPI(1); -#include "GD.h" +#include "Gameduino.h" #else #include "Arduino.h" #include #include -#include +#include #endif GDClass GD; diff --git a/libraries/Gameduino/GD.h b/libraries/Gameduino/Gameduino.h similarity index 99% rename from libraries/Gameduino/GD.h rename to libraries/Gameduino/Gameduino.h index a001a47..2da2b09 100644 --- a/libraries/Gameduino/GD.h +++ b/libraries/Gameduino/Gameduino.h @@ -12,6 +12,9 @@ #define SS_PIN 9 #endif +typedef const unsigned char prog_uchar; +typedef const char prog_char; + #ifdef BOARD_maple #include "wirish.h" diff --git a/Gameduino/1.Basics/collision/collision.ino b/libraries/Gameduino/examples/1.Basics/collision/collision.ino similarity index 88% rename from Gameduino/1.Basics/collision/collision.ino rename to libraries/Gameduino/examples/1.Basics/collision/collision.ino index cf34e45..f1f2198 100644 --- a/Gameduino/1.Basics/collision/collision.ino +++ b/libraries/Gameduino/examples/1.Basics/collision/collision.ino @@ -1,9 +1,12 @@ //Uncomment your preferred Shield -#define circuit Gameduino_Computing_Shield -//#define circuit Gameduino_LogicStart_Shield +#define circuit Gameduino_Computing_Shield //Please note that pressing the "Reset" button on the Computing Shield will reset the FPGA. +//#define circuit Gameduino_LogicStart_Shield //Important SW0 and SW1 need to be down for this sketch to work. On the Logicstart Shield, SW0 controls the Arduino reset line and SW1 controls the FPGA reset. + +//For a tutorial on using Gameduino on the Papilio DUO visit: +//http://gadgetfactory.net/learn/2015/06/08/gameduino-on-papilio-duo/ #include -#include +#include void readn(byte *dst, unsigned int addr, int c) { diff --git a/Gameduino/1.Basics/collision/sphere.h b/libraries/Gameduino/examples/1.Basics/collision/sphere.h similarity index 100% rename from Gameduino/1.Basics/collision/sphere.h rename to libraries/Gameduino/examples/1.Basics/collision/sphere.h diff --git a/Gameduino/1.Basics/collision/stone_wall_texture.h b/libraries/Gameduino/examples/1.Basics/collision/stone_wall_texture.h similarity index 100% rename from Gameduino/1.Basics/collision/stone_wall_texture.h rename to libraries/Gameduino/examples/1.Basics/collision/stone_wall_texture.h diff --git a/Gameduino/1.Basics/palettes/palettes.ino b/libraries/Gameduino/examples/1.Basics/palettes/palettes.ino similarity index 73% rename from Gameduino/1.Basics/palettes/palettes.ino rename to libraries/Gameduino/examples/1.Basics/palettes/palettes.ino index 0a66039..8781977 100644 --- a/Gameduino/1.Basics/palettes/palettes.ino +++ b/libraries/Gameduino/examples/1.Basics/palettes/palettes.ino @@ -1,10 +1,12 @@ //Uncomment your preferred Shield -#define circuit Gameduino_Computing_Shield -//#define circuit Gameduino_LogicStart_Shield +#define circuit Gameduino_Computing_Shield //Please note that pressing the "Reset" button on the Computing Shield will reset the FPGA. +//#define circuit Gameduino_LogicStart_Shield //Important SW0 and SW1 need to be down for this sketch to work. On the Logicstart Shield, SW0 controls the Arduino reset line and SW1 controls the FPGA reset. +//For a tutorial on using Gameduino on the Papilio DUO visit: +//http://gadgetfactory.net/learn/2015/06/08/gameduino-on-papilio-duo/ #include -#include +#include void spr(int x, int y, byte pal) { diff --git a/Gameduino/1.Basics/rotate/r.h b/libraries/Gameduino/examples/1.Basics/rotate/r.h similarity index 100% rename from Gameduino/1.Basics/rotate/r.h rename to libraries/Gameduino/examples/1.Basics/rotate/r.h diff --git a/libraries/Gameduino/examples/1.Basics/rotate/rotate.ino b/libraries/Gameduino/examples/1.Basics/rotate/rotate.ino new file mode 100644 index 0000000..d7fc264 --- /dev/null +++ b/libraries/Gameduino/examples/1.Basics/rotate/rotate.ino @@ -0,0 +1,35 @@ +//Uncomment your preferred Shield +#define circuit Gameduino_Computing_Shield //Please note that pressing the "Reset" button on the Computing Shield will reset the FPGA. +//#define circuit Gameduino_LogicStart_Shield //Important SW0 and SW1 need to be down for this sketch to work. On the Logicstart Shield, SW0 controls the Arduino reset line and SW1 controls the FPGA reset. + +//For a tutorial on using Gameduino on the Papilio DUO visit: +//http://gadgetfactory.net/learn/2015/06/08/gameduino-on-papilio-duo/ + +#include +#include + +#include "r.h" + +void setup() +{ + int i; + + GD.begin(); + GD.ascii(); + GD.putstr(0, 0,"Sprite rotation"); + + GD.copy(RAM_SPRIMG, r_img, sizeof(r_img)); + GD.copy(RAM_SPRPAL, r_pal, sizeof(r_pal)); + + for (i = 0; i < 8; i++) { + char msg[] = "ROT=."; + byte y = 3 + 4 * i; + msg[4] = '0' + i; + GD.putstr(18, y, msg); + GD.sprite(i, 200, 8 * y, 0, 0, i); + } +} + +void loop() +{ +} diff --git a/Gameduino/1.Basics/scroll/platformer.h b/libraries/Gameduino/examples/1.Basics/scroll/platformer.h similarity index 100% rename from Gameduino/1.Basics/scroll/platformer.h rename to libraries/Gameduino/examples/1.Basics/scroll/platformer.h diff --git a/Gameduino/1.Basics/scroll/scroll.ino b/libraries/Gameduino/examples/1.Basics/scroll/scroll.ino similarity index 84% rename from Gameduino/1.Basics/scroll/scroll.ino rename to libraries/Gameduino/examples/1.Basics/scroll/scroll.ino index 038d1c1..b27d0a6 100644 --- a/Gameduino/1.Basics/scroll/scroll.ino +++ b/libraries/Gameduino/examples/1.Basics/scroll/scroll.ino @@ -1,9 +1,12 @@ //Uncomment your preferred Shield -#define circuit Gameduino_Computing_Shield -//#define circuit Gameduino_LogicStart_Shield +#define circuit Gameduino_Computing_Shield //Please note that pressing the "Reset" button on the Computing Shield will reset the FPGA. +//#define circuit Gameduino_LogicStart_Shield //Important SW0 and SW1 need to be down for this sketch to work. On the Logicstart Shield, SW0 controls the Arduino reset line and SW1 controls the FPGA reset. + +//For a tutorial on using Gameduino on the Papilio DUO visit: +//http://gadgetfactory.net/learn/2015/06/08/gameduino-on-papilio-duo/ #include -#include +#include #include "platformer.h" diff --git a/Gameduino/1.Basics/sprites256/pickups2.h b/libraries/Gameduino/examples/1.Basics/sprites256/pickups2.h similarity index 100% rename from Gameduino/1.Basics/sprites256/pickups2.h rename to libraries/Gameduino/examples/1.Basics/sprites256/pickups2.h diff --git a/Gameduino/1.Basics/sprites256/sprites256.h b/libraries/Gameduino/examples/1.Basics/sprites256/sprites256.h similarity index 100% rename from Gameduino/1.Basics/sprites256/sprites256.h rename to libraries/Gameduino/examples/1.Basics/sprites256/sprites256.h diff --git a/Gameduino/1.Basics/sprites256/sprites256.ino b/libraries/Gameduino/examples/1.Basics/sprites256/sprites256.ino similarity index 64% rename from Gameduino/1.Basics/sprites256/sprites256.ino rename to libraries/Gameduino/examples/1.Basics/sprites256/sprites256.ino index a3b4516..80d65d8 100644 --- a/Gameduino/1.Basics/sprites256/sprites256.ino +++ b/libraries/Gameduino/examples/1.Basics/sprites256/sprites256.ino @@ -1,9 +1,15 @@ //Uncomment your preferred Shield -#define circuit Gameduino_Computing_Shield -//#define circuit Gameduino_LogicStart_Shield +#define circuit Gameduino_Computing_Shield //Please note that pressing the "Reset" button on the Computing Shield will reset the FPGA. +//#define circuit Gameduino_LogicStart_Shield //Important SW0 and SW1 need to be down for this sketch to work. On the Logicstart Shield, SW0 controls the Arduino reset line and SW1 controls the FPGA reset. + +//IMPORTANT NOTE: This sketch is too large to load over the USB port. Please use the AVR ISP mode to load this sketch. Here is a link with instructions for using ISP mode: +//http://gadgetfactory.net/learn/2015/01/15/designlab-quickstart-duo-avr/#Load_Sketch_Using_ISP + +//For a tutorial on using Gameduino on the Papilio DUO visit: +//http://gadgetfactory.net/learn/2015/06/08/gameduino-on-papilio-duo/ #include -#include +#include #include "pickups2.h" #include "sprites256.h" @@ -58,7 +64,7 @@ void move() void setup() { int i; - + delay(3000); GD.begin(); GD.copy(RAM_PIC, sprites256_pic, sizeof(sprites256_pic)); diff --git a/Gameduino/2.Audio/instruments2/instruments.h b/libraries/Gameduino/examples/2.Audio/instruments2/instruments.h similarity index 100% rename from Gameduino/2.Audio/instruments2/instruments.h rename to libraries/Gameduino/examples/2.Audio/instruments2/instruments.h diff --git a/Gameduino/2.Audio/instruments2/instruments2.ino b/libraries/Gameduino/examples/2.Audio/instruments2/instruments2.ino similarity index 88% rename from Gameduino/2.Audio/instruments2/instruments2.ino rename to libraries/Gameduino/examples/2.Audio/instruments2/instruments2.ino index 7b66000..f0eff5d 100644 --- a/Gameduino/2.Audio/instruments2/instruments2.ino +++ b/libraries/Gameduino/examples/2.Audio/instruments2/instruments2.ino @@ -1,14 +1,17 @@ //Uncomment your preferred Shield -#define circuit Gameduino_Computing_Shield -//#define circuit Gameduino_LogicStart_Shield +#define circuit Gameduino_Computing_Shield //Please note that pressing the "Reset" button on the Computing Shield will reset the FPGA. +//#define circuit Gameduino_LogicStart_Shield //Important SW0 and SW1 need to be down for this sketch to work. On the Logicstart Shield, SW0 controls the Arduino reset line and SW1 controls the FPGA reset. + +//For a tutorial on using Gameduino on the Papilio DUO visit: +//http://gadgetfactory.net/learn/2015/06/08/gameduino-on-papilio-duo/ #include -#include +#include #include "instruments.h" // midi frequency table -static PROGMEM prog_uint16_t midifreq[128] = { +static uint16_t midifreq[128] = { 32,34,36,38,41,43,46,48,51,55,58,61,65,69,73,77,82,87,92,97,103,110,116,123,130,138,146,155,164,174,184,195,207,220,233,246,261,277,293,311,329,349,369,391,415,440,466,493,523,554,587,622,659,698,739,783,830,880,932,987,1046,1108,1174,1244,1318,1396,1479,1567,1661,1760,1864,1975,2093,2217,2349,2489,2637,2793,2959,3135,3322,3520,3729,3951,4186,4434,4698,4978,5274,5587,5919,6271,6644,7040,7458,7902,8372,8869,9397,9956,10548,11175,11839,12543,13289,14080,14917,15804,16744,17739,18794,19912,21096,22350,23679,25087,26579,28160,29834,31608,33488,35479,37589,39824,42192,44701,47359,50175 }; @@ -23,7 +26,7 @@ public: void begin(PROGMEM prog_uchar *instr, byte note, byte firstvoice) { voices = pgm_read_byte(instr++); duration = pgm_read_byte(instr++); - uint16_t midi = pgm_read_word(midifreq + note); + uint16_t midi = midifreq[note]; fv = firstvoice; for (byte i = 0; i < voices; i++) { uint16_t w = pgm_read_word(instr); diff --git a/Gameduino/2.Audio/instruments2/showvoices.h b/libraries/Gameduino/examples/2.Audio/instruments2/showvoices.h similarity index 100% rename from Gameduino/2.Audio/instruments2/showvoices.h rename to libraries/Gameduino/examples/2.Audio/instruments2/showvoices.h diff --git a/Gameduino/2.Audio/instruments2/sphere.h b/libraries/Gameduino/examples/2.Audio/instruments2/sphere.h similarity index 100% rename from Gameduino/2.Audio/instruments2/sphere.h rename to libraries/Gameduino/examples/2.Audio/instruments2/sphere.h diff --git a/Gameduino/2.Audio/player/mont.h b/libraries/Gameduino/examples/2.Audio/player/mont.h similarity index 100% rename from Gameduino/2.Audio/player/mont.h rename to libraries/Gameduino/examples/2.Audio/player/mont.h diff --git a/Gameduino/2.Audio/player/player.ino b/libraries/Gameduino/examples/2.Audio/player/player.ino similarity index 83% rename from Gameduino/2.Audio/player/player.ino rename to libraries/Gameduino/examples/2.Audio/player/player.ino index b9524a9..b82df61 100644 --- a/Gameduino/2.Audio/player/player.ino +++ b/libraries/Gameduino/examples/2.Audio/player/player.ino @@ -1,9 +1,12 @@ //Uncomment your preferred Shield -#define circuit Gameduino_Computing_Shield -//#define circuit Gameduino_LogicStart_Shield +#define circuit Gameduino_Computing_Shield //Please note that pressing the "Reset" button on the Computing Shield will reset the FPGA. +//#define circuit Gameduino_LogicStart_Shield //Important SW0 and SW1 need to be down for this sketch to work. On the Logicstart Shield, SW0 controls the Arduino reset line and SW1 controls the FPGA reset. + +//For a tutorial on using Gameduino on the Papilio DUO visit: +//http://gadgetfactory.net/learn/2015/06/08/gameduino-on-papilio-duo/ #include -#include +#include #include "mont.h" diff --git a/Gameduino/2.Audio/sample/sample.ino b/libraries/Gameduino/examples/2.Audio/sample/sample.ino similarity index 85% rename from Gameduino/2.Audio/sample/sample.ino rename to libraries/Gameduino/examples/2.Audio/sample/sample.ino index 5e57e04..c2d2a44 100644 --- a/Gameduino/2.Audio/sample/sample.ino +++ b/libraries/Gameduino/examples/2.Audio/sample/sample.ino @@ -1,11 +1,14 @@ -//Note: Have not been able to get this to work on the Papilio DUO. - //Uncomment your preferred Shield -#define circuit Gameduino_Computing_Shield -//#define circuit Gameduino_LogicStart_Shield +#define circuit Gameduino_Computing_Shield //Please note that pressing the "Reset" button on the Computing Shield will reset the FPGA. +//#define circuit Gameduino_LogicStart_Shield //Important SW0 and SW1 need to be down for this sketch to work. On the Logicstart Shield, SW0 controls the Arduino reset line and SW1 controls the FPGA reset. + +//NOTE: This sketch is not working on the Papilio DUO, if anyone figures out why drop us a note. + +//For a tutorial on using Gameduino on the Papilio DUO visit: +//http://gadgetfactory.net/learn/2015/06/08/gameduino-on-papilio-duo/ #include -#include +#include // ---------------------------------------------------------------------- // controller: buttons on Arduino pins 3,4,5,6 with 7 grounded @@ -15,13 +18,13 @@ static void controller_init() { // Configure input pins with internal pullups byte i; - for (i = 3; i < 7; i++) { + for (i = 5; i < 9; i++) { pinMode(i, INPUT); - digitalWrite(i, HIGH); + //digitalWrite(i, HIGH); } // drive pin 7 low - pinMode(7, OUTPUT); - digitalWrite(7, 0); +// pinMode(7, OUTPUT); +// digitalWrite(7, 0); } #define CONTROL_LEFT 1 @@ -32,13 +35,13 @@ static void controller_init() static byte controller_sense() { byte r = 0; - if (!digitalRead(5)) + if (!digitalRead(6)) r |= CONTROL_DOWN; - if (!digitalRead(4)) + if (!digitalRead(5)) r |= CONTROL_UP; - if (!digitalRead(6)) + if (!digitalRead(7)) r |= CONTROL_LEFT; - if (!digitalRead(3)) + if (!digitalRead(8)) r |= CONTROL_RIGHT; return r; } @@ -152,6 +155,7 @@ void add_samples(uint32_t dir) void setup() { + delay(3000); controller_init(); GD.begin(); GD.ascii(); diff --git a/Gameduino/2.Audio/sample/soundbuffer.h b/libraries/Gameduino/examples/2.Audio/sample/soundbuffer.h similarity index 100% rename from Gameduino/2.Audio/sample/soundbuffer.h rename to libraries/Gameduino/examples/2.Audio/sample/soundbuffer.h diff --git a/Gameduino/2.Audio/toccata/music.h b/libraries/Gameduino/examples/2.Audio/toccata/music.h similarity index 100% rename from Gameduino/2.Audio/toccata/music.h rename to libraries/Gameduino/examples/2.Audio/toccata/music.h diff --git a/Gameduino/2.Audio/toccata/toccata.ino b/libraries/Gameduino/examples/2.Audio/toccata/toccata.ino similarity index 74% rename from Gameduino/2.Audio/toccata/toccata.ino rename to libraries/Gameduino/examples/2.Audio/toccata/toccata.ino index d681ecd..530a3c9 100644 --- a/Gameduino/2.Audio/toccata/toccata.ino +++ b/libraries/Gameduino/examples/2.Audio/toccata/toccata.ino @@ -1,9 +1,15 @@ //Uncomment your preferred Shield -#define circuit Gameduino_Computing_Shield -//#define circuit Gameduino_LogicStart_Shield +#define circuit Gameduino_Computing_Shield //Please note that pressing the "Reset" button on the Computing Shield will reset the FPGA. +//#define circuit Gameduino_LogicStart_Shield //Important SW0 and SW1 need to be down for this sketch to work. On the Logicstart Shield, SW0 controls the Arduino reset line and SW1 controls the FPGA reset. + +//IMPORTANT NOTE: This sketch is too large to load over the USB port. Please use the AVR ISP mode to load this sketch. Here is a link with instructions for using ISP mode: +//http://gadgetfactory.net/learn/2015/01/15/designlab-quickstart-duo-avr/#Load_Sketch_Using_ISP + +//For a tutorial on using Gameduino on the Papilio DUO visit: +//http://gadgetfactory.net/learn/2015/06/08/gameduino-on-papilio-duo/ #include -#include +#include struct voice { @@ -100,6 +106,7 @@ void setup() { int i; + delay(3000); GD.begin(); GD.ascii(); diff --git a/Gameduino/3.Advanced/assets/assets.ino b/libraries/Gameduino/examples/3.Advanced/assets/assets.ino similarity index 68% rename from Gameduino/3.Advanced/assets/assets.ino rename to libraries/Gameduino/examples/3.Advanced/assets/assets.ino index f8926a9..153bae3 100644 --- a/Gameduino/3.Advanced/assets/assets.ino +++ b/libraries/Gameduino/examples/3.Advanced/assets/assets.ino @@ -1,9 +1,14 @@ //Uncomment your preferred Shield -#define circuit Gameduino_Computing_Shield -//#define circuit Gameduino_LogicStart_Shield +#define circuit Gameduino_Computing_Shield //Please note that pressing the "Reset" button on the Computing Shield will reset the FPGA. +//#define circuit Gameduino_LogicStart_Shield //Important SW0 and SW1 need to be down for this sketch to work. On the Logicstart Shield, SW0 controls the Arduino reset line and SW1 controls the FPGA reset. + +//NOTE: Not working on Papilio DUO, drop us a note if you know why. + +//For a tutorial on using Gameduino on the Papilio DUO visit: +//http://gadgetfactory.net/learn/2015/06/08/gameduino-on-papilio-duo/ #include -#include +#include static void playsample(Asset &a) { @@ -25,6 +30,7 @@ static void say(const char *word) void setup() { + delay(7000); GD.begin(); // Say "Gameduino ready" diff --git a/Gameduino/3.Advanced/bitmap/bitmap.ino b/libraries/Gameduino/examples/3.Advanced/bitmap/bitmap.ino similarity index 87% rename from Gameduino/3.Advanced/bitmap/bitmap.ino rename to libraries/Gameduino/examples/3.Advanced/bitmap/bitmap.ino index bae01fa..ee8a78b 100644 --- a/Gameduino/3.Advanced/bitmap/bitmap.ino +++ b/libraries/Gameduino/examples/3.Advanced/bitmap/bitmap.ino @@ -1,9 +1,12 @@ //Uncomment your preferred Shield -#define circuit Gameduino_Computing_Shield -//#define circuit Gameduino_LogicStart_Shield +#define circuit Gameduino_Computing_Shield //Please note that pressing the "Reset" button on the Computing Shield will reset the FPGA. +//#define circuit Gameduino_LogicStart_Shield //Important SW0 and SW1 need to be down for this sketch to work. On the Logicstart Shield, SW0 controls the Arduino reset line and SW1 controls the FPGA reset. + +//For a tutorial on using Gameduino on the Papilio DUO visit: +//http://gadgetfactory.net/learn/2015/06/08/gameduino-on-papilio-duo/ #include -#include +#include // replicate a 2-bit color across the whole byte. Optimization for setpixel byte replicate(byte color) diff --git a/Gameduino/3.Advanced/interrupt/interrupt.ino b/libraries/Gameduino/examples/3.Advanced/interrupt/interrupt.ino similarity index 65% rename from Gameduino/3.Advanced/interrupt/interrupt.ino rename to libraries/Gameduino/examples/3.Advanced/interrupt/interrupt.ino index 3ed0aa0..949b93f 100644 --- a/Gameduino/3.Advanced/interrupt/interrupt.ino +++ b/libraries/Gameduino/examples/3.Advanced/interrupt/interrupt.ino @@ -1,9 +1,14 @@ //Uncomment your preferred Shield -#define circuit Gameduino_Computing_Shield -//#define circuit Gameduino_LogicStart_Shield +#define circuit Gameduino_Computing_Shield //Please note that pressing the "Reset" button on the Computing Shield will reset the FPGA. +//#define circuit Gameduino_LogicStart_Shield //Important SW0 and SW1 need to be down for this sketch to work. On the Logicstart Shield, SW0 controls the Arduino reset line and SW1 controls the FPGA reset. + +//Note: Not working properly on Papilio DUO. Let us know if you find a solution. + +//For a tutorial on using Gameduino on the Papilio DUO visit: +//http://gadgetfactory.net/learn/2015/06/08/gameduino-on-papilio-duo/ #include -#include +#include #include "rasterinterrupt.h" @@ -31,7 +36,8 @@ void service() void setup() { int i; - + + delay(3000); GD.begin(); GD.ascii(); GD.putstr(0, 0, "Raster interrupts"); diff --git a/Gameduino/3.Advanced/interrupt/rasterinterrupt.h b/libraries/Gameduino/examples/3.Advanced/interrupt/rasterinterrupt.h similarity index 100% rename from Gameduino/3.Advanced/interrupt/rasterinterrupt.h rename to libraries/Gameduino/examples/3.Advanced/interrupt/rasterinterrupt.h diff --git a/Gameduino/3.Advanced/jkcollision/jkcollision.ino b/libraries/Gameduino/examples/3.Advanced/jkcollision/jkcollision.ino similarity index 75% rename from Gameduino/3.Advanced/jkcollision/jkcollision.ino rename to libraries/Gameduino/examples/3.Advanced/jkcollision/jkcollision.ino index d52ead7..967c651 100644 --- a/Gameduino/3.Advanced/jkcollision/jkcollision.ino +++ b/libraries/Gameduino/examples/3.Advanced/jkcollision/jkcollision.ino @@ -1,9 +1,12 @@ //Uncomment your preferred Shield -#define circuit Gameduino_Computing_Shield -//#define circuit Gameduino_LogicStart_Shield +#define circuit Gameduino_Computing_Shield //Please note that pressing the "Reset" button on the Computing Shield will reset the FPGA. +//#define circuit Gameduino_LogicStart_Shield //Important SW0 and SW1 need to be down for this sketch to work. On the Logicstart Shield, SW0 controls the Arduino reset line and SW1 controls the FPGA reset. + +//For a tutorial on using Gameduino on the Papilio DUO visit: +//http://gadgetfactory.net/learn/2015/06/08/gameduino-on-papilio-duo/ #include -#include +#include void readn(byte *dst, unsigned int addr, int c) { @@ -29,6 +32,7 @@ void setup() { int i; + delay(3000); GD.begin(); GD.wr(JK_MODE, 1); diff --git a/Gameduino/3.Advanced/snow/random.h b/libraries/Gameduino/examples/3.Advanced/snow/random.h similarity index 100% rename from Gameduino/3.Advanced/snow/random.h rename to libraries/Gameduino/examples/3.Advanced/snow/random.h diff --git a/libraries/Gameduino/examples/3.Advanced/snow/snow.ino b/libraries/Gameduino/examples/3.Advanced/snow/snow.ino new file mode 100644 index 0000000..a91efb9 --- /dev/null +++ b/libraries/Gameduino/examples/3.Advanced/snow/snow.ino @@ -0,0 +1,28 @@ +//Uncomment your preferred Shield +#define circuit Gameduino_Computing_Shield //Please note that pressing the "Reset" button on the Computing Shield will reset the FPGA. +//#define circuit Gameduino_LogicStart_Shield //Important SW0 and SW1 need to be down for this sketch to work. On the Logicstart Shield, SW0 controls the Arduino reset line and SW1 controls the FPGA reset. + +//For a tutorial on using Gameduino on the Papilio DUO visit: +//http://gadgetfactory.net/learn/2015/06/08/gameduino-on-papilio-duo/ + +#include +#include + +#include "random.h" + +void setup() +{ + GD.begin(); + int i; + for (i = 0; i < 256; i++) { + GD.wr16(RAM_PAL + (4 * i + 0) * 2, RGB(0,0,0)); + GD.wr16(RAM_PAL + (4 * i + 1) * 2, RGB(0x20,0x20,0x20)); + GD.wr16(RAM_PAL + (4 * i + 2) * 2, RGB(0x40,0x40,0x40)); + GD.wr16(RAM_PAL + (4 * i + 3) * 2, RGB(0xff,0xff,0xff)); + } + GD.microcode(random_code, sizeof(random_code)); +} + +void loop() +{ +} diff --git a/Gameduino/3.Advanced/splitscreen/splitscreen.h b/libraries/Gameduino/examples/3.Advanced/splitscreen/splitscreen.h similarity index 100% rename from Gameduino/3.Advanced/splitscreen/splitscreen.h rename to libraries/Gameduino/examples/3.Advanced/splitscreen/splitscreen.h diff --git a/Gameduino/3.Advanced/splitscreen/splitscreen.ino b/libraries/Gameduino/examples/3.Advanced/splitscreen/splitscreen.ino similarity index 73% rename from Gameduino/3.Advanced/splitscreen/splitscreen.ino rename to libraries/Gameduino/examples/3.Advanced/splitscreen/splitscreen.ino index e85b13b..76222cf 100644 --- a/Gameduino/3.Advanced/splitscreen/splitscreen.ino +++ b/libraries/Gameduino/examples/3.Advanced/splitscreen/splitscreen.ino @@ -1,9 +1,12 @@ //Uncomment your preferred Shield -#define circuit Gameduino_Computing_Shield -//#define circuit Gameduino_LogicStart_Shield +#define circuit Gameduino_Computing_Shield //Please note that pressing the "Reset" button on the Computing Shield will reset the FPGA. +//#define circuit Gameduino_LogicStart_Shield //Important SW0 and SW1 need to be down for this sketch to work. On the Logicstart Shield, SW0 controls the Arduino reset line and SW1 controls the FPGA reset. + +//For a tutorial on using Gameduino on the Papilio DUO visit: +//http://gadgetfactory.net/learn/2015/06/08/gameduino-on-papilio-duo/ #include -#include +#include #include "splitscreen.h" diff --git a/Gameduino/3.Advanced/splitscreen/splitscreen_graphics.h b/libraries/Gameduino/examples/3.Advanced/splitscreen/splitscreen_graphics.h similarity index 100% rename from Gameduino/3.Advanced/splitscreen/splitscreen_graphics.h rename to libraries/Gameduino/examples/3.Advanced/splitscreen/splitscreen_graphics.h diff --git a/Gameduino/3.Advanced/wireframe/eliteships.h b/libraries/Gameduino/examples/3.Advanced/wireframe/eliteships.h similarity index 100% rename from Gameduino/3.Advanced/wireframe/eliteships.h rename to libraries/Gameduino/examples/3.Advanced/wireframe/eliteships.h diff --git a/Gameduino/3.Advanced/wireframe/eraser.h b/libraries/Gameduino/examples/3.Advanced/wireframe/eraser.h similarity index 100% rename from Gameduino/3.Advanced/wireframe/eraser.h rename to libraries/Gameduino/examples/3.Advanced/wireframe/eraser.h diff --git a/Gameduino/3.Advanced/wireframe/wireframe.h b/libraries/Gameduino/examples/3.Advanced/wireframe/wireframe.h similarity index 100% rename from Gameduino/3.Advanced/wireframe/wireframe.h rename to libraries/Gameduino/examples/3.Advanced/wireframe/wireframe.h diff --git a/Gameduino/3.Advanced/wireframe/wireframe.ino b/libraries/Gameduino/examples/3.Advanced/wireframe/wireframe.ino similarity index 91% rename from Gameduino/3.Advanced/wireframe/wireframe.ino rename to libraries/Gameduino/examples/3.Advanced/wireframe/wireframe.ino index 36326d0..f8c6bd5 100644 --- a/Gameduino/3.Advanced/wireframe/wireframe.ino +++ b/libraries/Gameduino/examples/3.Advanced/wireframe/wireframe.ino @@ -1,9 +1,12 @@ //Uncomment your preferred Shield -#define circuit Gameduino_Computing_Shield -//#define circuit Gameduino_LogicStart_Shield +#define circuit Gameduino_Computing_Shield //Please note that pressing the "Reset" button on the Computing Shield will reset the FPGA. +//#define circuit Gameduino_LogicStart_Shield //Important SW0 and SW1 need to be down for this sketch to work. On the Logicstart Shield, SW0 controls the Arduino reset line and SW1 controls the FPGA reset. + +//For a tutorial on using Gameduino on the Papilio DUO visit: +//http://gadgetfactory.net/learn/2015/06/08/gameduino-on-papilio-duo/ #include -#include +#include //////////////////////////////////////////////////////////////////////////////// // Plotter diff --git a/Gameduino/4.Demo/asteroids/asteroidgraphics.h b/libraries/Gameduino/examples/4.Demo/asteroids/asteroidgraphics.h similarity index 100% rename from Gameduino/4.Demo/asteroids/asteroidgraphics.h rename to libraries/Gameduino/examples/4.Demo/asteroids/asteroidgraphics.h diff --git a/Gameduino/4.Demo/asteroids/asteroids.ino b/libraries/Gameduino/examples/4.Demo/asteroids/asteroids.ino similarity index 93% rename from Gameduino/4.Demo/asteroids/asteroids.ino rename to libraries/Gameduino/examples/4.Demo/asteroids/asteroids.ino index fd594c1..42475d0 100644 --- a/Gameduino/4.Demo/asteroids/asteroids.ino +++ b/libraries/Gameduino/examples/4.Demo/asteroids/asteroids.ino @@ -1,9 +1,18 @@ //Uncomment your preferred Shield -#define circuit Gameduino_Computing_Shield -//#define circuit Gameduino_LogicStart_Shield +#define circuit Gameduino_Computing_Shield //Please note that pressing the "Reset" button on the Computing Shield will reset the FPGA. +//#define circuit Gameduino_LogicStart_Shield //Important SW0 and SW1 need to be down for this sketch to work. On the Logicstart Shield, SW0 controls the Arduino reset line and SW1 controls the FPGA reset. + +//IMPORTANT NOTE: This sketch is too large to load over the USB port. Please use the AVR ISP mode to load this sketch. Here is a link with instructions for using ISP mode: +//http://gadgetfactory.net/learn/2015/01/15/designlab-quickstart-duo-avr/#Load_Sketch_Using_ISP + +//Joystick note: This sketch uses a joystick. The LogicStart shield does not have a joystick defined. For the Computing Shield plug an Atari 2600 style joystick into Joystick Port 2. + +//For a tutorial on using Gameduino on the Papilio DUO visit: +//http://gadgetfactory.net/learn/2015/06/08/gameduino-on-papilio-duo/ + #include -#include +#include // ---------------------------------------------------------------------- @@ -36,23 +45,24 @@ static byte qrand(byte n) // n random bits } // ---------------------------------------------------------------------- -// controller: buttons on Arduino pins 3,4,5,6 +// controller: // ---------------------------------------------------------------------- static void controller_init() { // Configure input pins with internal pullups byte i; - for (i = 3; i < 7; i++) { + for (i = 5; i < 9; i++) { pinMode(i, INPUT); - digitalWrite(i, HIGH); + //digitalWrite(i, HIGH); } } -#define CONTROL_LEFT 13 -#define CONTROL_RIGHT 10 -#define CONTROL_UP 11 -#define CONTROL_DOWN 12 +//Computing Shield Joystick 2 - Joystick 1 cannot be used because it interferes with SPI communications. +#define CONTROL_LEFT 1 +#define CONTROL_RIGHT 2 +#define CONTROL_UP 4 +#define CONTROL_DOWN 8 static byte controller_sense(uint16_t clock) @@ -60,13 +70,13 @@ static byte controller_sense(uint16_t clock) byte r = 0; - if (!digitalRead(5)) + if (!digitalRead(6)) r |= CONTROL_DOWN; - if (!digitalRead(4)) + if (!digitalRead(5)) r |= CONTROL_UP; - if (!digitalRead(6)) + if (!digitalRead(7)) r |= CONTROL_LEFT; - if (!digitalRead(3)) + if (!digitalRead(8)) r |= CONTROL_RIGHT; return r; } @@ -238,7 +248,8 @@ static void handle_player(byte i, byte state, uint16_t clock) po->y += player_vy; if (clock & 1) { - char rotate = (512 - analogRead(0)) / 400; + //char rotate = (512 - analogRead(0)) / 400; + char rotate = 0; if (control & CONTROL_LEFT) rotate++; if (control & CONTROL_RIGHT) @@ -479,7 +490,7 @@ static void column(byte dst, byte src) { static char scratch[76]; memset(scratch, 0, sizeof(scratch)); - prog_uchar line = pgm_read_byte_near(title + 2 * src); + unsigned char line = pgm_read_byte_near(title + 2 * src); titlepaint(scratch, line, 1); line = pgm_read_byte_near(title + 2 * src + 1); titlepaint(scratch, line, 2); diff --git a/Gameduino/4.Demo/asteroids/splitscreen.h b/libraries/Gameduino/examples/4.Demo/asteroids/splitscreen.h similarity index 100% rename from Gameduino/4.Demo/asteroids/splitscreen.h rename to libraries/Gameduino/examples/4.Demo/asteroids/splitscreen.h diff --git a/Gameduino/4.Demo/ball/ball.h b/libraries/Gameduino/examples/4.Demo/ball/ball.h similarity index 100% rename from Gameduino/4.Demo/ball/ball.h rename to libraries/Gameduino/examples/4.Demo/ball/ball.h diff --git a/Gameduino/4.Demo/ball/ball.ino b/libraries/Gameduino/examples/4.Demo/ball/ball.ino similarity index 81% rename from Gameduino/4.Demo/ball/ball.ino rename to libraries/Gameduino/examples/4.Demo/ball/ball.ino index e0b5f97..a926030 100644 --- a/Gameduino/4.Demo/ball/ball.ino +++ b/libraries/Gameduino/examples/4.Demo/ball/ball.ino @@ -1,9 +1,12 @@ //Uncomment your preferred Shield -#define circuit Gameduino_Computing_Shield -//#define circuit Gameduino_LogicStart_Shield +#define circuit Gameduino_Computing_Shield //Please note that pressing the "Reset" button on the Computing Shield will reset the FPGA. +//#define circuit Gameduino_LogicStart_Shield //Important SW0 and SW1 need to be down for this sketch to work. On the Logicstart Shield, SW0 controls the Arduino reset line and SW1 controls the FPGA reset. + +//For a tutorial on using Gameduino on the Papilio DUO visit: +//http://gadgetfactory.net/learn/2015/06/08/gameduino-on-papilio-duo/ #include -#include +#include #include "ball.h" diff --git a/Gameduino/4.Demo/chessboard/Wood32.h b/libraries/Gameduino/examples/4.Demo/chessboard/Wood32.h similarity index 100% rename from Gameduino/4.Demo/chessboard/Wood32.h rename to libraries/Gameduino/examples/4.Demo/chessboard/Wood32.h diff --git a/Gameduino/4.Demo/chessboard/chessboard.ino b/libraries/Gameduino/examples/4.Demo/chessboard/chessboard.ino similarity index 92% rename from Gameduino/4.Demo/chessboard/chessboard.ino rename to libraries/Gameduino/examples/4.Demo/chessboard/chessboard.ino index 0f887be..a147151 100644 --- a/Gameduino/4.Demo/chessboard/chessboard.ino +++ b/libraries/Gameduino/examples/4.Demo/chessboard/chessboard.ino @@ -1,9 +1,12 @@ //Uncomment your preferred Shield -#define circuit Gameduino_Computing_Shield -//#define circuit Gameduino_LogicStart_Shield +#define circuit Gameduino_Computing_Shield //Please note that pressing the "Reset" button on the Computing Shield will reset the FPGA. +//#define circuit Gameduino_LogicStart_Shield //Important SW0 and SW1 need to be down for this sketch to work. On the Logicstart Shield, SW0 controls the Arduino reset line and SW1 controls the FPGA reset. + +//For a tutorial on using Gameduino on the Papilio DUO visit: +//http://gadgetfactory.net/learn/2015/06/08/gameduino-on-papilio-duo/ #include -#include +#include #include "Wood32.h" #include "staunton.h" // Chess pieces from eboard's Staunton set: http://www.bergo.eng.br diff --git a/Gameduino/4.Demo/chessboard/digits.h b/libraries/Gameduino/examples/4.Demo/chessboard/digits.h similarity index 100% rename from Gameduino/4.Demo/chessboard/digits.h rename to libraries/Gameduino/examples/4.Demo/chessboard/digits.h diff --git a/Gameduino/4.Demo/chessboard/staunton.h b/libraries/Gameduino/examples/4.Demo/chessboard/staunton.h similarity index 100% rename from Gameduino/4.Demo/chessboard/staunton.h rename to libraries/Gameduino/examples/4.Demo/chessboard/staunton.h diff --git a/Gameduino/5.Tools/joytest/joytest.ino b/libraries/Gameduino/examples/5.Tools/joytest/joytest.ino similarity index 58% rename from Gameduino/5.Tools/joytest/joytest.ino rename to libraries/Gameduino/examples/5.Tools/joytest/joytest.ino index 4d89b7d..4a9bb75 100644 --- a/Gameduino/5.Tools/joytest/joytest.ino +++ b/libraries/Gameduino/examples/5.Tools/joytest/joytest.ino @@ -1,9 +1,14 @@ //Uncomment your preferred Shield -#define circuit Gameduino_Computing_Shield -//#define circuit Gameduino_LogicStart_Shield +#define circuit Gameduino_Computing_Shield //Please note that pressing the "Reset" button on the Computing Shield will reset the FPGA. +//#define circuit Gameduino_LogicStart_Shield //Important SW0 and SW1 need to be down for this sketch to work. On the Logicstart Shield, SW0 controls the Arduino reset line and SW1 controls the FPGA reset. + +//Joystick note: This sketch uses a joystick. The LogicStart shield does not have a joystick defined. For the Computing Shield plug an Atari 2600 style joystick into Joystick Port 2. + +//For a tutorial on using Gameduino on the Papilio DUO visit: +//http://gadgetfactory.net/learn/2015/06/08/gameduino-on-papilio-duo/ #include -#include +#include void setup() { @@ -20,9 +25,9 @@ void setup() #endif // Configure input pins with internal pullups byte i; - for (i = 2; i < 7; i++) { + for (i = 5; i < 9; i++) { pinMode(i, INPUT); - digitalWrite(i, HIGH); + //digitalWrite(i, HIGH); } GD.begin(); GD.ascii(); @@ -62,11 +67,11 @@ void circle(int x, int y, byte a) static byte bbits() { byte r; - r |= (digitalRead(3) << 0); - r |= (digitalRead(4) << 1); - r |= (digitalRead(5) << 2); - r |= (digitalRead(6) << 3); - r |= (digitalRead(2) << 4); + r |= (digitalRead(6) << 0); + r |= (digitalRead(5) << 1); + r |= (digitalRead(7) << 2); + r |= (digitalRead(8) << 3); + //r |= (digitalRead(2) << 4); return r; } @@ -74,12 +79,12 @@ static byte ands = 0x1f, ors = 0x00; void loop() { - GD.putstr(40, 10, digitalRead(4) ? "-" : "U"); - GD.putstr(40, 20, digitalRead(5) ? "-" : "D"); - GD.putstr(35, 15, digitalRead(6) ? "-" : "L"); - GD.putstr(45, 15, digitalRead(3) ? "-" : "R"); + GD.putstr(40, 10, digitalRead(5) ? "-" : "F"); + GD.putstr(40, 20, digitalRead(6) ? "-" : "D"); + GD.putstr(35, 15, digitalRead(7) ? "-" : "L"); + GD.putstr(45, 15, digitalRead(8) ? "-" : "R"); - GD.putstr(17, 24, digitalRead(2) ? "-" : "S"); + //GD.putstr(17, 24, digitalRead(2) ? "-" : "S"); int x = analogRead(0); int y = analogRead(1); diff --git a/Gameduino/5.Tools/memloader/memloader.ino b/libraries/Gameduino/examples/5.Tools/memloader/memloader.ino similarity index 82% rename from Gameduino/5.Tools/memloader/memloader.ino rename to libraries/Gameduino/examples/5.Tools/memloader/memloader.ino index f0cf933..9503272 100644 --- a/Gameduino/5.Tools/memloader/memloader.ino +++ b/libraries/Gameduino/examples/5.Tools/memloader/memloader.ino @@ -1,11 +1,14 @@ //Uncomment your preferred Shield -#define circuit Gameduino_Computing_Shield -//#define circuit Gameduino_LogicStart_Shield +#define circuit Gameduino_Computing_Shield //Please note that pressing the "Reset" button on the Computing Shield will reset the FPGA. +//#define circuit Gameduino_LogicStart_Shield //Important SW0 and SW1 need to be down for this sketch to work. On the Logicstart Shield, SW0 controls the Arduino reset line and SW1 controls the FPGA reset. + +//For a tutorial on using Gameduino on the Papilio DUO visit: +//http://gadgetfactory.net/learn/2015/06/08/gameduino-on-papilio-duo/ #include -#include +#include -static PROGMEM prog_uint32_t crc_table[16] = { +static uint32_t crc_table[16] = { 0x00000000, 0x1db71064, 0x3b6e20c8, 0x26d930ac, 0x76dc4190, 0x6b6b51f4, 0x4db26158, 0x5005713c, 0xedb88320, 0xf00f9344, 0xd6d6a3e8, 0xcb61b38c, @@ -16,9 +19,9 @@ unsigned long crc_update(unsigned long crc, byte data) { byte tbl_idx; tbl_idx = crc ^ (data >> (0 * 4)); - crc = pgm_read_dword_near(crc_table + (tbl_idx & 0x0f)) ^ (crc >> 4); + crc = crc_table[tbl_idx & 0x0f] ^ (crc >> 4); tbl_idx = crc ^ (data >> (1 * 4)); - crc = pgm_read_dword_near(crc_table + (tbl_idx & 0x0f)) ^ (crc >> 4); + crc = crc_table[tbl_idx & 0x0f] ^ (crc >> 4); return crc; } diff --git a/Gameduino/5.Tools/screenshot/screenshot.ino b/libraries/Gameduino/examples/5.Tools/screenshot/screenshot.ino similarity index 62% rename from Gameduino/5.Tools/screenshot/screenshot.ino rename to libraries/Gameduino/examples/5.Tools/screenshot/screenshot.ino index b997ba0..a20a486 100644 --- a/Gameduino/5.Tools/screenshot/screenshot.ino +++ b/libraries/Gameduino/examples/5.Tools/screenshot/screenshot.ino @@ -1,9 +1,12 @@ //Uncomment your preferred Shield -#define circuit Gameduino_Computing_Shield -//#define circuit Gameduino_LogicStart_Shield +#define circuit Gameduino_Computing_Shield //Please note that pressing the "Reset" button on the Computing Shield will reset the FPGA. +//#define circuit Gameduino_LogicStart_Shield //Important SW0 and SW1 need to be down for this sketch to work. On the Logicstart Shield, SW0 controls the Arduino reset line and SW1 controls the FPGA reset. + +//For a tutorial on using Gameduino on the Papilio DUO visit: +//http://gadgetfactory.net/learn/2015/06/08/gameduino-on-papilio-duo/ #include -#include +#include #define RED RGB(255,0,0) #define GREEN RGB(0,255,0) diff --git a/Gameduino/5.Tools/selftest/lena.h b/libraries/Gameduino/examples/5.Tools/selftest/lena.h similarity index 100% rename from Gameduino/5.Tools/selftest/lena.h rename to libraries/Gameduino/examples/5.Tools/selftest/lena.h diff --git a/Gameduino/5.Tools/selftest/selftest.ino b/libraries/Gameduino/examples/5.Tools/selftest/selftest.ino similarity index 94% rename from Gameduino/5.Tools/selftest/selftest.ino rename to libraries/Gameduino/examples/5.Tools/selftest/selftest.ino index dfc7792..999c86e 100644 --- a/Gameduino/5.Tools/selftest/selftest.ino +++ b/libraries/Gameduino/examples/5.Tools/selftest/selftest.ino @@ -1,9 +1,12 @@ //Uncomment your preferred Shield -#define circuit Gameduino_Computing_Shield -//#define circuit Gameduino_LogicStart_Shield +#define circuit Gameduino_Computing_Shield //Please note that pressing the "Reset" button on the Computing Shield will reset the FPGA. +//#define circuit Gameduino_LogicStart_Shield //Important SW0 and SW1 need to be down for this sketch to work. On the Logicstart Shield, SW0 controls the Arduino reset line and SW1 controls the FPGA reset. + +//For a tutorial on using Gameduino on the Papilio DUO visit: +//http://gadgetfactory.net/learn/2015/06/08/gameduino-on-papilio-duo/ #include -#include +#include int atxy(int x, int y) { diff --git a/Gameduino/5.Tools/selftest/selftest1.h b/libraries/Gameduino/examples/5.Tools/selftest/selftest1.h similarity index 100% rename from Gameduino/5.Tools/selftest/selftest1.h rename to libraries/Gameduino/examples/5.Tools/selftest/selftest1.h diff --git a/libraries/Gameduino_Computing_Shield/circuit/DUO_LX9/papilio_duo_lx9.bit b/libraries/Gameduino_Computing_Shield/circuit/DUO_LX9/papilio_duo_lx9.bit index 7decf6a..56f4b71 100644 Binary files a/libraries/Gameduino_Computing_Shield/circuit/DUO_LX9/papilio_duo_lx9.bit and b/libraries/Gameduino_Computing_Shield/circuit/DUO_LX9/papilio_duo_lx9.bit differ diff --git a/libraries/Gameduino_Computing_Shield/circuit/PSL_Papilio_DUO_LX9.xise b/libraries/Gameduino_Computing_Shield/circuit/PSL_Papilio_DUO_LX9.xise index c72c60d..5df5c89 100644 --- a/libraries/Gameduino_Computing_Shield/circuit/PSL_Papilio_DUO_LX9.xise +++ b/libraries/Gameduino_Computing_Shield/circuit/PSL_Papilio_DUO_LX9.xise @@ -9,38 +9,815 @@ - + - + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - + - + - + - + - + - - - - + + + + - + @@ -391,9 +1168,7 @@ - - - + @@ -406,6 +1181,14 @@ + + + + + + + + diff --git a/libraries/Gameduino_Computing_Shield/circuit/Papilio_DUO_LX9.sch b/libraries/Gameduino_Computing_Shield/circuit/Papilio_DUO_LX9.sch index 479f1dc..cb4a6da 100644 --- a/libraries/Gameduino_Computing_Shield/circuit/Papilio_DUO_LX9.sch +++ b/libraries/Gameduino_Computing_Shield/circuit/Papilio_DUO_LX9.sch @@ -15,8 +15,6 @@ - - @@ -36,14 +34,6 @@ - - - - - - - - @@ -53,13 +43,20 @@ - - - + + + + + + + + + + @@ -69,8 +66,6 @@ - - @@ -90,22 +85,21 @@ - - - - - - - - - + + + + + + + + 2000-1-1T10:10:10 @@ -261,6 +255,43 @@ + + 2000-1-1T10:10:10 + + + + + + + + + + + + + + 2000-1-1T10:10:10 + + + + + + + + + + + + + + + + + + + + + @@ -286,12 +317,12 @@ - + - - + + @@ -308,7 +339,7 @@ - + @@ -327,14 +358,14 @@ - - - - - - - - + + + + + + + + @@ -369,21 +400,34 @@ - + - + - + + + + + + + + + + + + + + @@ -413,12 +457,6 @@ - - - - - - @@ -476,30 +514,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - @@ -529,7 +543,7 @@ - Version: 1.0 + Version: 1.1 @@ -539,8 +553,6 @@ - - @@ -560,14 +572,6 @@ - - - - - - - - @@ -593,21 +597,11 @@ - - - - - - - - - - @@ -616,15 +610,10 @@ - - - Replace DUO_SW1 with a Pullup if you want to disable the ATmega32U4 chip when this circuit is loaded. Papilio DUO Reset - Press the 'Right' button to reset the AVR - @@ -632,5 +621,53 @@ Press the 'Reset' button to reset the FPGA + Audio1 Right removed due to USB conflict + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Map Joystick 2 to AVR pins + JS2 Right + JS2 Left + JS2 Fire + JS2 Down \ No newline at end of file diff --git a/libraries/Gameduino_Computing_Shield/circuit/schematic_papilio_duo.pdf b/libraries/Gameduino_Computing_Shield/circuit/schematic_papilio_duo.pdf index d535d81..8cdc949 100644 Binary files a/libraries/Gameduino_Computing_Shield/circuit/schematic_papilio_duo.pdf and b/libraries/Gameduino_Computing_Shield/circuit/schematic_papilio_duo.pdf differ diff --git a/libraries/LiquidCrystal/library.properties b/libraries/LiquidCrystal/library.properties deleted file mode 100644 index e667f98..0000000 --- a/libraries/LiquidCrystal/library.properties +++ /dev/null @@ -1,8 +0,0 @@ -name=LiquidCrystal -version=1.0 -author= -maintainer=Arduino -sentence=Write to an alphanumeric LCD display. -paragraph=This library allows an Arduino board to control LiquidCrystal displays (LCDs) based on the Hitachi HD44780 (or a compatible) chipset, which is found on most text-based LCDs. The library works with in either 4 or 8 bit mode (i.e. using 4 or 8 data lines in addition to the rs, enable, and, optionally, the rw control lines). -url=http://arduino.cc/en/Reference/LiquidCrystal -architectures=* diff --git a/libraries/LiquidCrystal/src/LiquidCrystal.cpp b/libraries/LiquidCrystal/src/LiquidCrystal.cpp deleted file mode 100644 index b8255be..0000000 --- a/libraries/LiquidCrystal/src/LiquidCrystal.cpp +++ /dev/null @@ -1,310 +0,0 @@ -#include "LiquidCrystal.h" - -#include "zstdio.h" -#include -#include -#include "Arduino.h" - -// When the display powers up, it is configured as follows: -// -// 1. Display clear -// 2. Function set: -// DL = 1; 8-bit interface data -// N = 0; 1-line display -// F = 0; 5x8 dot character font -// 3. Display on/off control: -// D = 0; Display off -// C = 0; Cursor off -// B = 0; Blinking off -// 4. Entry mode set: -// I/D = 1; Increment by 1 -// S = 0; No shift -// -// Note, however, that resetting the Arduino doesn't reset the LCD, so we -// can't assume that its in that state when a sketch starts (and the -// LiquidCrystal constructor is called). - -LiquidCrystal::LiquidCrystal(uint8_t rs, uint8_t rw, uint8_t enable, - uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, - uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7) -{ - init(0, rs, rw, enable, d0, d1, d2, d3, d4, d5, d6, d7); -} - -LiquidCrystal::LiquidCrystal(uint8_t rs, uint8_t enable, - uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, - uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7) -{ - init(0, rs, 255, enable, d0, d1, d2, d3, d4, d5, d6, d7); -} - -LiquidCrystal::LiquidCrystal(uint8_t rs, uint8_t rw, uint8_t enable, - uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3) -{ - init(1, rs, rw, enable, d0, d1, d2, d3, 0, 0, 0, 0); -} - -LiquidCrystal::LiquidCrystal(uint8_t rs, uint8_t enable, - uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3) -{ - init(1, rs, 255, enable, d0, d1, d2, d3, 0, 0, 0, 0); -} - -void LiquidCrystal::init(uint8_t fourbitmode, uint8_t rs, uint8_t rw, uint8_t enable, - uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, - uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7) -{ - _rs_pin = rs; - _rw_pin = rw; - _enable_pin = enable; - - _data_pins[0] = d0; - _data_pins[1] = d1; - _data_pins[2] = d2; - _data_pins[3] = d3; - _data_pins[4] = d4; - _data_pins[5] = d5; - _data_pins[6] = d6; - _data_pins[7] = d7; - - pinMode(_rs_pin, OUTPUT); - // we can save 1 pin by not using RW. Indicate by passing 255 instead of pin# - if (_rw_pin != 255) { - pinMode(_rw_pin, OUTPUT); - } - pinMode(_enable_pin, OUTPUT); - - if (fourbitmode) - _displayfunction = LCD_4BITMODE | LCD_1LINE | LCD_5x8DOTS; - else - _displayfunction = LCD_8BITMODE | LCD_1LINE | LCD_5x8DOTS; - - begin(16, 1); -} - -void LiquidCrystal::begin(uint8_t cols, uint8_t lines, uint8_t dotsize) { - if (lines > 1) { - _displayfunction |= LCD_2LINE; - } - _numlines = lines; - _currline = 0; - - // for some 1 line displays you can select a 10 pixel high font - if ((dotsize != 0) && (lines == 1)) { - _displayfunction |= LCD_5x10DOTS; - } - - // SEE PAGE 45/46 FOR INITIALIZATION SPECIFICATION! - // according to datasheet, we need at least 40ms after power rises above 2.7V - // before sending commands. Arduino can turn on way befer 4.5V so we'll wait 50 - delayMicroseconds(50000); - // Now we pull both RS and R/W low to begin commands - digitalWrite(_rs_pin, LOW); - digitalWrite(_enable_pin, LOW); - if (_rw_pin != 255) { - digitalWrite(_rw_pin, LOW); - } - - //put the LCD into 4 bit or 8 bit mode - if (! (_displayfunction & LCD_8BITMODE)) { - // this is according to the hitachi HD44780 datasheet - // figure 24, pg 46 - - // we start in 8bit mode, try to set 4 bit mode - write4bits(0x03); - delayMicroseconds(4500); // wait min 4.1ms - - // second try - write4bits(0x03); - delayMicroseconds(4500); // wait min 4.1ms - - // third go! - write4bits(0x03); - delayMicroseconds(150); - - // finally, set to 4-bit interface - write4bits(0x02); - } else { - // this is according to the hitachi HD44780 datasheet - // page 45 figure 23 - - // Send function set command sequence - command(LCD_FUNCTIONSET | _displayfunction); - delayMicroseconds(4500); // wait more than 4.1ms - - // second try - command(LCD_FUNCTIONSET | _displayfunction); - delayMicroseconds(150); - - // third go - command(LCD_FUNCTIONSET | _displayfunction); - } - - // finally, set # lines, font size, etc. - command(LCD_FUNCTIONSET | _displayfunction); - - // turn the display on with no cursor or blinking default - _displaycontrol = LCD_DISPLAYON | LCD_CURSOROFF | LCD_BLINKOFF; - display(); - - // clear it off - clear(); - - // Initialize to default text direction (for romance languages) - _displaymode = LCD_ENTRYLEFT | LCD_ENTRYSHIFTDECREMENT; - // set the entry mode - command(LCD_ENTRYMODESET | _displaymode); - -} - -/********** high level commands, for the user! */ -void LiquidCrystal::clear() -{ - command(LCD_CLEARDISPLAY); // clear display, set cursor position to zero - delayMicroseconds(2000); // this command takes a long time! -} - -void LiquidCrystal::home() -{ - command(LCD_RETURNHOME); // set cursor position to zero - delayMicroseconds(2000); // this command takes a long time! -} - -void LiquidCrystal::setCursor(uint8_t col, uint8_t row) -{ - int row_offsets[] = { 0x00, 0x40, 0x14, 0x54 }; - if ( row >= _numlines ) { - row = _numlines-1; // we count rows starting w/0 - } - - command(LCD_SETDDRAMADDR | (col + row_offsets[row])); -} - -// Turn the display on/off (quickly) -void LiquidCrystal::noDisplay() { - _displaycontrol &= ~LCD_DISPLAYON; - command(LCD_DISPLAYCONTROL | _displaycontrol); -} -void LiquidCrystal::display() { - _displaycontrol |= LCD_DISPLAYON; - command(LCD_DISPLAYCONTROL | _displaycontrol); -} - -// Turns the underline cursor on/off -void LiquidCrystal::noCursor() { - _displaycontrol &= ~LCD_CURSORON; - command(LCD_DISPLAYCONTROL | _displaycontrol); -} -void LiquidCrystal::cursor() { - _displaycontrol |= LCD_CURSORON; - command(LCD_DISPLAYCONTROL | _displaycontrol); -} - -// Turn on and off the blinking cursor -void LiquidCrystal::noBlink() { - _displaycontrol &= ~LCD_BLINKON; - command(LCD_DISPLAYCONTROL | _displaycontrol); -} -void LiquidCrystal::blink() { - _displaycontrol |= LCD_BLINKON; - command(LCD_DISPLAYCONTROL | _displaycontrol); -} - -// These commands scroll the display without changing the RAM -void LiquidCrystal::scrollDisplayLeft(void) { - command(LCD_CURSORSHIFT | LCD_DISPLAYMOVE | LCD_MOVELEFT); -} -void LiquidCrystal::scrollDisplayRight(void) { - command(LCD_CURSORSHIFT | LCD_DISPLAYMOVE | LCD_MOVERIGHT); -} - -// This is for text that flows Left to Right -void LiquidCrystal::leftToRight(void) { - _displaymode |= LCD_ENTRYLEFT; - command(LCD_ENTRYMODESET | _displaymode); -} - -// This is for text that flows Right to Left -void LiquidCrystal::rightToLeft(void) { - _displaymode &= ~LCD_ENTRYLEFT; - command(LCD_ENTRYMODESET | _displaymode); -} - -// This will 'right justify' text from the cursor -void LiquidCrystal::autoscroll(void) { - _displaymode |= LCD_ENTRYSHIFTINCREMENT; - command(LCD_ENTRYMODESET | _displaymode); -} - -// This will 'left justify' text from the cursor -void LiquidCrystal::noAutoscroll(void) { - _displaymode &= ~LCD_ENTRYSHIFTINCREMENT; - command(LCD_ENTRYMODESET | _displaymode); -} - -// Allows us to fill the first 8 CGRAM locations -// with custom characters -void LiquidCrystal::createChar(uint8_t location, uint8_t charmap[]) { - location &= 0x7; // we only have 8 locations 0-7 - command(LCD_SETCGRAMADDR | (location << 3)); - for (int i=0; i<8; i++) { - write(charmap[i]); - } -} - -/*********** mid level commands, for sending data/cmds */ - -inline void LiquidCrystal::command(uint8_t value) { - send(value, LOW); -} - -inline size_t LiquidCrystal::write(uint8_t value) { - send(value, HIGH); - return 1; // assume sucess -} - -/************ low level data pushing commands **********/ - -// write either command or data, with automatic 4/8-bit selection -void LiquidCrystal::send(uint8_t value, uint8_t mode) { - digitalWrite(_rs_pin, mode); - - // if there is a RW pin indicated, set it low to Write - if (_rw_pin != 255) { - digitalWrite(_rw_pin, LOW); - } - - if (_displayfunction & LCD_8BITMODE) { - write8bits(value); - } else { - write4bits(value>>4); - write4bits(value); - } -} - -void LiquidCrystal::pulseEnable(void) { - digitalWrite(_enable_pin, LOW); - delayMicroseconds(1); - digitalWrite(_enable_pin, HIGH); - delayMicroseconds(1); // enable pulse must be >450ns - digitalWrite(_enable_pin, LOW); - delayMicroseconds(100); // commands need > 37us to settle -} - -void LiquidCrystal::write4bits(uint8_t value) { - for (int i = 0; i < 4; i++) { - pinMode(_data_pins[i], OUTPUT); - digitalWrite(_data_pins[i], (value >> i) & 0x01); - } - - pulseEnable(); -} - -void LiquidCrystal::write8bits(uint8_t value) { - for (int i = 0; i < 8; i++) { - pinMode(_data_pins[i], OUTPUT); - digitalWrite(_data_pins[i], (value >> i) & 0x01); - } - - pulseEnable(); -} diff --git a/libraries/LiquidCrystal/src/LiquidCrystal.h b/libraries/LiquidCrystal/src/LiquidCrystal.h deleted file mode 100644 index 24ec5af..0000000 --- a/libraries/LiquidCrystal/src/LiquidCrystal.h +++ /dev/null @@ -1,106 +0,0 @@ -#ifndef LiquidCrystal_h -#define LiquidCrystal_h - -#include -#include "Print.h" - -// commands -#define LCD_CLEARDISPLAY 0x01 -#define LCD_RETURNHOME 0x02 -#define LCD_ENTRYMODESET 0x04 -#define LCD_DISPLAYCONTROL 0x08 -#define LCD_CURSORSHIFT 0x10 -#define LCD_FUNCTIONSET 0x20 -#define LCD_SETCGRAMADDR 0x40 -#define LCD_SETDDRAMADDR 0x80 - -// flags for display entry mode -#define LCD_ENTRYRIGHT 0x00 -#define LCD_ENTRYLEFT 0x02 -#define LCD_ENTRYSHIFTINCREMENT 0x01 -#define LCD_ENTRYSHIFTDECREMENT 0x00 - -// flags for display on/off control -#define LCD_DISPLAYON 0x04 -#define LCD_DISPLAYOFF 0x00 -#define LCD_CURSORON 0x02 -#define LCD_CURSOROFF 0x00 -#define LCD_BLINKON 0x01 -#define LCD_BLINKOFF 0x00 - -// flags for display/cursor shift -#define LCD_DISPLAYMOVE 0x08 -#define LCD_CURSORMOVE 0x00 -#define LCD_MOVERIGHT 0x04 -#define LCD_MOVELEFT 0x00 - -// flags for function set -#define LCD_8BITMODE 0x10 -#define LCD_4BITMODE 0x00 -#define LCD_2LINE 0x08 -#define LCD_1LINE 0x00 -#define LCD_5x10DOTS 0x04 -#define LCD_5x8DOTS 0x00 - -class LiquidCrystal : public Print { -public: - LiquidCrystal(uint8_t rs, uint8_t enable, - uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, - uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7); - LiquidCrystal(uint8_t rs, uint8_t rw, uint8_t enable, - uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, - uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7); - LiquidCrystal(uint8_t rs, uint8_t rw, uint8_t enable, - uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3); - LiquidCrystal(uint8_t rs, uint8_t enable, - uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3); - - void init(uint8_t fourbitmode, uint8_t rs, uint8_t rw, uint8_t enable, - uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, - uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7); - - void begin(uint8_t cols, uint8_t rows, uint8_t charsize = LCD_5x8DOTS); - - void clear(); - void home(); - - void noDisplay(); - void display(); - void noBlink(); - void blink(); - void noCursor(); - void cursor(); - void scrollDisplayLeft(); - void scrollDisplayRight(); - void leftToRight(); - void rightToLeft(); - void autoscroll(); - void noAutoscroll(); - - void createChar(uint8_t, uint8_t[]); - void setCursor(uint8_t, uint8_t); - virtual size_t write(uint8_t); - void command(uint8_t); - - using Print::write; -private: - void send(uint8_t, uint8_t); - void write4bits(uint8_t); - void write8bits(uint8_t); - void pulseEnable(); - - uint8_t _rs_pin; // LOW: command. HIGH: character. - uint8_t _rw_pin; // LOW: write to LCD. HIGH: read from LCD. - uint8_t _enable_pin; // activated by a HIGH pulse. - uint8_t _data_pins[8]; - - uint8_t _displayfunction; - uint8_t _displaycontrol; - uint8_t _displaymode; - - uint8_t _initialized; - - uint8_t _numlines,_currline; -}; - -#endif diff --git a/libraries/LogicStart_MegaWing/circuit/PSL_Papilio_One_500K.xise b/libraries/LogicStart_MegaWing/circuit/PSL_Papilio_One_500K.xise index cb5a3be..661ece6 100644 --- a/libraries/LogicStart_MegaWing/circuit/PSL_Papilio_One_500K.xise +++ b/libraries/LogicStart_MegaWing/circuit/PSL_Papilio_One_500K.xise @@ -18,26 +18,32 @@ + + + + + + diff --git a/libraries/PFlash/PFlash.cpp b/libraries/PFlash/PFlash.cpp new file mode 100644 index 0000000..2893cfc --- /dev/null +++ b/libraries/PFlash/PFlash.cpp @@ -0,0 +1,120 @@ +/* + * PFlash.cpp - library for SPI Flash memory on Papilio Pro + * + * by theFloe +*/ + +#include +#include "PFlash.h" + + +SPIClass FLASH(1); + + +PFLASH::PFLASH() { + +} + + + +void PFLASH::begin() { + pinMode(SPI_FLASH_SEL_PIN, OUTPUT); + digitalWrite(SPI_FLASH_SEL_PIN, HIGH); + + FLASH.begin(WishboneSlot(4)); + FLASH.setDataMode(SPI_MODE2); +} + + + +uint16_t PFLASH::rdid() +{ + digitalWrite(SPI_FLASH_SEL_PIN, LOW); + FLASH.transfer(FLASH_RDID); // RDID + unsigned int ret = FLASH.transfer16(0x0000); + digitalWrite(SPI_FLASH_SEL_PIN, HIGH); + return ret; +} + +uint8_t PFLASH::read(uint16_t addr) +{ + digitalWrite(SPI_FLASH_SEL_PIN, LOW); + FLASH.transfer(FLASH_READ); // READ + FLASH.transfer24(FLASHSTART+addr); + byte ret = FLASH.transfer(0x00); + digitalWrite(SPI_FLASH_SEL_PIN, HIGH); + return ret; +} + +void PFLASH::readBlock(uint16_t addr, uint8_t *data, uint16_t size) +{ + digitalWrite(SPI_FLASH_SEL_PIN, LOW); + FLASH.transfer(FLASH_READ); // READ + FLASH.transfer24(FLASHSTART+addr); + for (uint16_t i=0; i FLASHSIZE) + return; + + digitalWrite(SPI_FLASH_SEL_PIN, LOW); + FLASH.transfer(FLASH_WREN); // WRREN + digitalWrite(SPI_FLASH_SEL_PIN, HIGH); + digitalWrite(SPI_FLASH_SEL_PIN, LOW); + FLASH.transfer(FLASH_WRITE); // WRITE + FLASH.transfer24(FLASHSTART+addr); + FLASH.transfer(data); + digitalWrite(SPI_FLASH_SEL_PIN, HIGH); + + while (status() & 0x01) + delay(1); +} + +void PFLASH::writeBlock(uint16_t addr, uint8_t *data, uint8_t size) +{ + if (addr+size > FLASHSIZE) + return; + + digitalWrite(SPI_FLASH_SEL_PIN, LOW); + FLASH.transfer(FLASH_WREN); // WRREN + digitalWrite(SPI_FLASH_SEL_PIN, HIGH); + digitalWrite(SPI_FLASH_SEL_PIN, LOW); + FLASH.transfer(FLASH_WRITE); // WRITE + FLASH.transfer24(FLASHSTART+addr); + for (uint8_t i=0; i +*/ + +#ifndef PFLASH_H +#define PFLASH_H + +#include // relies on arduino SPI library + + + +#define FLASHSTART 0x7FF000 +#define FLASHSIZE 0x000FFF +#define FLASHSECTOR 0x7FF + +#define FLASH_RDID 0x9F +#define FLASH_READ 0x03 +#define FLASH_RDSR 0x05 +#define FLASH_WREN 0x06 +#define FLASH_WRITE 0x02 +#define FLASH_SERASE 0x20 + +class PFLASH +{ + private: + + + public: + PFLASH(); // default to type 0 + + + void begin(); + uint16_t rdid(); + uint8_t read(uint16_t addr); + void readBlock(uint16_t addr, uint8_t *data, uint16_t size); + uint8_t status(); + void write(uint16_t addr, uint8_t data); + void writeBlock(uint16_t addr, uint8_t *data, uint8_t size); + void erase(); + +}; + +#endif // PFLASH_H diff --git a/libraries/AVR_Wishbone_Bridge/Chip_Designer.xise b/libraries/Robot_Control_Library/Chip_Designer.xise similarity index 83% rename from libraries/AVR_Wishbone_Bridge/Chip_Designer.xise rename to libraries/Robot_Control_Library/Chip_Designer.xise index da88908..8e7c538 100644 --- a/libraries/AVR_Wishbone_Bridge/Chip_Designer.xise +++ b/libraries/Robot_Control_Library/Chip_Designer.xise @@ -9,18 +9,23 @@ - + - + - + - + + + + + + @@ -209,9 +214,57 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -257,6 +310,11 @@ + + + + + @@ -270,6 +328,23 @@ + + + + + + + + + + + + + + + + + @@ -369,11 +444,108 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -397,6 +569,14 @@ + + + + + + + + @@ -439,6 +619,11 @@ + + + + + @@ -459,6 +644,11 @@ + + + + + @@ -469,11 +659,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -497,6 +717,11 @@ + + + + + @@ -522,11 +747,6 @@ - - - - - @@ -547,6 +767,11 @@ + + + + + @@ -562,6 +787,16 @@ + + + + + + + + + + @@ -572,15 +807,11 @@ - - - - - + @@ -706,7 +937,7 @@ - + @@ -779,7 +1010,7 @@ - + @@ -845,8 +1076,8 @@ - - + + @@ -865,7 +1096,7 @@ - + @@ -920,7 +1151,7 @@ - + diff --git a/libraries/AVR_Wishbone_Bridge/Chip_Designer/Default.wcfg b/libraries/Robot_Control_Library/Chip_Designer/Default.wcfg similarity index 75% rename from libraries/AVR_Wishbone_Bridge/Chip_Designer/Default.wcfg rename to libraries/Robot_Control_Library/Chip_Designer/Default.wcfg index 7cb1842..c5b9d15 100644 --- a/libraries/AVR_Wishbone_Bridge/Chip_Designer/Default.wcfg +++ b/libraries/Robot_Control_Library/Chip_Designer/Default.wcfg @@ -3,7 +3,7 @@ - + @@ -11,10 +11,11 @@ + - + Wishbone Bus label @@ -86,30 +87,6 @@ Your Design Registers label - - register0_in[31:0] - register0_in[31:0] - - - register0_out[31:0] - register0_out[31:0] - - - register1_in[31:0] - register1_in[31:0] - - - register1_out[31:0] - register1_out[31:0] - - - register2_in[31:0] - register2_in[31:0] - - - register2_out[31:0] - register2_out[31:0] - Your Design External Pins @@ -129,4 +106,19 @@ leds[3:0] + + register_in_array[0:2] + register_in_array[0:2] + HEXRADIX + + + register_out_array[0:2] + register_out_array[0:2] + HEXRADIX + + + register_count + register_count + HEXRADIX + diff --git a/libraries/Robot_Control_Library/Chip_Designer/Edit_Your_Chip_Design.sch b/libraries/Robot_Control_Library/Chip_Designer/Edit_Your_Chip_Design.sch new file mode 100644 index 0000000..26d4825 --- /dev/null +++ b/libraries/Robot_Control_Library/Chip_Designer/Edit_Your_Chip_Design.sch @@ -0,0 +1,116 @@ + + + + + + + + + + 2015-4-15T16:43:24 + + + + + + + + + + + + 2015-4-15T16:45:21 + + + + + + + + + + + + + + + + + 2015-4-16T16:21:22 + + + + + + + + 2015-4-16T16:33:41 + + + + + + + + + + 2015-4-16T16:33:52 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/libraries/AVR_Wishbone_Bridge/Chip_Designer/Papilio_DUO_LX9.ut b/libraries/Robot_Control_Library/Chip_Designer/Papilio_DUO_LX9.ut similarity index 100% rename from libraries/AVR_Wishbone_Bridge/Chip_Designer/Papilio_DUO_LX9.ut rename to libraries/Robot_Control_Library/Chip_Designer/Papilio_DUO_LX9.ut diff --git a/libraries/AVR_Wishbone_Bridge/Chip_Designer/Simulate_Your_Chip_Design.vhd b/libraries/Robot_Control_Library/Chip_Designer/Simulate_Your_Chip_Design.vhd similarity index 92% rename from libraries/AVR_Wishbone_Bridge/Chip_Designer/Simulate_Your_Chip_Design.vhd rename to libraries/Robot_Control_Library/Chip_Designer/Simulate_Your_Chip_Design.vhd index b6fabaf..793cbe6 100644 --- a/libraries/AVR_Wishbone_Bridge/Chip_Designer/Simulate_Your_Chip_Design.vhd +++ b/libraries/Robot_Control_Library/Chip_Designer/Simulate_Your_Chip_Design.vhd @@ -3,6 +3,9 @@ use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; use ieee.numeric_std.all; +library DesignLab; +use DesignLab.ALL; + entity Simulate_Your_CCL_Design is end entity; @@ -14,10 +17,10 @@ architecture sim of Simulate_Your_CCL_Design is signal clk: std_logic := '1'; signal rst: std_logic := '0'; - COMPONENT AVR_Wishbone_Bridge + COMPONENT Robot_Control_Library PORT( - wishbone_in : IN std_logic_vector(61 downto 0); - wishbone_out : OUT std_logic_vector(33 downto 0); + wishbone_in : IN std_logic_vector(100 downto 0); + wishbone_out : OUT std_logic_vector(100 downto 0); --Put your custom external connections here buttons : IN std_logic_vector(3 downto 0); @@ -33,8 +36,8 @@ architecture sim of Simulate_Your_CCL_Design is signal wb_stb_i: std_logic := '0'; signal wb_ack_o: std_logic; - signal wb_in: std_logic_vector(61 downto 0); - signal wb_out: std_logic_vector(33 downto 0); + signal wb_in: std_logic_vector(100 downto 0); + signal wb_out: std_logic_vector(100 downto 0); signal wb_dat_o_dly: std_logic_vector(31 downto 0); @@ -61,7 +64,7 @@ begin wait; end process; - uut: AVR_Wishbone_Bridge PORT MAP( + uut: Robot_Control_Library PORT MAP( wishbone_in => wb_in, wishbone_out => wb_out, --Define your external connections here diff --git a/libraries/Robot_Control_Library/PWMGenerator.vhd b/libraries/Robot_Control_Library/PWMGenerator.vhd new file mode 100644 index 0000000..cf63ca9 --- /dev/null +++ b/libraries/Robot_Control_Library/PWMGenerator.vhd @@ -0,0 +1,121 @@ +library IEEE; +use IEEE.STD_LOGIC_1164.ALL; +use IEEE.STD_LOGIC_ARITH.ALL; +use IEEE.STD_LOGIC_UNSIGNED.ALL; + +-- CLK decides frequency of PWM output. +-- freq = CLK/(2^PWM_WIDTH) +entity PWMGenerator is + generic ( + C_PWM_WIDTH : integer := 8; + C_PWM_TYPE : integer := 1 -- 2 phase, 1 phase or Enable chopping + ); + port ( + Clk : in std_logic; +-- Dir : in std_logic; + Duty : in std_logic_vector(C_PWM_WIDTH-1 downto 0) := (others => '0'); + Out1 : out std_logic; + Out2 : out std_logic + ); +end PWMGenerator; + +architecture Behavioral of PWMGenerator is + + signal duty_cnt : unsigned(C_PWM_WIDTH-2 downto 0) := (others => '0'); + signal duty_i : unsigned(C_PWM_WIDTH-1 downto 0) := (others => '0'); + signal pwm_i : std_logic := '0'; +begin + duty_i <= unsigned(Duty); + + Process(CLK) + begin + if Clk='1' and Clk'event then + duty_cnt <= duty_cnt + 1; + if duty_i >= 0 then + if duty_cnt < CONV_UNSIGNED(duty_i(C_PWM_WIDTH-2 downto 0),C_PWM_WIDTH-1) then + pwm_i <= '1'; + else + pwm_i <= '0'; + end if; + else + if duty_cnt < CONV_UNSIGNED(duty_i(C_PWM_WIDTH-2 downto 0),C_PWM_WIDTH-1) then + pwm_i <= '0'; + else + pwm_i <= '1'; + end if; + end if; + end if; + end Process; + +G_2_PHASE_CHOPPING : if C_PWM_TYPE=0 generate + Process( CLK ) + --variable duty_cnt : signed(C_PWM_WIDTH-1 downto 0) := (others => '0'); + --variable pwm_i : std_logic; + begin + if Clk='1' and Clk'event then +-- CONV_UNSIGNED(, ) +-- if duty_cnt < Duty then +-- pwm_i := '1'; +-- else +-- pwm_i := '0'; +-- end if; + --if dir='1' then + if duty_i >= 0 then + Out1 <= pwm_i; + Out2 <= '0'; + else + Out1 <= '0'; + Out2 <= pwm_i; + end if; + --duty_cnt := duty_cnt + 1; + end if; + end Process; +end generate G_2_PHASE_CHOPPING; + +G_1_PHASE_CHOPPING : if C_PWM_TYPE=1 generate + Process( Clk ) + --variable duty_cnt : unsigned(C_PWM_WIDTH-1 downto 0) := (others => '0'); + --variable pwm_i : std_logic; + begin + if Clk='1' and Clk'event then +-- if duty_cnt < CONV_UNSIGNED(Duty,C_PWM_WIDTH) then +-- pwm_i := '1'; +-- else +-- pwm_i := '0'; +-- end if; + --if Dir='1' then + if duty_i >= 0 then + Out1 <= pwm_i; + Out2 <= '0'; + else + Out1 <= not pwm_i; + Out2 <= '1'; + end if; + --duty_cnt := duty_cnt + 1; + end if; + end Process; +end generate G_1_PHASE_CHOPPING; + +G_ENABLE_CHOPPING : if C_PWM_TYPE=2 generate + Process( Clk ) + --variable duty_cnt : unsigned(C_PWM_WIDTH-1 downto 0) := (others => '0'); + begin + if Clk='1' and Clk'event then +-- if duty_cnt < CONV_UNSIGNED(Duty,C_PWM_WIDTH) then +-- Out1 <= '1'; +-- else +-- Out1 <= '0'; +-- end if; +-- duty_cnt := duty_cnt + 1; + Out1 <= pwm_i; + if duty_i >= 0 then + Out2 <= '0'; + else + Out2 <= '1'; + end if; + end if; + end Process; +end generate G_ENABLE_CHOPPING; + + +end Behavioral; diff --git a/libraries/Robot_Control_Library/RCL_PWM_x48.sym b/libraries/Robot_Control_Library/RCL_PWM_x48.sym new file mode 100644 index 0000000..f22fc1a --- /dev/null +++ b/libraries/Robot_Control_Library/RCL_PWM_x48.sym @@ -0,0 +1,17 @@ + + + BLOCK + 2015-4-16T16:21:22 + + + + + + + + + + + + + diff --git a/libraries/Robot_Control_Library/RCL_PWM_x48.vhd b/libraries/Robot_Control_Library/RCL_PWM_x48.vhd new file mode 100644 index 0000000..1b4611d --- /dev/null +++ b/libraries/Robot_Control_Library/RCL_PWM_x48.vhd @@ -0,0 +1,113 @@ +-------------------------------------------------------------------------------- +-- Copyright (c) 1995-2013 Xilinx, Inc. All rights reserved. +-------------------------------------------------------------------------------- +-- ____ ____ +-- / /\/ / +-- /___/ \ / Vendor: Xilinx +-- \ \ \/ Version : 14.7 +-- \ \ Application : +-- / / Filename : xil_12112_30 +-- /___/ /\ Timestamp : 09/23/2014 15:24:59 +-- \ \ / \ +-- \___\/\___\ +-- +--Command: +--Design Name: +-- + +library ieee; +use ieee.std_logic_1164.ALL; +use ieee.numeric_std.ALL; +library UNISIM; +use UNISIM.Vcomponents.ALL; + +--library work; +--use work.Wishbone_to_Registers_n_package.all; + +library DesignLab; +use DesignLab.ALL; +use DesignLab.Wishbone_to_Registers_n_package.all; + +entity RCL_PWM_x48 is + generic ( + pwm_count : integer := 48; + pwm_width : integer := 9; + register_count : integer := 48 --Each PWM has 1 register + ); + port ( wishbone_in : in std_logic_vector (100 downto 0); + wishbone_out : out std_logic_vector (100 downto 0); + + --Put your external connections here + PWM : out std_logic_vector(pwm_count-1 downto 0) +-- DIR : out std_logic_vector(pwm_count-1 downto 0); +-- PWM_clk : in std_logic + ); +end RCL_PWM_x48; + +architecture BEHAVIORAL of RCL_PWM_x48 is + + COMPONENT Wishbone_to_Registers_n + generic ( register_count : integer := register_count ); + PORT( + wishbone_in : IN std_logic_vector(100 downto 0); + wishbone_out : OUT std_logic_vector(100 downto 0); + clk_96Mhz : out std_logic; + register_in : in register_type(0 to register_count-1); + register_out : out register_type(0 to register_count-1) + ); + END COMPONENT; + + COMPONENT PWMGenerator + generic ( + C_PWM_WIDTH : integer := pwm_width; + C_PWM_TYPE : integer := 1 -- 2 phase, 1 phase or Enable chopping + ); + PORT( + Clk : in std_logic; + Duty : in std_logic_vector(C_PWM_WIDTH-1 downto 0); + Out1 : out std_logic; + Out2 : out std_logic + ); + END COMPONENT; + + signal register_in_array : register_type(0 to register_count-1); + signal register_out_array : register_type(0 to register_count-1); + signal DIR : std_logic_vector(pwm_count-1 downto 0); + + signal clk_96Mhz : std_logic; + + --Put your unique register names here + +begin + --Put your code here + + GEN_PWMS: + for j in 0 to pwm_count-1 generate + Inst_pwm_inst: PWMGenerator + GENERIC MAP( + C_PWM_WIDTH => pwm_width, + C_PWM_TYPE => 1 + ) + PORT MAP( + CLK => clk_96Mhz, + Duty => register_out_array(j)(pwm_width-1 downto 0), + Out1 => PWM(j), + Out2 => DIR(j) + ); + --register_in_array(j) <= register_out_array(j); --So we can read back what was written to the register. + end generate GEN_PWMS; + + --Do not touch + Inst_Wishbone_to_Registers_n: Wishbone_to_Registers_n + generic map (register_count => register_count) + PORT MAP( + wishbone_in => wishbone_in, + wishbone_out => wishbone_out, + clk_96Mhz => clk_96Mhz, + register_in => register_in_array, + register_out => register_out_array + ); + +end BEHAVIORAL; + + diff --git a/libraries/Robot_Control_Library/RCL_Quadrature_Decoder_x8.sym b/libraries/Robot_Control_Library/RCL_Quadrature_Decoder_x8.sym new file mode 100644 index 0000000..238bd3c --- /dev/null +++ b/libraries/Robot_Control_Library/RCL_Quadrature_Decoder_x8.sym @@ -0,0 +1,25 @@ + + + BLOCK + 2015-4-15T16:43:24 + + + + + + + + + + + + + + + + + + + + + diff --git a/libraries/Robot_Control_Library/RCL_Quadrature_Decoder_x8.vhd b/libraries/Robot_Control_Library/RCL_Quadrature_Decoder_x8.vhd new file mode 100644 index 0000000..5d98a7d --- /dev/null +++ b/libraries/Robot_Control_Library/RCL_Quadrature_Decoder_x8.vhd @@ -0,0 +1,120 @@ +-------------------------------------------------------------------------------- +-- Copyright (c) 1995-2013 Xilinx, Inc. All rights reserved. +-------------------------------------------------------------------------------- +-- ____ ____ +-- / /\/ / +-- /___/ \ / Vendor: Xilinx +-- \ \ \/ Version : 14.7 +-- \ \ Application : +-- / / Filename : xil_12112_30 +-- /___/ /\ Timestamp : 09/23/2014 15:24:59 +-- \ \ / \ +-- \___\/\___\ +-- +--Command: +--Design Name: +-- + +library ieee; +use ieee.std_logic_1164.ALL; +use ieee.numeric_std.ALL; +library UNISIM; +use UNISIM.Vcomponents.ALL; + +--library work; +--use work.Wishbone_to_Registers_n_package.all; + +library DesignLab; +use DesignLab.ALL; +use DesignLab.Wishbone_to_Registers_n_package.all; + +entity RCL_Quadrature_Decoder_x8 is + generic ( + quad_count : integer := 8; + register_count : integer := 32 --Each Quad has 4 registers + ); + port ( wishbone_in : in std_logic_vector (100 downto 0); + wishbone_out : out std_logic_vector (100 downto 0); + + --Put your external connections here + A : in std_logic_vector(quad_count-1 downto 0); + B : in std_logic_vector(quad_count-1 downto 0); + I : in std_logic_vector(quad_count-1 downto 0) + ); +end RCL_Quadrature_Decoder_x8; + +architecture BEHAVIORAL of RCL_Quadrature_Decoder_x8 is + + COMPONENT Wishbone_to_Registers_n + generic ( register_count : integer := register_count ); + PORT( + wishbone_in : IN std_logic_vector(100 downto 0); + wishbone_out : OUT std_logic_vector(100 downto 0); + clk_96Mhz : out std_logic; + register_in : in register_type(0 to register_count-1); + register_out : out register_type(0 to register_count-1) + ); + END COMPONENT; + + COMPONENT quad_inst + PORT( + CLK : IN std_logic; + Reset : IN std_logic; + A_CLK : IN std_logic; + B_CLK : IN std_logic; + I_CLK : IN std_logic; + PULSE_COUNT : OUT std_logic_vector(31 downto 0); + REV_COUNT : OUT std_logic_vector(31 downto 0); + TSPEED : OUT std_logic_vector(31 downto 0); + TACCEL : OUT std_logic_vector(31 downto 0) + ); + END COMPONENT; + + signal register_in_array : register_type(0 to register_count-1); + signal register_out_array : register_type(0 to register_count-1); + + signal PULSE_COUNT : register_type(0 to quad_count-1); + signal REV_COUNT : register_type(0 to quad_count-1); + signal TSPEED : register_type(0 to quad_count-1); + signal TACCEL : register_type(0 to quad_count-1); + + signal clk_96Mhz : std_logic; + + --Put your unique register names here + +begin + --Put your code here + + GEN_QUADS: + for j in 0 to quad_count-1 generate + Inst_quad_inst: quad_inst PORT MAP( + CLK => clk_96Mhz, + Reset => '0', + A_CLK => A(j), + B_CLK => B(j), + I_CLK => I(j), + PULSE_COUNT => PULSE_COUNT(j), + REV_COUNT => REV_COUNT(j), + TSPEED => TSPEED(j), + TACCEL => TACCEL(j) + ); + register_in_array(j*4) <= PULSE_COUNT(j); + register_in_array(j*4+1) <= REV_COUNT(j); + register_in_array(j*4+2) <= TSPEED(j); + register_in_array(j*4+3) <= TACCEL(j); + end generate GEN_QUADS; + + --Do not touch + Inst_Wishbone_to_Registers_n: Wishbone_to_Registers_n + generic map (register_count => register_count) + PORT MAP( + wishbone_in => wishbone_in, + wishbone_out => wishbone_out, + clk_96Mhz => clk_96Mhz, + register_in => register_in_array, + register_out => register_out_array + ); + +end BEHAVIORAL; + + diff --git a/libraries/Robot_Control_Library/Robot_Control_Library.cpp b/libraries/Robot_Control_Library/Robot_Control_Library.cpp new file mode 100644 index 0000000..293119b --- /dev/null +++ b/libraries/Robot_Control_Library/Robot_Control_Library.cpp @@ -0,0 +1,78 @@ +/* + + Robot_Control_Library - Summarize your library here. + + Describe your library here. + + License: GNU General Public License V3 + + (C) Copyright (Your Name Here) + + For more help on how to make an Arduino style library: + http://arduino.cc/en/Hacking/LibraryTutorial + + */ + +#include "Arduino.h" +#include "Robot_Control_Library.h" + +Robot_Control_Library::Robot_Control_Library() +{ + +} + +//Quad stuff +void Robot_Control_Library::setupQuad(unsigned int wishboneSlotQuad) +{ + this->wishboneSlotQuad = wishboneSlotQuad; +} + +int Robot_Control_Library::getPulseCount(unsigned int i){ + return REGISTER(IO_SLOT(wishboneSlotQuad),i*4); +} + +int Robot_Control_Library::getRevCount(unsigned int i){ + return REGISTER(IO_SLOT(wishboneSlotQuad),i*4+1); +} + +int Robot_Control_Library::getSpeed(unsigned int i){ + return REGISTER(IO_SLOT(wishboneSlotQuad),i*4+2); +} + +float Robot_Control_Library::getSpeedRad(unsigned int i){ + float data = (float)getSpeed(i); + //time for one A pulse: 1/freq * clk tick per A pulse = time for per pulse + //xil_printf("lujer1; %d\n\r",(int)data); + data /= 50000000.0; + //xil_printf("lujer1; %d\n\r",(int)(data*1000000.0)); + //xil_printf("piting: %d\n\r",(int)((((2.0*3.14159265)/512.0))*10000)); + float tmp = (2.0*3.14159265)/512.0; + //xil_printf("piting: %d\n\r",(int)(tmp*10000)); + if(data != 0) + data = tmp/data; + else + data = 0; + //xil_printf("float: %d\n\r",(int)data); + return data; +} + +int Robot_Control_Library::getAccel(unsigned int i){ + return REGISTER(IO_SLOT(wishboneSlotQuad),i*4+3); +} + +//PWM stuff +void Robot_Control_Library::setupPWM(unsigned int wishboneSlotPWM) +{ + this->wishboneSlotPWM = wishboneSlotPWM; +} + +void Robot_Control_Library::setPWMDuty(unsigned int i,int speed) +{ + REGISTER(IO_SLOT(wishboneSlotPWM),i) = speed; +} + +int Robot_Control_Library::getPWMDuty(unsigned int i){ + // Serial.print(wishboneSlotPWM); + // Serial.print(" "); + return REGISTER(IO_SLOT(wishboneSlotPWM),i); +} \ No newline at end of file diff --git a/libraries/Robot_Control_Library/Robot_Control_Library.h b/libraries/Robot_Control_Library/Robot_Control_Library.h new file mode 100644 index 0000000..56f81d9 --- /dev/null +++ b/libraries/Robot_Control_Library/Robot_Control_Library.h @@ -0,0 +1,45 @@ +/* + + Robot_Control_Library - Summarize your library here. + + Describe your library here. + + License: GNU General Public License V3 + + (C) Copyright (Your Name Here) + + For more help on how to make an Arduino style library: + http://arduino.cc/en/Hacking/LibraryTutorial + + */ + +#ifndef __Robot_Control_Library_H__ +#define __Robot_Control_Library_H__ + +#include +#include +#include +#include "Arduino.h" + +class Robot_Control_Library +{ + public: + Robot_Control_Library(); + void setupQuad(unsigned int wishboneSlotQuad); + int getPulseCount(unsigned int i); + int getRevCount(unsigned int i); + int getSpeed(unsigned int i); + float getSpeedRad(unsigned int i); + int getAccel(unsigned int i); + + //PWM + void setupPWM(unsigned int wishboneSlotPWM); + void setPWMDuty(unsigned int i,int speed); + int getPWMDuty(unsigned int i); + + private: + int wishboneSlotQuad; + int wishboneSlotPWM; +}; + +#endif diff --git a/libraries/AVR_Wishbone_Bridge/Chip_Designer/Wishbone_to_Registers.vhd b/libraries/Robot_Control_Library/Wishbone_to_Registers_n.vhd similarity index 59% rename from libraries/AVR_Wishbone_Bridge/Chip_Designer/Wishbone_to_Registers.vhd rename to libraries/Robot_Control_Library/Wishbone_to_Registers_n.vhd index 92a8bdb..522b54f 100644 --- a/libraries/AVR_Wishbone_Bridge/Chip_Designer/Wishbone_to_Registers.vhd +++ b/libraries/Robot_Control_Library/Wishbone_to_Registers_n.vhd @@ -19,35 +19,46 @@ -- ---------------------------------------------------------------------------------- -- This example uses asynchronous outputs. +library ieee; +use ieee.std_logic_1164.all; +package Wishbone_to_Registers_n_package is + type register_type is array(natural range <>) of std_logic_vector(31 downto 0); +end package; library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; use ieee.numeric_std.all; -entity Wishbone_to_Registers is +--library work; +--use work.Wishbone_to_Registers_n_package.all; + +library DesignLab; +use DesignLab.Wishbone_to_Registers_n_package.all; +use DesignLab.ALL; + +entity Wishbone_to_Registers_n is + generic ( register_count : integer := 3 ); port ( - wishbone_in : in std_logic_vector(61 downto 0); - wishbone_out : out std_logic_vector(33 downto 0); + wishbone_in : in std_logic_vector(100 downto 0); + wishbone_out : out std_logic_vector(100 downto 0); + + clk_96Mhz : out std_logic; --Registers - register0_in : in std_logic_vector(31 downto 0); -- Register 0 (32 bits) - register0_out : out std_logic_vector(31 downto 0); -- Register 0 (32 bits) - register1_in : in std_logic_vector(31 downto 0); -- Register 0 (32 bits) - register1_out : out std_logic_vector(31 downto 0); -- Register 0 (32 bits) - register2_in : in std_logic_vector(31 downto 0); -- Register 0 (32 bits) - register2_out : out std_logic_vector(31 downto 0) -- Register 0 (32 bits) + register_in : in register_type(0 to register_count-1); + register_out : out register_type(0 to register_count-1) ); -end entity Wishbone_to_Registers; +end entity Wishbone_to_Registers_n; -architecture rtl of Wishbone_to_Registers is +architecture rtl of Wishbone_to_Registers_n is --Define your registers here --- signal register0: std_logic_vector(31 downto 0); -- Register 0 (32 bits) --- signal register1: std_logic_vector(31 downto 0); -- Register 1 (32 bits) --- signal register2: std_logic_vector(7 downto 0); -- Register 2 (8 bits) +-- type register_type is array(0 to register_count) of std_logic_vector(31 downto 0); +-- signal register_in_array : register_type; +-- signal register_out_array : register_type; --Wishbone signals - Don't touch. signal wb_clk_i: std_logic; -- Wishbone clock @@ -76,6 +87,8 @@ begin wishbone_out(0) <= wb_inta_o; -- End unpacking Wishbone signals + clk_96Mhz <= wb_clk_i; + -- Asynchronous acknowledge wb_ack_o <= '1' when wb_cyc_i='1' and wb_stb_i='1' else '0'; @@ -83,23 +96,16 @@ begin -- Multiplex the data output (asynchronous) --This is for a Wishbone read - process(register0_in,register1_in,register2_in, wb_adr_i) + process(wb_adr_i) begin -- Multiplex the read depending on the address. Use only the 2 lowest bits of addr - case wb_adr_i(3 downto 2) is - when "00" => - wb_dat_o <= register0_in; -- Output register0 - when "01" => - wb_dat_o <= register1_in; -- Output register1 - when "10" => - wb_dat_o <= register2_in; -- Output register1 - --wb_dat_o(31 downto 0) <= (others => '0'); -- We put all upper 24 bits to zero - --wb_dat_o(7 downto 0) <= register2; -- since register2 only has 8 bits - when others => - wb_dat_o <= (others => 'X'); -- Return undefined for all other addresses - end case; + for i in 0 to register_count-1 loop + if wb_adr_i(9 downto 2) = i then + wb_dat_o <= register_in(i); + end if; + end loop; end process; @@ -113,26 +119,20 @@ begin if wb_rst_i='1' then -- Reset request, put register1 and register2 with zeroes, -- put register 3 with binary 10101010b - --- register0 <= (others => '0'); --- register1 <= (others => '0'); --- register2 <= "10101010"; + for i in 0 to register_count-1 loop + register_out(i) <= (others => '0'); + end loop; else -- Not reset -- Check if someone is writing if wb_cyc_i='1' and wb_stb_i='1' and wb_we_i='1' then -- Yes, it's a write. See for which register based on address - case wb_adr_i(3 downto 2) is - when "00" => - register0_out <= wb_dat_i; -- Set register0 - when "01" => - register1_out <= wb_dat_i; -- Set register1 - when "10" => - register2_out <= wb_dat_i; -- Only lower 8 bits for register2 - when others => - null; -- Nothing to do for other addresses - end case; + for i in 0 to register_count-1 loop + if wb_adr_i(9 downto 2) = i then + register_out(i) <= wb_dat_i; + end if; + end loop; end if; diff --git a/WiiChuck/circuit/500K/Papilio_One_500K.ut b/libraries/Robot_Control_Library/circuit/250K/Papilio_One_250K.ut similarity index 100% rename from WiiChuck/circuit/500K/Papilio_One_500K.ut rename to libraries/Robot_Control_Library/circuit/250K/Papilio_One_250K.ut diff --git a/libraries/Robot_Control_Library/circuit/250K/Utility.ut b/libraries/Robot_Control_Library/circuit/250K/Utility.ut new file mode 100644 index 0000000..1c9e99e --- /dev/null +++ b/libraries/Robot_Control_Library/circuit/250K/Utility.ut @@ -0,0 +1,22 @@ +-w +-g DebugBitstream:No +-g Binary:no +-g CRC:Enable +-g ConfigRate:1 +-g ProgPin:PullUp +-g DonePin:PullUp +-g TckPin:PullUp +-g TdiPin:PullUp +-g TdoPin:PullUp +-g TmsPin:PullUp +-g UnusedPin:PullDown +-g UserID:0xFFFFFFFF +-g DCMShutdown:Disable +-g StartUpClk:CClk +-g DONE_cycle:4 +-g GTS_cycle:5 +-g GWE_cycle:6 +-g LCK_cycle:NoWait +-g Security:None +-g DonePipe:Yes +-g DriveDone:No diff --git a/libraries/Robot_Control_Library/circuit/250K/papilio_one_250k.bit b/libraries/Robot_Control_Library/circuit/250K/papilio_one_250k.bit new file mode 100644 index 0000000..879e8ea Binary files /dev/null and b/libraries/Robot_Control_Library/circuit/250K/papilio_one_250k.bit differ diff --git a/libraries/Robot_Control_Library/circuit/500K/Papilio_One_500K.ut b/libraries/Robot_Control_Library/circuit/500K/Papilio_One_500K.ut new file mode 100644 index 0000000..1c9e99e --- /dev/null +++ b/libraries/Robot_Control_Library/circuit/500K/Papilio_One_500K.ut @@ -0,0 +1,22 @@ +-w +-g DebugBitstream:No +-g Binary:no +-g CRC:Enable +-g ConfigRate:1 +-g ProgPin:PullUp +-g DonePin:PullUp +-g TckPin:PullUp +-g TdiPin:PullUp +-g TdoPin:PullUp +-g TmsPin:PullUp +-g UnusedPin:PullDown +-g UserID:0xFFFFFFFF +-g DCMShutdown:Disable +-g StartUpClk:CClk +-g DONE_cycle:4 +-g GTS_cycle:5 +-g GWE_cycle:6 +-g LCK_cycle:NoWait +-g Security:None +-g DonePipe:Yes +-g DriveDone:No diff --git a/libraries/Robot_Control_Library/circuit/500K/papilio_one_500k.bit b/libraries/Robot_Control_Library/circuit/500K/papilio_one_500k.bit new file mode 100644 index 0000000..7c1da42 Binary files /dev/null and b/libraries/Robot_Control_Library/circuit/500K/papilio_one_500k.bit differ diff --git a/libraries/AVR_Wishbone_Bridge/circuit/DUO_LX9/Papilio_DUO_LX9.ut b/libraries/Robot_Control_Library/circuit/DUO_LX9/Papilio_DUO_LX9.ut similarity index 100% rename from libraries/AVR_Wishbone_Bridge/circuit/DUO_LX9/Papilio_DUO_LX9.ut rename to libraries/Robot_Control_Library/circuit/DUO_LX9/Papilio_DUO_LX9.ut diff --git a/libraries/Robot_Control_Library/circuit/DUO_LX9/papilio_duo_lx9.bit b/libraries/Robot_Control_Library/circuit/DUO_LX9/papilio_duo_lx9.bit new file mode 100644 index 0000000..8b6206b Binary files /dev/null and b/libraries/Robot_Control_Library/circuit/DUO_LX9/papilio_duo_lx9.bit differ diff --git a/libraries/Robot_Control_Library/circuit/LX9/Papilio_Pro.ut b/libraries/Robot_Control_Library/circuit/LX9/Papilio_Pro.ut new file mode 100644 index 0000000..d1824d0 --- /dev/null +++ b/libraries/Robot_Control_Library/circuit/LX9/Papilio_Pro.ut @@ -0,0 +1,30 @@ +-w +-g DebugBitstream:No +-g Binary:no +-g CRC:Enable +-g Reset_on_err:No +-g ConfigRate:2 +-g ProgPin:PullUp +-g TckPin:PullUp +-g TdiPin:PullUp +-g TdoPin:PullUp +-g TmsPin:PullUp +-g UnusedPin:PullDown +-g UserID:0xFFFFFFFF +-g ExtMasterCclk_en:No +-g SPI_buswidth:1 +-g TIMER_CFG:0xFFFF +-g multipin_wakeup:No +-g StartUpClk:CClk +-g DONE_cycle:4 +-g GTS_cycle:5 +-g GWE_cycle:6 +-g LCK_cycle:NoWait +-g Security:None +-g DonePipe:Yes +-g DriveDone:No +-g en_sw_gsr:No +-g drive_awake:No +-g sw_clk:Startupclk +-g sw_gwe_cycle:5 +-g sw_gts_cycle:4 diff --git a/libraries/Robot_Control_Library/circuit/LX9/papilio_pro.bit b/libraries/Robot_Control_Library/circuit/LX9/papilio_pro.bit new file mode 100644 index 0000000..8166605 Binary files /dev/null and b/libraries/Robot_Control_Library/circuit/LX9/papilio_pro.bit differ diff --git a/Gameduino/4.Demo/asteroids/circuit/PSL_Papilio_DUO_LX9.xise b/libraries/Robot_Control_Library/circuit/PSL_Papilio_DUO_LX9.xise similarity index 82% rename from Gameduino/4.Demo/asteroids/circuit/PSL_Papilio_DUO_LX9.xise rename to libraries/Robot_Control_Library/circuit/PSL_Papilio_DUO_LX9.xise index bb55bea..6088773 100644 --- a/Gameduino/4.Demo/asteroids/circuit/PSL_Papilio_DUO_LX9.xise +++ b/libraries/Robot_Control_Library/circuit/PSL_Papilio_DUO_LX9.xise @@ -9,12 +9,25 @@ - + - + + + + + + + + + + + + + + @@ -198,6 +211,60 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -256,6 +323,11 @@ + + + + + @@ -332,7 +404,7 @@ - + @@ -351,6 +423,11 @@ + + + + + @@ -360,12 +437,106 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + @@ -379,17 +550,25 @@ + + + + + + + + - + - + @@ -425,6 +604,11 @@ + + + + + @@ -445,6 +629,11 @@ + + + + + @@ -455,11 +644,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -508,11 +727,6 @@ - - - - - @@ -548,6 +762,16 @@ + + + + + + + + + + @@ -558,6 +782,22 @@ + + + + + + + + + + + + + + + + @@ -567,7 +807,7 @@ - + @@ -931,6 +1171,13 @@ + + + + + + + diff --git a/libraries/Robot_Control_Library/circuit/PSL_Papilio_One_250K.xise b/libraries/Robot_Control_Library/circuit/PSL_Papilio_One_250K.xise new file mode 100644 index 0000000..5a3a37a --- /dev/null +++ b/libraries/Robot_Control_Library/circuit/PSL_Papilio_One_250K.xise @@ -0,0 +1,1142 @@ + + + +
+ + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
diff --git a/libraries/Robot_Control_Library/circuit/PSL_Papilio_One_500K.xise b/libraries/Robot_Control_Library/circuit/PSL_Papilio_One_500K.xise new file mode 100644 index 0000000..3e03bfd --- /dev/null +++ b/libraries/Robot_Control_Library/circuit/PSL_Papilio_One_500K.xise @@ -0,0 +1,1150 @@ + + + +
+ + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
diff --git a/libraries/Robot_Control_Library/circuit/PSL_Papilio_Pro_LX9.xise b/libraries/Robot_Control_Library/circuit/PSL_Papilio_Pro_LX9.xise new file mode 100644 index 0000000..3722816 --- /dev/null +++ b/libraries/Robot_Control_Library/circuit/PSL_Papilio_Pro_LX9.xise @@ -0,0 +1,1183 @@ + + + +
+ + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
diff --git a/WiiChuck/circuit/Papilio_DUO_LX9.sch b/libraries/Robot_Control_Library/circuit/Papilio_DUO_LX9.sch similarity index 58% rename from WiiChuck/circuit/Papilio_DUO_LX9.sch rename to libraries/Robot_Control_Library/circuit/Papilio_DUO_LX9.sch index ae87def..4fd37b6 100644 --- a/WiiChuck/circuit/Papilio_DUO_LX9.sch +++ b/libraries/Robot_Control_Library/circuit/Papilio_DUO_LX9.sch @@ -9,16 +9,27 @@ + + - - - - - - - - + + + + + + + + + + + + + + + + + @@ -33,13 +44,6 @@ - - - - - - - @@ -69,32 +73,42 @@ + + + + + + + + + + - - - - - - + + + + + + + + + + + + + + - - - - - - - - @@ -138,10 +152,11 @@ - + + - 2014-10-31T16:12:30 + 2014-11-10T23:31:50 @@ -262,15 +277,6 @@ - - 2000-1-1T10:10:10 - - - - - - - 2015-2-12T19:27:37 @@ -317,17 +323,38 @@ - - 2015-4-8T22:40:35 - - - - - + + 2000-1-1T10:10:10 + + + + + + - - - + + 2015-5-7T20:40:40 + + + + + + + + 2015-5-7T20:40:40 + + + + + + + + + + + + + @@ -335,8 +362,8 @@ - - + + @@ -345,8 +372,8 @@ - - + + @@ -356,10 +383,22 @@ - + + + + + + + + + + + + + @@ -395,12 +434,12 @@ - - - - - - + + + + + + @@ -409,8 +448,8 @@ - - + + @@ -450,37 +489,32 @@ - - - + + + - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + - Version: 1.0 + + @@ -493,377 +527,396 @@ - - - Replace DUO_SW1 with a Pulldown if you want the ATmega32U4 chip to run when this circuit is loaded. + + + + + + + + + + + + + + Replace DUO_SW1 with a Pulldown if you want the ATmega32U4 chip to run when this circuit is loaded. - + - + - - - Replace DUO_SW1 with a Pullup if you want to disable the ATmega32U4 chip when this circuit is loaded. - - Papilio DUO Reset - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + Replace DUO_SW1 with a Pullup if you want to disable the ATmega32U4 chip when this circuit is loaded. + + Papilio DUO Reset + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + - - + - - + - - + - - + - - + - - + - - + - - + - - + - - + - - + - - + - - + - - - - - - - - - - - - - - - - - - - - - - - - - + - + - + - + - + - + - - - - - + - - + - - + - - + - - + - - + - - + - - + - - + - - + - - + - - + - - + - - + - - + - - + - - + - - + - - + - - + - - + - - + - - + - - + - - + - - + - - + - - + - - + - - + + + + + + + + + + + + + - - + + + + - - + + + + - - + + + + - - + + + + - - + + + + - - + + + + - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - \ No newline at end of file diff --git a/WiiChuck/circuit/Papilio_One_250K.sch b/libraries/Robot_Control_Library/circuit/Papilio_One_250K.sch similarity index 63% rename from WiiChuck/circuit/Papilio_One_250K.sch rename to libraries/Robot_Control_Library/circuit/Papilio_One_250K.sch index 7775743..023c685 100644 --- a/WiiChuck/circuit/Papilio_One_250K.sch +++ b/libraries/Robot_Control_Library/circuit/Papilio_One_250K.sch @@ -6,6 +6,38 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -54,23 +86,13 @@ - - - - - - - - - - - - - - - - - + + + + + + + @@ -119,11 +141,8 @@ - - - - 2014-10-31T16:12:30 + 2014-11-10T23:31:50 @@ -131,7 +150,7 @@ - 2014-11-10T23:27:39 + 2014-11-10T23:31:50 @@ -232,8 +251,28 @@ + + 2015-4-15T16:43:24 + + + + + + + + + + + + 2015-4-16T16:21:22 + + + + + + - 2014-11-10T23:27:39 + 2015-3-19T23:13:19 @@ -277,7 +316,7 @@ - + @@ -340,18 +379,18 @@ - - - - - - - - - - - - + + + + + + + + + + + + @@ -377,7 +416,19 @@ - + + + + + + + + + + + + + @@ -386,8 +437,8 @@ - - + + @@ -396,8 +447,8 @@ - - + + @@ -410,278 +461,389 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - Version: 1.0 - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/WiiChuck/circuit/Papilio_One_500K.sch b/libraries/Robot_Control_Library/circuit/Papilio_One_500K.sch similarity index 63% rename from WiiChuck/circuit/Papilio_One_500K.sch rename to libraries/Robot_Control_Library/circuit/Papilio_One_500K.sch index 3519a98..2ba8653 100644 --- a/WiiChuck/circuit/Papilio_One_500K.sch +++ b/libraries/Robot_Control_Library/circuit/Papilio_One_500K.sch @@ -6,6 +6,38 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -54,23 +86,13 @@ - - - - - - - - - - - - - - - - - + + + + + + + @@ -119,11 +141,8 @@ - - - - 2014-10-31T16:12:30 + 2014-11-10T23:31:50 @@ -131,7 +150,7 @@ - 2014-11-10T23:27:39 + 2014-11-10T23:31:50 @@ -232,8 +251,28 @@ + + 2015-4-15T16:43:24 + + + + + + + + + + + + 2015-4-16T16:21:22 + + + + + + - 2014-11-10T23:27:39 + 2015-3-19T23:13:19 @@ -277,7 +316,7 @@ - + @@ -340,18 +379,18 @@ - - - - - - - - - - - - + + + + + + + + + + + + @@ -377,7 +416,19 @@ - + + + + + + + + + + + + + @@ -386,8 +437,8 @@ - - + + @@ -396,8 +447,8 @@ - - + + @@ -410,278 +461,389 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - Version: 1.0 - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/WiiChuck/circuit/Papilio_Pro.sch b/libraries/Robot_Control_Library/circuit/Papilio_Pro.sch similarity index 63% rename from WiiChuck/circuit/Papilio_Pro.sch rename to libraries/Robot_Control_Library/circuit/Papilio_Pro.sch index 3804547..fea01dd 100644 --- a/WiiChuck/circuit/Papilio_Pro.sch +++ b/libraries/Robot_Control_Library/circuit/Papilio_Pro.sch @@ -6,6 +6,38 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -54,23 +86,13 @@ - - - - - - - - - - - - - - - - - + + + + + + + @@ -119,11 +141,8 @@ - - - - 2014-10-31T16:12:30 + 2014-11-10T23:31:50 @@ -131,7 +150,7 @@ - 2014-11-10T23:27:39 + 2014-11-10T23:31:50 @@ -276,29 +295,55 @@ - - - - - - - - - - - - - - - - - - - - - - - + + 2015-4-15T16:43:24 + + + + + + + + + + + + 2015-4-16T16:21:22 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -363,371 +408,440 @@ - - - - - - - - - - - - + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + - - + - - + - - + - - + - - + - - + - - + - - + - - + - - + - - + - - + - - + - - + - - + - - + - - + - - + - - + - - + - - + - - + - - + - - + - - + - - + - - + - - + - - + - - + - - + - - + - - + - - + - - + - - + - - + - - + - - + - - + - - + - - + - - + - - + - - + - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - Version: 1.0 - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - \ No newline at end of file diff --git a/libraries/AVR_Wishbone_Bridge/circuit/build_all.bat b/libraries/Robot_Control_Library/circuit/build_all.bat similarity index 100% rename from libraries/AVR_Wishbone_Bridge/circuit/build_all.bat rename to libraries/Robot_Control_Library/circuit/build_all.bat diff --git a/libraries/AVR_Wishbone_Bridge/circuit/clean.bat b/libraries/Robot_Control_Library/circuit/clean.bat similarity index 100% rename from libraries/AVR_Wishbone_Bridge/circuit/clean.bat rename to libraries/Robot_Control_Library/circuit/clean.bat diff --git a/libraries/Robot_Control_Library/circuit/schematic_papilio_DUO.pdf b/libraries/Robot_Control_Library/circuit/schematic_papilio_DUO.pdf new file mode 100644 index 0000000..38435e0 Binary files /dev/null and b/libraries/Robot_Control_Library/circuit/schematic_papilio_DUO.pdf differ diff --git a/libraries/Robot_Control_Library/circuit/schematic_papilio_one_250k.pdf b/libraries/Robot_Control_Library/circuit/schematic_papilio_one_250k.pdf new file mode 100644 index 0000000..ca3fd54 Binary files /dev/null and b/libraries/Robot_Control_Library/circuit/schematic_papilio_one_250k.pdf differ diff --git a/libraries/Robot_Control_Library/circuit/schematic_papilio_one_500k.pdf b/libraries/Robot_Control_Library/circuit/schematic_papilio_one_500k.pdf new file mode 100644 index 0000000..df81bb6 Binary files /dev/null and b/libraries/Robot_Control_Library/circuit/schematic_papilio_one_500k.pdf differ diff --git a/libraries/Robot_Control_Library/circuit/schematic_papilio_pro.pdf b/libraries/Robot_Control_Library/circuit/schematic_papilio_pro.pdf new file mode 100644 index 0000000..1ca4cc3 Binary files /dev/null and b/libraries/Robot_Control_Library/circuit/schematic_papilio_pro.pdf differ diff --git a/libraries/AVR_Wishbone_Bridge/clean.bat b/libraries/Robot_Control_Library/clean.bat similarity index 97% rename from libraries/AVR_Wishbone_Bridge/clean.bat rename to libraries/Robot_Control_Library/clean.bat index 8a48128..de0d60c 100644 --- a/libraries/AVR_Wishbone_Bridge/clean.bat +++ b/libraries/Robot_Control_Library/clean.bat @@ -37,7 +37,7 @@ if exist papilio_one_250k.bit ( ) REM Deletes all unnecessary files -for /f %%F in ('dir /b /a-d ^| findstr /vile ".sch .xise .bit .bat .sym .vhd .pdf .ino .cmd_log .cmd .xst .prj .vhf .ut .h .cpp .xtcl keywords.txt"') do del "%%F" +for /f %%F in ('dir /b /a-d ^| findstr /vile ".sch .xise .bit .bat .sym .vhd .pdf .ino .cmd_log .cmd .xst .prj .vhf .ut .h .cpp .xtcl keywords.txt .gz"') do del "%%F" REM for /f %%F in ('dir /b ^| findstr /vile "Sketch saved_bitfiles rebuild LX9 500K 250K smallfs ols-0.9.7 Libraries ym_converter"') do rmdir /q /s "%%F" rmdir /q /s iseconfig diff --git a/libraries/AVR_Wishbone_Bridge/edit_library.ino b/libraries/Robot_Control_Library/edit_library.ino similarity index 97% rename from libraries/AVR_Wishbone_Bridge/edit_library.ino rename to libraries/Robot_Control_Library/edit_library.ino index a8e4252..c3edcc1 100644 --- a/libraries/AVR_Wishbone_Bridge/edit_library.ino +++ b/libraries/Robot_Control_Library/edit_library.ino @@ -15,7 +15,7 @@ 4) Make an example sketch for the library Open the sketch under the examples folder - it should have automatically opened with this sketch. 4) Share your library - http://forum.gadgetfactory.net/index.php?/page/articles.html + http://forum.gadgetfactory.net/index.php?/page/articles.html/_/designlab/libraries/ created 2014 by Jack Gassett diff --git a/libraries/Robot_Control_Library/examples/ColorCrossFader/ColorCrossFader.ino b/libraries/Robot_Control_Library/examples/ColorCrossFader/ColorCrossFader.ino new file mode 100644 index 0000000..185ba47 --- /dev/null +++ b/libraries/Robot_Control_Library/examples/ColorCrossFader/ColorCrossFader.ino @@ -0,0 +1,285 @@ +/* +* Code from Arduino website: http://www.arduino.cc/en/Tutorial/ColorCrossfader +* Code for cross-fading 3 LEDs, red, green and blue (RGB) +* To create fades, you need to do two things: +* 1. Describe the colors you want to be displayed +* 2. List the order you want them to fade in +* +* DESCRIBING A COLOR: +* A color is just an array of three percentages, 0-100, +* controlling the red, green and blue LEDs +* +* Red is the red LED at full, blue and green off +* int red = { 100, 0, 0 } +* Dim white is all three LEDs at 30% +* int dimWhite = {30, 30, 30} +* etc. +* +* Some common colors are provided below, or make your own +* +* LISTING THE ORDER: +* In the main part of the program, you need to list the order +* you want to colors to appear in, e.g. +* crossFade(red); +* crossFade(green); +* crossFade(blue); +* +* Those colors will appear in that order, fading out of +* one color and into the next +* +* In addition, there are 5 optional settings you can adjust: +* 1. The initial color is set to black (so the first color fades in), but +* you can set the initial color to be any other color +* 2. The internal loop runs for 1020 interations; the 'wait' variable +* sets the approximate duration of a single crossfade. In theory, +* a 'wait' of 10 ms should make a crossFade of ~10 seconds. In +* practice, the other functions the code is performing slow this +* down to ~11 seconds on my board. YMMV. +* 3. If 'repeat' is set to 0, the program will loop indefinitely. +* if it is set to a number, it will loop that number of times, +* then stop on the last color in the sequence. (Set 'return' to 1, +* and make the last color black if you want it to fade out at the end.) +* 4. There is an optional 'hold' variable, which pasues the +* program for 'hold' milliseconds when a color is complete, +* but before the next color starts. +* 5. Set the DEBUG flag to 1 if you want debugging output to be +* sent to the serial monitor. +* +* The internals of the program aren't complicated, but they +* are a little fussy -- the inner workings are explained +* below the main loop. +* +* April 2007, Clay Shirky + + Hardware: + Encoder Wing connected to AL WingSlot for Papilio One and Papilio Pro + Encoder Wing connected to DL WingSlot for Papilio DUO + +*/ + +#define circuit Robot_Control_Library + +//Papilio DUO on DL Wingslot +#if defined(__ZPUINO_PAPILIO_DUO_512KB__) || defined(__ZPUINO_PAPILIO_DUO_2MB__) + #define BUTTON_LED WING_DL7 + #define ENC_LEDR WING_DL3 + #define ENC_LEDG WING_DL2 + #define ENC_LEDB WING_DL1 + #define ENC_A WING_DL4 + #define ENC_B WING_DL5 +#else + //Everything else on AL Wingslot + #define BUTTON_LED WING_AL7 + #define ENC_LEDR WING_AL3 + #define ENC_LEDG WING_AL2 + #define ENC_LEDB WING_AL1 + #define ENC_A WING_AL4 + #define ENC_B WING_AL5 +#endif + +//Define PWM channels +#define BUTTON 0 +#define RED 1 +#define GREEN 2 +#define BLUE 3 + +#include "Robot_Control_Library.h" + +Robot_Control_Library Robot_Control_Library; + +// Output +int redPin = 9; // Red LED, connected to digital pin 9 +int grnPin = 10; // Green LED, connected to digital pin 10 +int bluPin = 11; // Blue LED, connected to digital pin 11 + +// Color arrays +int black[3] = { 0, 0, 0 }; +int white[3] = { 100, 100, 100 }; +int red[3] = { 100, 0, 0 }; +int green[3] = { 0, 100, 0 }; +int blue[3] = { 0, 0, 100 }; +int yellow[3] = { 40, 95, 0 }; +int dimWhite[3] = { 30, 30, 30 }; +// etc. + +// Set initial color +int redVal = black[0]; +int grnVal = black[1]; +int bluVal = black[2]; + +int wait = 1; // 10ms internal crossFade delay; increase for slower fades +int hold = 0; // Optional hold when a color is complete, before the next crossFade +int DEBUG = 1; // DEBUG counter; if set to 1, will write values back via serial +int loopCount = 60; // How often should DEBUG report? +int repeat = 3; // How many times should we loop before stopping? (0 for no stop) +int j = 0; // Loop counter for repeat + +// Initialize color variables +int prevR = redVal; +int prevG = grnVal; +int prevB = bluVal; + +// Set up the LED outputs +void setup() +{ +// pinMode(redPin, OUTPUT); // sets the pins as output +// pinMode(grnPin, OUTPUT); +// pinMode(bluPin, OUTPUT); + + Serial.begin(9600); + Robot_Control_Library.setupQuad(5); + Robot_Control_Library.setupPWM(11); + + //Setup the Flex pins to connect to an Encoder Wing connected to AL Wingslot + + // Map WING_AL7/Button_LED to FlexPinOut0/PWM0 + pinMode (BUTTON_LED , OUTPUT ); + pinModePPS (BUTTON_LED , HIGH ); + outputPinForFunction (BUTTON_LED , 0 ); + + // Map WING_AL3/ENC_LEDR to FlexPinOut1/PWM1 + pinMode (ENC_LEDR , OUTPUT ); + pinModePPS (ENC_LEDR , HIGH ); + outputPinForFunction (ENC_LEDR , 1 ); + + // Map WING_AL2/ENC_LEDG to FlexPinOut2/PWM2 + pinMode (ENC_LEDG , OUTPUT ); + pinModePPS (ENC_LEDG , HIGH ); + outputPinForFunction (ENC_LEDG , 2 ); + + // Map WING_AL1/ENC_LEDB to FlexPinOut3/PWM3 + pinMode (ENC_LEDB , OUTPUT ); + pinModePPS (ENC_LEDB , HIGH ); + outputPinForFunction (ENC_LEDB , 3 ); +} + +// Main program: list the order of crossfades +void loop() +{ + crossFade(red); + crossFade(green); + crossFade(blue); + crossFade(yellow); + + if (repeat) { // Do we loop a finite number of times? + j += 1; + if (j >= repeat) { // Are we there yet? + exit(j); // If so, stop. + } + } +} + +/* BELOW THIS LINE IS THE MATH -- YOU SHOULDN'T NEED TO CHANGE THIS FOR THE BASICS +* +* The program works like this: +* Imagine a crossfade that moves the red LED from 0-10, +* the green from 0-5, and the blue from 10 to 7, in +* ten steps. +* We'd want to count the 10 steps and increase or +* decrease color values in evenly stepped increments. +* Imagine a + indicates raising a value by 1, and a - +* equals lowering it. Our 10 step fade would look like: +* +* 1 2 3 4 5 6 7 8 9 10 +* R + + + + + + + + + + +* G + + + + + +* B - - - +* +* The red rises from 0 to 10 in ten steps, the green from +* 0-5 in 5 steps, and the blue falls from 10 to 7 in three steps. +* +* In the real program, the color percentages are converted to +* 0-255 values, and there are 1020 steps (255*4). +* +* To figure out how big a step there should be between one up- or +* down-tick of one of the LED values, we call calculateStep(), +* which calculates the absolute gap between the start and end values, +* and then divides that gap by 1020 to determine the size of the step +* between adjustments in the value. +*/ + +int calculateStep(int prevValue, int endValue) { + int step = endValue - prevValue; // What's the overall gap? + if (step) { // If its non-zero, + step = 1020/step; // divide by 1020 + } + return step; +} + +/* The next function is calculateVal. When the loop value, i, +* reaches the step size appropriate for one of the +* colors, it increases or decreases the value of that color by 1. +* (R, G, and B are each calculated separately.) +*/ + +int calculateVal(int step, int val, int i) { + + if ((step) && i % step == 0) { // If step is non-zero and its time to change a value, + if (step > 0) { // increment the value if step is positive... + val += 1; + } + else if (step < 0) { // ...or decrement it if step is negative + val -= 1; + } + } + // Defensive driving: make sure val stays in the range 0-255 + if (val > 255) { + val = 255; + } + else if (val < 0) { + val = 0; + } + return val; +} + +/* crossFade() converts the percentage colors to a +* 0-255 range, then loops 1020 times, checking to see if +* the value needs to be updated each time, then writing +* the color values to the correct pins. +*/ + +void crossFade(int color[3]) { + // Convert to 0-255 + int R = (color[0] * 255) / 100; + int G = (color[1] * 255) / 100; + int B = (color[2] * 255) / 100; + + int stepR = calculateStep(prevR, R); + int stepG = calculateStep(prevG, G); + int stepB = calculateStep(prevB, B); + + for (int i = 0; i <= 1020; i++) { + redVal = calculateVal(stepR, redVal, i); + grnVal = calculateVal(stepG, grnVal, i); + bluVal = calculateVal(stepB, bluVal, i); + +// analogWrite(redPin, redVal); // Write current values to LED pins +// analogWrite(grnPin, grnVal); +// analogWrite(bluPin, bluVal); + + Robot_Control_Library.setPWMDuty(RED, redVal); + Robot_Control_Library.setPWMDuty(GREEN, grnVal); + Robot_Control_Library.setPWMDuty(BLUE, bluVal); + + delay(wait); // Pause for 'wait' milliseconds before resuming the loop + + if (DEBUG) { // If we want serial output, print it at the + if (i == 0 or i % loopCount == 0) { // beginning, and every loopCount times + Serial.print("Loop/RGB: #"); + Serial.print(i); + Serial.print(" | "); + Serial.print(redVal); + Serial.print(" / "); + Serial.print(grnVal); + Serial.print(" / "); + Serial.println(bluVal); + } + DEBUG += 1; + } + } + // Update current values for next loop + prevR = redVal; + prevG = grnVal; + prevB = bluVal; + delay(hold); // Pause for optional 'wait' milliseconds before resuming the loop +} diff --git a/libraries/Robot_Control_Library/examples/Encoder_Wing/Encoder_Wing.ino b/libraries/Robot_Control_Library/examples/Encoder_Wing/Encoder_Wing.ino new file mode 100644 index 0000000..3d0bd28 --- /dev/null +++ b/libraries/Robot_Control_Library/examples/Encoder_Wing/Encoder_Wing.ino @@ -0,0 +1,137 @@ +/* + Gadget Factory + This example sketch shows how to move flex pins and use the PWM and Quadrature Decoder cores. + + Hardware: + Encoder Wing connected to AL WingSlot for Papilio One and Papilio Pro + Encoder Wing connected to DL WingSlot for Papilio DUO + + Tutorials: + http://learn.gadgetfactory.net + + created 2015 + by Jack Gassett + http://www.gadgetfactory.net + + This example code is in the public domain. + */ + +#define circuit Robot_Control_Library + +//Papilio DUO on DL Wingslot +#if defined(__ZPUINO_PAPILIO_DUO_512KB__) || defined(__ZPUINO_PAPILIO_DUO_2MB__) + #define BUTTON_LED WING_DL7 + #define ENC_LEDR WING_DL3 + #define ENC_LEDG WING_DL2 + #define ENC_LEDB WING_DL1 + #define ENC_A WING_DL4 + #define ENC_B WING_DL5 +#else + //Everything else on AL Wingslot + #define BUTTON_LED WING_AL7 + #define ENC_LEDR WING_AL3 + #define ENC_LEDG WING_AL2 + #define ENC_LEDB WING_AL1 + #define ENC_A WING_AL4 + #define ENC_B WING_AL5 +#endif + +//Define PWM channels +#define BUTTON 0 +#define RED 1 +#define GREEN 2 +#define BLUE 3 + +#include "Robot_Control_Library.h" + +Robot_Control_Library Robot_Control_Library; + +void setup() { + // put your setup code here, to run once: + Serial.begin(9600); + Robot_Control_Library.setupQuad(5); + Robot_Control_Library.setupPWM(11); + + //Setup the Flex pins to connect to an Encoder Wing connected to AL Wingslot + + // Map WING_AL7/Button_LED to FlexPinOut0/PWM0 + pinMode (BUTTON_LED , OUTPUT ); + pinModePPS (BUTTON_LED , HIGH ); + outputPinForFunction (BUTTON_LED , 0 ); + + // Map WING_AL3/ENC_LEDR to FlexPinOut1/PWM1 + pinMode (ENC_LEDR , OUTPUT ); + pinModePPS (ENC_LEDR , HIGH ); + outputPinForFunction (ENC_LEDR , 1 ); + + // Map WING_AL2/ENC_LEDG to FlexPinOut2/PWM2 + pinMode (ENC_LEDG , OUTPUT ); + pinModePPS (ENC_LEDG , HIGH ); + outputPinForFunction (ENC_LEDG , 2 ); + + // Map WING_AL1/ENC_LEDB to FlexPinOut3/PWM3 + pinMode (ENC_LEDB , OUTPUT ); + pinModePPS (ENC_LEDB , HIGH ); + outputPinForFunction (ENC_LEDB , 3 ); + + // Map WING_AL4/ENC_A to FlexPinIn0/Quad_A(0) + pinMode (ENC_A , INPUT ); + inputPinForFunction (ENC_A , 0 ); + + // Map WING_AL5/ENC_B to FlexPinIn3/Quad_B(0) + pinMode (ENC_B , INPUT ); + inputPinForFunction (ENC_B , 3 ); + + //255 is off, 0 is on + Robot_Control_Library.setPWMDuty(BUTTON, 0); + Robot_Control_Library.setPWMDuty(RED, 0); + Robot_Control_Library.setPWMDuty(GREEN, 255); + Robot_Control_Library.setPWMDuty(BLUE, 255); + +} + +void setColourRgb(unsigned int _red, unsigned int _green, unsigned int _blue) { + Robot_Control_Library.setPWMDuty(RED, _red); + Robot_Control_Library.setPWMDuty(GREEN, _green); + Robot_Control_Library.setPWMDuty(BLUE, _blue); + } + +void loop() { + Serial.print("\t Pulse Count 0: "); + Serial.print(Robot_Control_Library.getPulseCount(0)); + +// Serial.print("\t \t Revolution Count:"); // T is not connected +// Serial.print(Robot_Control_Library.getRevCount(1)); + + //Not sure if these functions are working correctly... + Serial.print("\t \t Speed: "); + Serial.print(Robot_Control_Library.getSpeed(0)); + Serial.print("\t \t Speed Radians: "); + Serial.print(Robot_Control_Library.getSpeedRad(0)); + Serial.print("\t \t Acceleration: "); + Serial.print(Robot_Control_Library.getAccel(0)); + Serial.println(); + Serial.println(); + //delay (200); + + //Code snippet from: https://gist.github.com/jamesotron/766994 + unsigned int rgbColour[3]; + // Start off with red. + rgbColour[0] = 255; + rgbColour[1] = 0; + rgbColour[2] = 0; + + // Choose the colours to increment and decrement. + for (int decColour = 0; decColour < 3; decColour += 1) { + int incColour = decColour == 2 ? 0 : decColour + 1; + + // cross-fade the two colours. + for(int i = 0; i < 255; i += 1) { + rgbColour[decColour] -= 1; + rgbColour[incColour] += 1; + + setColourRgb(rgbColour[0], rgbColour[1], rgbColour[2]); + delay(1); + } + } +} diff --git a/libraries/Robot_Control_Library/full_step_driver.sym b/libraries/Robot_Control_Library/full_step_driver.sym new file mode 100644 index 0000000..42f4b6c --- /dev/null +++ b/libraries/Robot_Control_Library/full_step_driver.sym @@ -0,0 +1,25 @@ + + + BLOCK + 2015-4-16T16:33:41 + + + + + + + + + + + + + + + + + + + + + diff --git a/libraries/Robot_Control_Library/full_step_driver.vhd b/libraries/Robot_Control_Library/full_step_driver.vhd new file mode 100644 index 0000000..849369a --- /dev/null +++ b/libraries/Robot_Control_Library/full_step_driver.vhd @@ -0,0 +1,51 @@ +library IEEE; +use IEEE.STD_LOGIC_1164.ALL; +use IEEE.STD_LOGIC_ARITH.ALL; +use IEEE.STD_LOGIC_UNSIGNED.ALL; + +-- This source has been developed with help from a stepper controller +-- implementation on Opencores developed by: +-- c2003 Franks Development, LLC +-- http://www.franks-development.com + +entity full_step_driver is + Port ( + StepDrive : out std_logic_vector(3 downto 0); -- the 4 output to drive the MOSFETS driving the coils in the motor. + clock : in std_logic; -- clock input to logic device + Direction : in std_logic; -- spin clockwise or counter-clockwise? (actual direction depends on correct hookup/pin assignements) + StepEnable : in std_logic; -- move a single step on next clock divider rollover. leave high for a single clock to get a single step. If high across rollover, may get two steps + ProvideStaticHolding : in std_logic -- leave motor coils energized when not rotating, so that counter-torque is applied if attempt to move shaft + ); +end full_step_driver; + +architecture StepDrive of full_step_driver is + signal state : std_logic_vector(1 downto 0); -- simple state machine, 4 states + +begin + process(clock) + begin + if ( (clock'Event) and (clock = '1') ) then --on clock + if (ProvideStaticHolding = '0') then --should we leave coils in energized state by defaul or not? + StepDrive <= "0000"; + else + StepDrive <= "1111"; + end if; + if (StepEnable = '1' ) then -- are we supposed to step on this clock? + if (Direction = '1') then state <= state + "01"; end if; -- to change the direction of a stepper motor, you energize + if (Direction = '0') then state <= state - "01"; end if; -- the coils in the opposite pattern, so just run states backwards + -- this also allows a change of direction at any arbitrary point + case state is + when "00" => + StepDrive <= "1010"; -- these states follow proper pattern of coil energizing for turning steppers + when "01" => + StepDrive <= "1001"; + when "10" => + StepDrive <= "0101"; + when "11" => + StepDrive <= "0110"; + when others => + end case; --state + end if; + end if; +end process; +end StepDrive; diff --git a/libraries/Robot_Control_Library/half_step_driver.sym b/libraries/Robot_Control_Library/half_step_driver.sym new file mode 100644 index 0000000..da5e6a3 --- /dev/null +++ b/libraries/Robot_Control_Library/half_step_driver.sym @@ -0,0 +1,25 @@ + + + BLOCK + 2015-4-16T16:33:52 + + + + + + + + + + + + + + + + + + + + + diff --git a/libraries/Robot_Control_Library/half_step_driver.vhd b/libraries/Robot_Control_Library/half_step_driver.vhd new file mode 100644 index 0000000..9db9629 --- /dev/null +++ b/libraries/Robot_Control_Library/half_step_driver.vhd @@ -0,0 +1,57 @@ +library IEEE; +use IEEE.STD_LOGIC_1164.ALL; +use IEEE.STD_LOGIC_ARITH.ALL; +use IEEE.STD_LOGIC_UNSIGNED.ALL; + +-- This source has been developed with help from a stepper controller +-- implementation on Opencores developed by: +-- c2003 Franks Development, LLC +-- http://www.franks-development.com + +entity half_step_driver is + Port ( + StepDrive : out std_logic_vector(3 downto 0); -- the 4 output to drive the MOSFETS driving the coils in the motor. + clock : in std_logic; -- clock input to logic device + Direction : in std_logic; -- spin clockwise or counter-clockwise? (actual direction depends on correct hookup/pin assignements) + StepEnable : in std_logic; -- move a single step on next clock divider rollover. leave high for a single clock to get a single step. If high across rollover, may get two steps + ProvideStaticHolding : in std_logic -- leave motor coils energized when not rotating, so that counter-torque is applied if attempt to move shaft + ); +end half_step_driver; + +architecture StepDrive of half_step_driver is + signal state : std_logic_vector(2 downto 0); -- simple state machine, 8 states +begin + process(clock) + begin + if ( (clock'Event) and (clock = '1') ) then --on clock + if (ProvideStaticHolding = '0') then --should we leave coils in energized state by defaul or not? + StepDrive <= "0000"; + else + StepDrive <= "1111"; + end if; + if (StepEnable = '1') then -- are we supposed to step on this clock? + if (Direction = '1') then state <= state + "01"; end if; -- to change the direction of a stepper motor, you energize + if (Direction = '0') then state <= state - "01"; end if; -- the coils in the opposite pattern, so just run states backwards + case state is + when "000" => + StepDrive <= "0001"; -- these states follow proper pattern of coil energizing for turning steppers + when "001" => + StepDrive <= "0101"; + when "010" => + StepDrive <= "0100"; + when "011" => + StepDrive <= "0110"; + when "100" => + StepDrive <= "0010"; + when "101" => + StepDrive <= "1010"; + when "110" => + StepDrive <= "1000"; + when "111" => + StepDrive <= "1001"; + when others => + end case; --state + end if; + end if; +end process; +end StepDrive; diff --git a/libraries/AVR_Wishbone_Bridge/include_symbols.edif b/libraries/Robot_Control_Library/include_symbols.edif similarity index 100% rename from libraries/AVR_Wishbone_Bridge/include_symbols.edif rename to libraries/Robot_Control_Library/include_symbols.edif diff --git a/libraries/Robot_Control_Library/quad_inst.sym b/libraries/Robot_Control_Library/quad_inst.sym new file mode 100644 index 0000000..4724c92 --- /dev/null +++ b/libraries/Robot_Control_Library/quad_inst.sym @@ -0,0 +1,40 @@ + + + BLOCK + 2015-4-15T16:45:21 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/libraries/Robot_Control_Library/quad_inst.vhd b/libraries/Robot_Control_Library/quad_inst.vhd new file mode 100644 index 0000000..42610af --- /dev/null +++ b/libraries/Robot_Control_Library/quad_inst.vhd @@ -0,0 +1,274 @@ +library IEEE; +use IEEE.STD_LOGIC_1164.ALL; +use IEEE.STD_LOGIC_ARITH.ALL; +--use IEEE.STD_LOGIC_UNSIGNED.ALL; +use IEEE.STD_LOGIC_SIGNED.ALL; +-- use IEEE.MATH_REAL.ALL; + +-- Uncomment the following lines to use the declarations that are +-- provided for instantiating Xilinx primitive components. +--library UNISIM; +--use UNISIM.VComponents.all; + +entity quad_inst is + generic ( + C_QE_CLK_COUNT_WIDTH : integer := 32; + C_QE_PULSE_COUNT_WIDTH : integer := 32; + C_QE_REV_COUNT_WIDTH : integer := 32; + C_QE_NUM_COUNT : integer := 5; + C_QE_SPEED_WIDTH : integer := 32; + C_QE_ACCELERATION_WIDTH : integer := 32; + C_QE_SPEED_TYPE : integer := 0 --0: clock ticks between C_QE_NUM_COUNT number of A_CLK's. 1: A_CLK's in timers timeinterval + ); + port ( + CLK : in std_logic; -- clk for timer + Reset : in std_logic; -- reset + A_CLK : in std_logic; -- clk + B_CLK : in std_logic; -- 90 phase clk + I_CLK : in std_logic; -- Revolutions clk + PULSE_COUNT : out std_logic_vector(C_QE_PULSE_COUNT_WIDTH-1 downto 0); -- pulse count + REV_COUNT : out std_logic_vector(C_QE_REV_COUNT_WIDTH-1 downto 0); -- Revolutions count + TSPEED : out std_logic_vector(C_QE_SPEED_WIDTH-1 downto 0); -- number of clk's between 1 puls + TACCEL : out std_logic_vector(C_QE_ACCELERATION_WIDTH-1 downto 0) -- number of clk's between each speed measurement + ); +end quad_inst; + +architecture Behavioral of quad_inst is + signal A_CLK_i, B_CLK_i, I_CLK_i : std_logic := '0'; + signal timer_reset,sreset,mreset : std_logic := '0'; + signal timer : signed(C_QE_CLK_COUNT_WIDTH-1 downto 0) := (others => '0'); + signal pulse_count_i : signed(C_QE_PULSE_COUNT_WIDTH-1 downto 0) := (others => '0'); -- pulse count internal + signal rev_count_i : signed(C_QE_REV_COUNT_WIDTH-1 downto 0) := (others => '0'); -- revolution count internal + signal speed : signed(C_QE_SPEED_WIDTH-1 downto 0) := (others => '0'); + signal accel : signed(C_QE_ACCELERATION_WIDTH-1 downto 0) := (others => '0'); + + +begin + PULSE_COUNT <= std_logic_vector(pulse_count_i); + REV_COUNT <= std_logic_vector(rev_count_i); + TSPEED <= std_logic_vector(speed); + TACCEL <= std_logic_vector(accel); + timer_reset <= sreset xor mreset; + + -- Process synchronizing A, B and I and to handle timer + Process(CLK) + begin + if CLK'event and CLK='1' then + if timer_reset='1' then + timer <= (others => '0'); + mreset <= not mreset; + else + timer <= timer + 1; + end if; + A_CLK_i <= A_CLK; + B_CLK_i <= B_CLK; + I_CLK_i <= I_CLK; + end if; + end process; + + -- Process handling A pulse count +-- Process(A_CLK_i) + Process(Clk, Reset) + variable A_CLK_i_last : std_logic := '0'; + begin +-- if A_CLK_i'event and A_CLK_i='1' then + if CLK'event and CLK='1' then + if Reset='1' then + pulse_count_i <= (others=>'0'); + else + if A_CLK_i = not A_CLK_i_last then + A_CLK_i_last := A_CLK_i; + if B_CLK_i='1' then + pulse_count_i <= pulse_count_i-A_CLK_i; + else + pulse_count_i <= pulse_count_i+A_CLK_i; + end if; + end if; + end if; + end if; + end Process; + + SPEED0: if C_QE_SPEED_TYPE = 0 generate + -- Process handling speed and acceleration + -- count clock ticks between C_QE_NUM_COUNT number of A_CLK's +-- Process(A_CLK_i) + process (CLK) + variable pulses : integer range 0 to C_QE_NUM_COUNT := 0; + variable last_speed : signed(C_QE_SPEED_WIDTH-1 downto 0) := (others => '0'); + variable A_CLK_i_last : std_logic := '0'; + begin +-- if A_CLK_i'event and A_CLK_i='1' then + if CLK'event and CLK='1' then + if A_CLK_i = not A_CLK_i_last then + A_CLK_i_last := not A_CLK_i_last; + pulses := pulses + conv_integer(A_CLK_i); + if pulses = C_QE_NUM_COUNT then + pulses := 0; + if B_CLK_i='1' then + speed <= -timer; + else + speed <= timer; + end if; + if timer(C_QE_CLK_COUNT_WIDTH-1)='1' then + speed <= (others=>'0'); + end if; + accel <= speed-last_speed; + last_speed := speed; + sreset <= not sreset; + end if; + end if; + end if; + + end process; + end generate; + + SPEED1: if C_QE_SPEED_TYPE = 1 generate + -- Other process handling speed and acceleration + -- Number of A_CLK's in timers timeinterval + Process(CLK) + variable last_pulse_count_i : signed(C_QE_PULSE_COUNT_WIDTH-1 downto 0) := (others => '0'); + variable last_speed : signed(C_QE_SPEED_WIDTH-1 downto 0) := (others => '0'); + begin + if CLK'event and CLK='0' then -- down flank to ensure timer reset + if timer(C_QE_CLK_COUNT_WIDTH-1)='1' then -- signed timer overflow + speed <= pulse_count_i - last_pulse_count_i; + last_pulse_count_i := pulse_count_i; + accel <= speed-last_speed; + last_speed := speed; + sreset <= not sreset; -- toggle timer_reset + end if; + end if; + end Process; + end generate; + + --Process handling revolution count +--Process(I_CLK_i) + process(CLK) + variable I_CLK_i_last : std_logic := '0'; + begin + --if I_CLK_i'event and I_CLK_i = '1' then + if CLK'event and CLK='1' then + if I_CLK_i = not I_CLK_i_last then + I_CLK_i_last := not I_CLK_i_last; + if B_CLK_i = '1' then + rev_count_i <= rev_count_i - I_CLK_i; + else + rev_count_i <= rev_count_i + I_CLK_i; + end if; + end if; + end if; + end Process; + +-- Process(CLK) +-- --variable clk_count : unsigned(15 downto 0) := x"0000"; +-- --constant clk_rollover : unsigned(7 downto 0) := x"00"; +-- variable timer : signed(C_QE_CLK_COUNT_WIDTH-1 downto 0) := (others => '0'); +-- constant max : signed(C_QE_CLK_COUNT_WIDTH-1 downto 0) := (0 => '0', others => '1'); +-- variable overflow : std_logic := '0'; +-- variable a_last : std_logic := '0'; +-- variable i_last : std_logic := '0'; +-- +-- variable p_count : signed(C_QE_PULSE_COUNT_WIDTH-1 downto 0) := (others => '0'); +-- variable r_count : signed(C_QE_REV_COUNT_WIDTH-1 downto 0) := (others => '0'); +-- +-- --variable lasttime : unsigned(15 downto 0) := x"0000"; +-- --variable a_count : unsigned (LOG2(C_QE_NUM_COUNT) downto 0) := (others => '0'); +-- variable a_count : std_logic_vector (1 downto 0) := (others => '0'); +-- variable speed : signed(C_QE_SPEED_WIDTH-1 downto 0) := (others => '0'); +-- variable lastspeed : signed(C_QE_SPEED_WIDTH-1 downto 0) := (others => '0'); +-- variable accel : signed(C_QE_ACCELERATION_WIDTH-1 downto 0) := (others => '0'); +-- +-- begin +-- if CLK'event and CLK='1' then +-- if Reset = '1' then +-- p_count := (others => '0'); +-- r_count := (others => '0'); +-- timer := (others => '0'); +-- speed := (others => '0'); +-- lastspeed := (others => '0'); +-- accel := (others => '0'); +-- TSPEED <= (others => '0'); +-- TACCEL <= (others => '0'); +-- else +-- if(timer = max) then +-- overflow := '1'; +-- speed := (others => '0'); +-- TSPEED <= (others => '0'); +-- TACCEL <= (others => '0'); +-- end if; +-- timer := timer + 1; +-- -- clk_count := clk_count + 1; +-- -- if(clk_count >= clk_rollover) then +-- -- clk_count := (others => '0'); +-- -- if(timer = max) then +-- -- overflow := '1'; +-- -- TSPEED <= (others => '0'); +-- -- end if; +-- -- timer := timer + 1; +-- -- end if; +-- -- if A has changed: +-- if A_CLK = not a_last then +-- a_last := A_CLK; +-- if A_CLK = '1' then +-- -- update the position: +-- if B_CLK = '1' then +-- p_count := p_count - 1; +-- else +-- p_count := p_count + 1; +-- end if; +-- PULSE_COUNT <= p_count; +-- +-- -- update the speed +-- if overflow = '1' then +-- --TSPEED og speed nulstilles ved overflow længere oppe +-- overflow := '0'; +-- else +-- if a_count = 2 then +-- --speed := CONV_SIGNED(timer, C_QE_CLK_COUNT_WIDTH); +-- speed := timer; +-- --if C_QE_CLK_COUNT_WIDTH < C_QE_SPEED_WIDTH then +-- --speed(C_QE_CLK_COUNT_WIDTH-1 to 0) := timer(C_QE_CLK_COUNT_WIDTH-1 to 0); +-- --end if; +-- if B_CLK = '1' then +-- speed := -speed; +-- end if; +-- a_count := (others => '0'); +-- timer := (others => '0'); +-- else +-- a_count := a_count + 1; +-- end if; +-- TSPEED <= speed; +-- end if; +-- +-- +-- -- update the accel +-- -- if speed>lastspeed then +-- -- accel := speed-lastspeed; +-- -- else +-- -- accel := (x"ffff"-lastspeed)+ speed; +-- -- end if; +-- -- lastspeed := speed; +-- -- TACCEL <= accel; +-- accel := speed-lastspeed; +-- lastspeed := speed; +-- TACCEL <= accel; +-- end if; --A_CLK = '1' +-- end if; --A_CLK = not a_last +-- -- if I has changed: +-- if I_CLK = not i_last then +-- i_last := I_CLK; +-- if I_CLK = '1' then +-- -- update the revolution +-- if B_CLK = '1' then +-- r_count := r_count - 1; +-- else +-- r_count := r_count + 1; +-- end if; +-- --p_count := "00000000000"; +-- REV_COUNT <= r_count; +-- end if; +-- end if; +-- end if; -- Reset +-- end if; -- CLK'event +-- End Process; +end Behavioral; diff --git a/libraries/Robot_Control_Library/robot_control_library_original.tar.gz b/libraries/Robot_Control_Library/robot_control_library_original.tar.gz new file mode 100644 index 0000000..01815b6 Binary files /dev/null and b/libraries/Robot_Control_Library/robot_control_library_original.tar.gz differ diff --git a/libraries/Servo/examples/Pan_Tilt/Pan_Tilt.ino b/libraries/Servo/examples/Pan_Tilt/Pan_Tilt.ino new file mode 100644 index 0000000..cecbaaa --- /dev/null +++ b/libraries/Servo/examples/Pan_Tilt/Pan_Tilt.ino @@ -0,0 +1,55 @@ +/* + Gadget Factory - Servo Pan and Tilt + To learn more about using DesignLab please visit http://learn.gadgetfactory.net + + Tutorials: + + Related library documentation: + + Hardware: + Any Papilio board - Works with ZPUino or AVR + + Special Notes: + + created 2014 + by Jack Gassett + http://www.gadgetfactory.net + + This example code is in the public domain. + */ + +#define circuit ZPUino_Vanilla + +#include +#include + +Servo tilt; // create servo object to control a servo +Servo pan; + // twelve servo objects can be created on most boards + +int pos = 0; // variable to store the servo position +int panpos = 0; + +void setup() +{ + Serial.begin(115200); + tilt.attach(6); // attaches the servo on pin 9 to the servo object + pan.attach(7); +} + +void loop() +{ + for(pos = 90; pos <= 180; pos += 1) // goes from 0 degrees to 180 degrees + { // in steps of 1 degree + tilt.write(pos); // tell servo to go to position in variable 'pos' + pan.write(pos); + delay(15); // waits 15ms for the servo to reach the position + } + for(pos = 180; pos>=90; pos-=1) // goes from 180 degrees to 0 degrees + { + tilt.write(pos); // tell servo to go to position in variable 'pos' + pan.write(pos); + delay(15); // waits 15ms for the servo to reach the position + } +} + diff --git a/libraries/Servo/library.properties b/libraries/Servo/library.properties index b28a1f9..388b6a9 100644 --- a/libraries/Servo/library.properties +++ b/libraries/Servo/library.properties @@ -5,4 +5,4 @@ maintainer=Arduino sentence=Controls a lot of Servos. paragraph=This library can control a great number of servos.
It makes careful use of timers: the library can control 12 servos using only 1 timer.
On the Arduino Due you can control up to 60 servos.
url=http://arduino.cc/en/Reference/Servo -architectures=avr,sam +architectures=avr,sam,zpu20 diff --git a/libraries/Servo/src/Servo.h b/libraries/Servo/src/Servo.h index 0a04913..140507a 100644 --- a/libraries/Servo/src/Servo.h +++ b/libraries/Servo/src/Servo.h @@ -57,16 +57,20 @@ * timer16_Sequence_t enumerates the sequence that the timers should be allocated * _Nbr_16timers indicates how many 16 bit timers are available. */ - + // Architecture specific include #if defined(ARDUINO_ARCH_AVR) #include "avr/ServoTimers.h" #elif defined(ARDUINO_ARCH_SAM) #include "sam/ServoTimers.h" +#elif defined(ZPU) +#include "zpu20/ServoTimers.h" #else #error "This library only supports boards with an AVR or SAM processor." #endif + + #define Servo_VERSION 2 // software version of this library #define MIN_PULSE_WIDTH 544 // the shortest pulse sent to a servo diff --git a/libraries/Servo/src/zpu20/Servo.cpp b/libraries/Servo/src/zpu20/Servo.cpp new file mode 100644 index 0000000..1dba7b8 --- /dev/null +++ b/libraries/Servo/src/zpu20/Servo.cpp @@ -0,0 +1,230 @@ +/* + Copyright (c) 2013 Arduino LLC. All right reserved. + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ +//#define ZPUINO +#if defined(ZPU) + +#include +#include +#include +#include "ServoTimers.h" + +#define usToTicks(_us) (( 10 * _us)) // converts microseconds to tick +#define ticksToUs(_ticks) (( (unsigned)_ticks )/ 10 ) // converts from ticks back to microseconds + +#define usToHz(_us) (( 1000000/_us)) // converts microseconds to Hz +#define HzToUs(_hz) (( 1000000/_hz) // converts from Hz back to microseconds + +#define usToMs(_us) (( _us / 1000)) // converts microseconds to milliseconds +#define msToUs(_hz) (( _ms * 1000) // converts from milliseconds back to microseconds + +#define TRIM_DURATION 1 // compensation ticks to trim adjust for digitalWrite delays + +static servo_t servos[MAX_SERVOS]; // static array of servo structures + +uint8_t ServoCount = 0; // the total number of attached servos + +static volatile int8_t Channel[_Nbr_16timers ]; // counter for the servo being pulsed for each timer (or -1 if refresh interval) + +// convenience macros +#define SERVO_INDEX_TO_TIMER(_servo_nbr) ((timer16_Sequence_t)(_servo_nbr / SERVOS_PER_TIMER)) // returns the timer controlling this servo +#define SERVO_INDEX_TO_CHANNEL(_servo_nbr) (_servo_nbr % SERVOS_PER_TIMER) // returns the index of the servo on this timer +#define SERVO_INDEX(_timer,_channel) ((_timer*SERVOS_PER_TIMER) + _channel) // macro to access servo index by timer and channel +#define SERVO(_timer,_channel) (servos[SERVO_INDEX(_timer,_channel)]) // macro to access servo class by timer and channel + +#define SERVO_MIN() (MIN_PULSE_WIDTH - this->min * 4) // minimum value in uS for this servo +#define SERVO_MAX() (MAX_PULSE_WIDTH - this->max * 4) // maximum value in uS for this servo + +/************ static functions common to all instances ***********************/ + +//------------------------------------------------------------------------------ +/// Servo handler. Acts when timer in +//------------------------------------------------------------------------------ + +bool Servo_Handler_0(void*) +{ + timer16_Sequence_t timer = _timer1; + if (Channel[timer] < 0) { + //Timers.periodicHz(10000000, Servo_Handler_0, 0, 0); // channel set to -1 indicated that refresh interval completed so reset the timer + + } else { + if (SERVO_INDEX(timer,Channel[timer]) < ServoCount && SERVO(timer,Channel[timer]).Pin.isActive == true) { + digitalWrite(SERVO(timer,Channel[timer]).Pin.nbr, LOW); // pulse this channel low if activated + } + } + + Channel[timer]++; // increment to the next channel + if( SERVO_INDEX(timer,Channel[timer]) < ServoCount && Channel[timer] < SERVOS_PER_TIMER) { + Timers.timer(timer)->setFrequency(usToHz(ticksToUs(SERVO(timer,Channel[timer]).ticks))); + + if(SERVO(timer,Channel[timer]).Pin.isActive == true) { // check if activated + digitalWrite( SERVO(timer,Channel[timer]).Pin.nbr,HIGH); // its an active channel so pulse it high + } + } + else { + Timers.timer(timer)->setFrequency(usToHz(REFRESH_INTERVAL)); + + Channel[timer] = -1; // this will get incremented at the end of the refresh period to start again at the first channel + } + return true; +} + +bool Servo_Handler_1(void*) +{ + timer16_Sequence_t timer = _timer2; + if (Channel[timer] < 0) { + //Timers.periodicHz(10000000, Servo_Handler_0, 0, 0); // channel set to -1 indicated that refresh interval completed so reset the timer + + } else { + if (SERVO_INDEX(timer,Channel[timer]) < ServoCount && SERVO(timer,Channel[timer]).Pin.isActive == true) { + digitalWrite(SERVO(timer,Channel[timer]).Pin.nbr, LOW); // pulse this channel low if activated + } + } + + Channel[timer]++; // increment to the next channel + if( SERVO_INDEX(timer,Channel[timer]) < ServoCount && Channel[timer] < SERVOS_PER_TIMER) { + Timers.timer(timer)->setFrequency(usToHz(ticksToUs(SERVO(timer,Channel[timer]).ticks))); + + if(SERVO(timer,Channel[timer]).Pin.isActive == true) { // check if activated + digitalWrite( SERVO(timer,Channel[timer]).Pin.nbr,HIGH); // its an active channel so pulse it high + } + } + else { + Timers.timer(timer)->setFrequency(usToHz(REFRESH_INTERVAL)); + + Channel[timer] = -1; // this will get incremented at the end of the refresh period to start again at the first channel + } + return true; +} + +static void initISR() +{ + // Just init the Timer with the initial frequency + Timers.begin(); + Timers.periodicHz(usToHz(REFRESH_INTERVAL), Servo_Handler_0, 0, 0); // All channel passed. Waut for refresh time + //Timers.periodicHz(usToHz(REFRESH_INTERVAL), Servo_Handler_1, 0, 1); // Not working for some reason... + +} + +static boolean isTimerActive(timer16_Sequence_t timer) +{ + // returns true if any servo is active on this timer + for(uint8_t channel=0; channel < SERVOS_PER_TIMER; channel++) { + if(SERVO(timer,channel).Pin.isActive == true) + return true; + } + return false; +} + +/****************** end of static functions ******************************/ + +Servo::Servo() +{ + if (ServoCount < MAX_SERVOS) { + this->servoIndex = ServoCount++; // assign a servo index to this instance + servos[this->servoIndex].ticks = usToTicks(DEFAULT_PULSE_WIDTH); // store default values + } else { + this->servoIndex = INVALID_SERVO; // too many servos + } +} + +uint8_t Servo::attach(int pin) +{ + return this->attach(pin, MIN_PULSE_WIDTH, MAX_PULSE_WIDTH); +} + +uint8_t Servo::attach(int pin, int min, int max) +{ + timer16_Sequence_t timer; + + if (this->servoIndex < MAX_SERVOS) { + pinMode(pin, OUTPUT); // set servo pin to output + servos[this->servoIndex].Pin.nbr = pin; + // todo min/max check: abs(min - MIN_PULSE_WIDTH) /4 < 128 + this->min = (MIN_PULSE_WIDTH - min)/4; //resolution of min/max is 4 uS + this->max = (MAX_PULSE_WIDTH - max)/4; + // initialize the timer if it has not already been initialized + timer = SERVO_INDEX_TO_TIMER(servoIndex); + if (isTimerActive(timer) == false) { + initISR(); + } + servos[this->servoIndex].Pin.isActive = true; // this must be set after the check for isTimerActive + } + return this->servoIndex; +} + +void Servo::detach() +{ + timer16_Sequence_t timer; + + servos[this->servoIndex].Pin.isActive = false; + timer = SERVO_INDEX_TO_TIMER(servoIndex); + //if(isTimerActive(timer) == false) { + // finISR(timer); +} + +void Servo::write(int value) +{ + // treat values less than 544 as angles in degrees (valid values in microseconds are handled as microseconds) + if (value < MIN_PULSE_WIDTH) + { + if (value < 0) + value = 0; + else if (value > 180) + value = 180; + + value = map(value, 0, 180, SERVO_MIN(), SERVO_MAX()); + } + writeMicroseconds(value); +} + +void Servo::writeMicroseconds(int value) +{ + // calculate and store the values for the given channel + byte channel = this->servoIndex; + if( (channel < MAX_SERVOS) ) // ensure channel is valid + { + if (value < SERVO_MIN()) // ensure pulse width is valid + value = SERVO_MIN(); + else if (value > SERVO_MAX()) + value = SERVO_MAX(); + + value = value - TRIM_DURATION; + value = usToTicks(value); // convert to ticks after compensating for interrupt overhead + servos[channel].ticks = value; + } +} + +int Servo::read() // return the value as degrees +{ + return map(readMicroseconds()+1, SERVO_MIN(), SERVO_MAX(), 0, 180); +} + +int Servo::readMicroseconds() +{ + unsigned int pulsewidth; + if (this->servoIndex != INVALID_SERVO) + pulsewidth = ticksToUs(servos[this->servoIndex].ticks) + TRIM_DURATION; + else + pulsewidth = 0; + + return pulsewidth; +} + +bool Servo::attached() +{ + return servos[this->servoIndex].Pin.isActive; +} + +#endif // ARDUINO_ARCH_SAM diff --git a/libraries/Servo/src/zpu20/ServoTimers.h b/libraries/Servo/src/zpu20/ServoTimers.h new file mode 100644 index 0000000..153b9cd --- /dev/null +++ b/libraries/Servo/src/zpu20/ServoTimers.h @@ -0,0 +1,34 @@ +/* + Servo.h - Interrupt driven Servo library for ZPUino- Version 2 + Copyright (c) 2009 Michael Margolis. All right reserved. + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +/* + * Defines for ZPUino timers used with Servo library + * + * If _useTimerX is defined then TimerX is a 16 bit timer on the current board + * timer16_Sequence_t enumerates the sequence that the timers should be allocated + * _Nbr_16timers indicates how many 16 bit timers are available. + */ + +/** + * ZPUino Only definitions + * -------------------- + */ +#ifndef ServoTimers_h +#define ServoTimers_h + +typedef enum { _timer1, _timer2, _Nbr_16timers } timer16_Sequence_t; + +#endif diff --git a/libraries/VGA_Wing/circuit/PSL_Papilio_One_500K.xise b/libraries/VGA_Wing/circuit/PSL_Papilio_One_500K.xise index cb5a3be..661ece6 100644 --- a/libraries/VGA_Wing/circuit/PSL_Papilio_One_500K.xise +++ b/libraries/VGA_Wing/circuit/PSL_Papilio_One_500K.xise @@ -18,26 +18,32 @@ + + + + + + diff --git a/libraries/VGA_Wing/circuit/PSL_Papilio_Pro_LX9.xise b/libraries/VGA_Wing/circuit/PSL_Papilio_Pro_LX9.xise index 461b4ed..65e2947 100644 --- a/libraries/VGA_Wing/circuit/PSL_Papilio_Pro_LX9.xise +++ b/libraries/VGA_Wing/circuit/PSL_Papilio_Pro_LX9.xise @@ -9,788 +9,36 @@ - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - + + - - + + - - + + - + - + - + @@ -1155,14 +403,6 @@ - - - - - - - - diff --git a/libraries/VGA_ZPUino/circuit/PSL_Papilio_Pro_LX9.xise b/libraries/VGA_ZPUino/circuit/PSL_Papilio_Pro_LX9.xise index edc5164..65e2947 100644 --- a/libraries/VGA_ZPUino/circuit/PSL_Papilio_Pro_LX9.xise +++ b/libraries/VGA_ZPUino/circuit/PSL_Papilio_Pro_LX9.xise @@ -9,785 +9,36 @@ - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - + + - - + + - - + + - + - + - + @@ -1152,14 +403,6 @@ - - - - - - - - diff --git a/libraries/ZPUino_2/circuit/PSL_Papilio_One_250K.xise b/libraries/ZPUino_2/circuit/PSL_Papilio_One_250K.xise index 616da4c..55685ae 100644 --- a/libraries/ZPUino_2/circuit/PSL_Papilio_One_250K.xise +++ b/libraries/ZPUino_2/circuit/PSL_Papilio_One_250K.xise @@ -18,18 +18,22 @@ + + + + diff --git a/libraries/ZPUino_2/circuit/PSL_Papilio_One_500K.xise b/libraries/ZPUino_2/circuit/PSL_Papilio_One_500K.xise index cb5a3be..661ece6 100644 --- a/libraries/ZPUino_2/circuit/PSL_Papilio_One_500K.xise +++ b/libraries/ZPUino_2/circuit/PSL_Papilio_One_500K.xise @@ -18,26 +18,32 @@ + + + + + + diff --git a/libraries/ZPUino_Vanilla/circuit/PSL_Papilio_One_250K.xise b/libraries/ZPUino_Vanilla/circuit/PSL_Papilio_One_250K.xise index 616da4c..55685ae 100644 --- a/libraries/ZPUino_Vanilla/circuit/PSL_Papilio_One_250K.xise +++ b/libraries/ZPUino_Vanilla/circuit/PSL_Papilio_One_250K.xise @@ -18,18 +18,22 @@ + + + + diff --git a/libraries/ZPUino_Vanilla/circuit/PSL_Papilio_One_500K.xise b/libraries/ZPUino_Vanilla/circuit/PSL_Papilio_One_500K.xise index cb5a3be..661ece6 100644 --- a/libraries/ZPUino_Vanilla/circuit/PSL_Papilio_One_500K.xise +++ b/libraries/ZPUino_Vanilla/circuit/PSL_Papilio_One_500K.xise @@ -18,26 +18,32 @@ + + + + + + diff --git a/libraries/ZPUino_Wings/circuit/250K/papilio_one_250k.bit b/libraries/ZPUino_Wings/circuit/250K/papilio_one_250k.bit index d3b11ff..86b6de4 100644 Binary files a/libraries/ZPUino_Wings/circuit/250K/papilio_one_250k.bit and b/libraries/ZPUino_Wings/circuit/250K/papilio_one_250k.bit differ diff --git a/libraries/ZPUino_Wings/circuit/500K/papilio_one_500k.bit b/libraries/ZPUino_Wings/circuit/500K/papilio_one_500k.bit index c401a37..e5d1359 100644 Binary files a/libraries/ZPUino_Wings/circuit/500K/papilio_one_500k.bit and b/libraries/ZPUino_Wings/circuit/500K/papilio_one_500k.bit differ diff --git a/libraries/ZPUino_Wings/circuit/DUO_LX9/papilio_duo_lx9.bit b/libraries/ZPUino_Wings/circuit/DUO_LX9/papilio_duo_lx9.bit index aecb3eb..465a904 100644 Binary files a/libraries/ZPUino_Wings/circuit/DUO_LX9/papilio_duo_lx9.bit and b/libraries/ZPUino_Wings/circuit/DUO_LX9/papilio_duo_lx9.bit differ diff --git a/libraries/ZPUino_Wings/circuit/LX9/papilio_pro.bit b/libraries/ZPUino_Wings/circuit/LX9/papilio_pro.bit index 25bbf5b..b3fa7bb 100644 Binary files a/libraries/ZPUino_Wings/circuit/LX9/papilio_pro.bit and b/libraries/ZPUino_Wings/circuit/LX9/papilio_pro.bit differ diff --git a/libraries/ZPUino_Wings/circuit/PSL_Papilio_DUO_LX9.xise b/libraries/ZPUino_Wings/circuit/PSL_Papilio_DUO_LX9.xise index c72c60d..8a39426 100644 --- a/libraries/ZPUino_Wings/circuit/PSL_Papilio_DUO_LX9.xise +++ b/libraries/ZPUino_Wings/circuit/PSL_Papilio_DUO_LX9.xise @@ -9,38 +9,794 @@ - + - + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - + - + - + - + - + - - - + + + - + - + @@ -391,9 +1147,7 @@ - - - + @@ -406,6 +1160,14 @@ + + + + + + + + diff --git a/libraries/ZPUino_Wings/circuit/PSL_Papilio_One_250k.xise b/libraries/ZPUino_Wings/circuit/PSL_Papilio_One_250k.xise index 616da4c..2209022 100644 --- a/libraries/ZPUino_Wings/circuit/PSL_Papilio_One_250k.xise +++ b/libraries/ZPUino_Wings/circuit/PSL_Papilio_One_250k.xise @@ -9,36 +9,796 @@ - + - + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + + - + - + + - + - + + - + - - - + + + + - + - + - + @@ -362,6 +1122,14 @@ + + + + + + + + diff --git a/libraries/ZPUino_Wings/circuit/PSL_Papilio_One_500K.xise b/libraries/ZPUino_Wings/circuit/PSL_Papilio_One_500K.xise index cb5a3be..3ba1d93 100644 --- a/libraries/ZPUino_Wings/circuit/PSL_Papilio_One_500K.xise +++ b/libraries/ZPUino_Wings/circuit/PSL_Papilio_One_500K.xise @@ -9,44 +9,806 @@ - + - + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + + - + - + + - + - + + - + - + + - + - + + - + - - + + + - + - + - + @@ -370,6 +1132,14 @@ + + + + + + + + diff --git a/libraries/ZPUino_Wings/circuit/PSL_Papilio_Pro_LX9.xise b/libraries/ZPUino_Wings/circuit/PSL_Papilio_Pro_LX9.xise index 461b4ed..7e032d2 100644 --- a/libraries/ZPUino_Wings/circuit/PSL_Papilio_Pro_LX9.xise +++ b/libraries/ZPUino_Wings/circuit/PSL_Papilio_Pro_LX9.xise @@ -328,6 +328,18 @@ + + + + + + + + + + + + @@ -353,7 +365,7 @@ - + @@ -404,7 +416,7 @@ - + @@ -424,35 +436,22 @@ - + - + - + - - - - - - - - - - - - - - + @@ -460,37 +459,37 @@ - + - + - + - + - + - + - + @@ -516,17 +515,17 @@ - + - + - + @@ -568,20 +567,20 @@ - + - + - + - + @@ -591,7 +590,7 @@ - + @@ -601,22 +600,22 @@ - + - + - + - + @@ -646,17 +645,17 @@ - + - + - + @@ -664,7 +663,7 @@ - + @@ -679,7 +678,7 @@ - + @@ -689,37 +688,37 @@ - + - + - + - + - + - + - + @@ -732,6 +731,11 @@ + + + + + @@ -781,11 +785,11 @@ - + - + diff --git a/libraries/ZPUino_Wings/circuit/Papilio_DUO_LX9.sch b/libraries/ZPUino_Wings/circuit/Papilio_DUO_LX9.sch index 44b2f8f..c276a50 100644 --- a/libraries/ZPUino_Wings/circuit/Papilio_DUO_LX9.sch +++ b/libraries/ZPUino_Wings/circuit/Papilio_DUO_LX9.sch @@ -60,8 +60,6 @@ - - @@ -74,8 +72,6 @@ - - @@ -107,6 +103,12 @@ + + + + + + @@ -144,8 +146,6 @@ - - @@ -158,14 +158,16 @@ - - + + + + 2014-10-31T16:12:30 @@ -460,6 +462,14 @@ + + 2015-4-8T22:40:35 + + + + + + @@ -480,8 +490,8 @@ - - + + @@ -590,8 +600,8 @@ - - + + @@ -671,6 +681,12 @@ + + + + + + Replace DUO_SW1 with a Pulldown if you want the ATmega32U4 chip to run when this circuit is loaded. @@ -867,12 +883,6 @@ - - - - - - @@ -909,12 +919,6 @@ - - - - - - @@ -965,8 +969,6 @@ - - @@ -979,8 +981,6 @@ - - @@ -1114,5 +1114,31 @@ CS Pin is WING_CL4 + + + + + + + + + + + + + + + For the Wii Chuck + + + AL used For the Wii Chuck + + + + + + + + \ No newline at end of file diff --git a/libraries/ZPUino_Wings/circuit/Papilio_One_250K.sch b/libraries/ZPUino_Wings/circuit/Papilio_One_250K.sch index c644b26..fa73b9b 100644 --- a/libraries/ZPUino_Wings/circuit/Papilio_One_250K.sch +++ b/libraries/ZPUino_Wings/circuit/Papilio_One_250K.sch @@ -28,8 +28,6 @@ - - @@ -88,6 +86,8 @@ + + @@ -110,8 +110,6 @@ - - @@ -376,6 +374,14 @@
+ + 2015-4-8T22:40:35 + + + + + + @@ -403,8 +409,8 @@ - - + + @@ -419,8 +425,8 @@ - - + + @@ -533,8 +539,8 @@ - - + + @@ -549,6 +555,12 @@ + + + + + + @@ -569,12 +581,6 @@ - - - - - - @@ -617,12 +623,6 @@ - - - - - - @@ -701,8 +701,6 @@ - - @@ -717,8 +715,6 @@ - - @@ -899,5 +895,23 @@ + + + + + + + + + For the Wii Chuck + + + + + + + + + AL used For the Wii Chuck \ No newline at end of file diff --git a/libraries/ZPUino_Wings/circuit/Papilio_One_500K.sch b/libraries/ZPUino_Wings/circuit/Papilio_One_500K.sch index fe872cd..c0c3afd 100644 --- a/libraries/ZPUino_Wings/circuit/Papilio_One_500K.sch +++ b/libraries/ZPUino_Wings/circuit/Papilio_One_500K.sch @@ -12,8 +12,6 @@ - - @@ -28,8 +26,6 @@ - - @@ -92,14 +88,16 @@ + + + + - - @@ -114,8 +112,6 @@ - - @@ -143,6 +139,8 @@ + + 2014-10-31T16:12:30 @@ -389,6 +387,14 @@ + + 2015-4-8T22:40:35 + + + + + + @@ -416,8 +422,8 @@ - - + + @@ -432,8 +438,8 @@ - - + + @@ -548,8 +554,8 @@ - - + + @@ -568,6 +574,12 @@ + + + + + + @@ -588,12 +600,6 @@ - - - - - - @@ -636,12 +642,6 @@ - - - - - - @@ -720,8 +720,6 @@ - - @@ -736,8 +734,6 @@ - - @@ -938,5 +934,25 @@ + + + For the Wii Chuck + + + + + + + + + + + + + + + + + AL used For the Wii Chuck \ No newline at end of file diff --git a/libraries/ZPUino_Wings/circuit/Papilio_Pro.sch b/libraries/ZPUino_Wings/circuit/Papilio_Pro.sch index a3d6bf2..693ad18 100644 --- a/libraries/ZPUino_Wings/circuit/Papilio_Pro.sch +++ b/libraries/ZPUino_Wings/circuit/Papilio_Pro.sch @@ -12,8 +12,6 @@ - - @@ -22,14 +20,6 @@ - - - - - - - - @@ -58,8 +48,6 @@ - - @@ -97,14 +85,26 @@ + + + + + + + + + + + + + + - - @@ -113,14 +113,6 @@ - - - - - - - - @@ -148,6 +140,16 @@ + + + + + + + + + + 2014-10-31T16:12:30 @@ -419,14 +421,18 @@ + + 2015-4-8T22:40:35 + + + + + + - - - - @@ -446,8 +452,8 @@ - - + + @@ -522,8 +528,8 @@ - - + + @@ -613,6 +619,16 @@ + + + + + + + + + + @@ -633,12 +649,6 @@ - - - - - - @@ -663,30 +673,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - @@ -765,8 +751,6 @@ - - @@ -776,13 +760,6 @@ - - - - - - - @@ -827,12 +804,6 @@ - - - - - - @@ -841,8 +812,6 @@ - - @@ -1008,5 +977,65 @@ CS Pin is WING_CL4 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + For the Wii Chuck + AL used For the Wii Chuck + + + + + + + + + + \ No newline at end of file diff --git a/libraries/ZPUino_Wings/circuit/schematic_papilio_DUO.pdf b/libraries/ZPUino_Wings/circuit/schematic_papilio_DUO.pdf index f1600d8..a48c461 100644 Binary files a/libraries/ZPUino_Wings/circuit/schematic_papilio_DUO.pdf and b/libraries/ZPUino_Wings/circuit/schematic_papilio_DUO.pdf differ diff --git a/libraries/ZPUino_Wings/circuit/schematic_papilio_one_250k.pdf b/libraries/ZPUino_Wings/circuit/schematic_papilio_one_250k.pdf index 2262c7f..7dd3623 100644 Binary files a/libraries/ZPUino_Wings/circuit/schematic_papilio_one_250k.pdf and b/libraries/ZPUino_Wings/circuit/schematic_papilio_one_250k.pdf differ diff --git a/libraries/ZPUino_Wings/circuit/schematic_papilio_one_500k.pdf b/libraries/ZPUino_Wings/circuit/schematic_papilio_one_500k.pdf index e7d72f9..c1d0f00 100644 Binary files a/libraries/ZPUino_Wings/circuit/schematic_papilio_one_500k.pdf and b/libraries/ZPUino_Wings/circuit/schematic_papilio_one_500k.pdf differ diff --git a/libraries/ZPUino_Wings/circuit/schematic_papilio_pro.pdf b/libraries/ZPUino_Wings/circuit/schematic_papilio_pro.pdf index 2e4fdf4..748b2ac 100644 Binary files a/libraries/ZPUino_Wings/circuit/schematic_papilio_pro.pdf and b/libraries/ZPUino_Wings/circuit/schematic_papilio_pro.pdf differ diff --git a/libraries/ZPUino_Wishbone_Peripherals/AUDIO_zpuino_wb_pokey.sym b/libraries/ZPUino_Wishbone_Peripherals/AUDIO_zpuino_wb_pokey.sym deleted file mode 100644 index 9a39ddd..0000000 --- a/libraries/ZPUino_Wishbone_Peripherals/AUDIO_zpuino_wb_pokey.sym +++ /dev/null @@ -1,17 +0,0 @@ - - - BLOCK - 2014-10-30T17:27:57 - - - - - Pokey Audio Chip - - - - - - - - diff --git a/libraries/ZPUino_Wishbone_Peripherals/AUDIO_zpuino_wb_pokey.vhd b/libraries/ZPUino_Wishbone_Peripherals/AUDIO_zpuino_wb_pokey.vhd deleted file mode 100644 index 1284080..0000000 --- a/libraries/ZPUino_Wishbone_Peripherals/AUDIO_zpuino_wb_pokey.vhd +++ /dev/null @@ -1,589 +0,0 @@ --- --- A simulation model of Asteroids Deluxe hardware --- Copyright (c) MikeJ - May 2004 --- --- All rights reserved --- --- Redistribution and use in source and synthezised forms, with or without --- modification, are permitted provided that the following conditions are met: --- --- Redistributions of source code must retain the above copyright notice, --- this list of conditions and the following disclaimer. --- --- Redistributions in synthesized 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. --- --- Neither the name of the author nor the names of other contributors may --- be used to endorse or promote products derived from this software without --- specific prior written permission. --- --- THIS CODE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "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 AUTHOR 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. --- --- You are responsible for any legal issues arising from your use of this code. --- --- The latest version of this file can be found at: www.fpgaarcade.com --- --- Email support@fpgaarcade.com --- --- Revision list --- --- version 002 return 00 on allpot when fast scan completed to fix self test --- version 001 initial release (this version should be considered Beta --- it seems to make all the right sort of sounds however ... ) --- -library ieee; - use ieee.std_logic_1164.all; - use ieee.std_logic_arith.all; - use ieee.std_logic_unsigned.all; - -library board; - use board.zpuino_config.all; - use board.zpu_config.all; - use board.zpupkg.all; - - -entity AUDIO_zpuino_wb_pokey is - port ( - wishbone_in : in std_logic_vector(100 downto 0); - wishbone_out : out std_logic_vector(100 downto 0); - - data_out: out std_logic_vector(7 downto 0) --Digital data out - this should be fed into an audio mixer or Delta-Sigma DAC. - ); -end; - - -architecture RTL of AUDIO_zpuino_wb_pokey is - type array_8x8 is array (0 to 7) of std_logic_vector(7 downto 0); - type array_4x8 is array (1 to 4) of std_logic_vector(7 downto 0); - type array_4x4 is array (1 to 4) of std_logic_vector(3 downto 0); - type array_4x9 is array (1 to 4) of std_logic_vector(8 downto 0); - type array_2x17 is array (1 to 2) of std_logic_vector(16 downto 0); - type bool_4 is array (1 to 4) of boolean; - - --signal oe : std_logic; - -- - signal ena : std_logic; - - signal ena_64k_15k : std_logic; - signal cnt_64k : std_logic_vector(4 downto 0) := (others => '0'); - signal ena_64k : std_logic; - signal cnt_15k : std_logic_vector(6 downto 0) := (others => '0'); - signal ena_15k : std_logic; - -- - signal poly4 : std_logic_vector(3 downto 0) := (others => '0'); - signal poly5 : std_logic_vector(4 downto 0) := (others => '0'); - signal poly9 : std_logic_vector(8 downto 0) := (others => '0'); - signal poly17 : std_logic_vector(16 downto 0) := (others => '0'); - signal poly_17_9 : std_logic; - - -- registers wb_dat_i - signal audf : array_4x8 := (x"00",x"00",x"00",x"00"); - signal audc : array_4x8 := (x"00",x"00",x"00",x"00"); - signal audctl : std_logic_vector(7 downto 0) := "00000000"; - signal stimer : std_logic_vector(7 downto 0); - signal skres : std_logic_vector(7 downto 0); - signal potgo : std_logic; - signal serout : std_logic_vector(7 downto 0); - signal irqen : std_logic_vector(7 downto 0); - signal skctls : std_logic_vector(7 downto 0); - --signal reset : std_logic; - -- - - -- registers wb_dat_o - --signal kbcode : std_logic_vector(7 downto 0); - signal random : std_logic_vector(7 downto 0); - --signal serin : std_logic_vector(7 downto 0); - --signal irqst : std_logic_vector(7 downto 0); - --signal skstat : std_logic_vector(7 downto 0); - -- - -- - --signal pot_fin : std_logic; - --signal pot_cnt : std_logic_vector(7 downto 0); - --signal pot_val : array_8x8; - --signal pin_reg : std_logic_vector(7 downto 0); - --signal pin_reg_gated : std_logic_vector(7 downto 0); - -- - signal chan_ena : std_logic_vector(4 downto 1); - signal tone_gen_div : std_logic_vector(4 downto 1); - signal tone_gen_cnt : array_4x8 := (others => (others => '0')); - signal tone_gen_div_mux : std_logic_vector(4 downto 1); - signal tone_gen_zero : std_logic_vector(4 downto 1); - signal tone_gen_zero_t : array_4x8 := (others => (others => '0')); - signal chan_done_load : std_logic_vector(4 downto 1) := (others => '0'); - -- - signal poly_sel : std_logic_vector(4 downto 1); - signal poly_sel_hp : std_logic_vector(4 downto 1); - signal poly_sel_hp_t1 : std_logic_vector(4 downto 1); - signal poly_sel_hp_reg : std_logic_vector(4 downto 1); - signal tone_gen_final : std_logic_vector(4 downto 1) := (others => '0'); - - signal o_audio : std_logic_vector(7 downto 0) := (others => '0'); - - -- clock divider - - constant PRE_CLOCK_DIVIDER: integer := 54; - signal clk177: std_logic := '0'; - signal predivcnt: integer; - - signal wb_clk_i: std_logic; -- Wishbone clock - signal wb_rst_i: std_logic; -- Wishbone reset (synchronous) - signal wb_dat_i: std_logic_vector(31 downto 0); -- Wishbone data input (32 bits) - signal wb_adr_i: std_logic_vector(26 downto 2); -- Wishbone address input (32 bits) - signal wb_we_i: std_logic; -- Wishbone write enable signal - signal wb_cyc_i: std_logic; -- Wishbone cycle signal - signal wb_stb_i: std_logic; -- Wishbone strobe signal - - signal wb_dat_o: std_logic_vector(31 downto 0); -- Wishbone data output (32 bits) - signal wb_ack_o: std_logic; -- Wishbone acknowledge out signal - signal wb_inta_o: std_logic; - -begin --- Unpack the wishbone array into signals so the modules code is not confusing. - wb_clk_i <= wishbone_in(61); - wb_rst_i <= wishbone_in(60); - wb_dat_i <= wishbone_in(59 downto 28); - wb_adr_i <= wishbone_in(27 downto 3); - wb_we_i <= wishbone_in(2); - wb_cyc_i <= wishbone_in(1); - wb_stb_i <= wishbone_in(0); - - wishbone_out(49 downto 34) <= x"02" & x"02"; -- Vendor: FPGAArcade Product: POKEY - wishbone_out(33 downto 2) <= wb_dat_o; - wishbone_out(1) <= wb_ack_o; - wishbone_out(0) <= wb_inta_o; - - -- wishbone signals - wb_ack_o <= wb_cyc_i and wb_stb_i; - wb_inta_o <= '0'; - - ena <= '1'; - data_out <= o_audio; - - predivider: process(wb_clk_i) - begin - if rising_edge(wb_clk_i) then - if wb_rst_i='1' then - clk177 <= '0'; - predivcnt <= PRE_CLOCK_DIVIDER; - else - clk177 <='0'; - if predivcnt=0 then - clk177 <='1'; - predivcnt <= PRE_CLOCK_DIVIDER; - else - predivcnt <= predivcnt -1 ; - end if; - end if; - end if; - end process; - - p_dividers : process - begin - wait until rising_edge(wb_clk_i); - if clk177='1' then - if (ena = '1') then - ena_64k <= '0'; - if cnt_64k = "00000" then - cnt_64k <= "11011"; -- 28 - 1 - ena_64k <= '1'; - else - cnt_64k <= cnt_64k - "1"; - end if; - - ena_15k <= '0'; - if cnt_15k = "0000000" then - cnt_15k <= "1110001"; -- 114 - 1 - ena_15k <= '1'; - else - cnt_15k <= cnt_15k - "1"; - end if; - end if; - end if; - end process; - - p_ena_64k_15k : process(ena_64k, ena_15k, audctl) - begin - if (audctl(0) = '1') then - ena_64k_15k <= ena_15k; - else - ena_64k_15k <= ena_64k; - end if; - end process; - - p_poly : process - variable poly9_zero : std_logic; - variable poly17_zero : std_logic; - begin - wait until rising_edge(wb_clk_i); - if (ena = '1') then - poly4 <= poly4(2 downto 0) & not (poly4(3) xor poly4(2)); - poly5 <= poly5(3 downto 0) & not (poly5(4) xor poly4(2)); -- used inverted - - -- not correct - poly9_zero := '0'; - if (poly9 = "000000000") then poly9_zero := '1'; end if; - poly9 <= poly9(7 downto 0) & (poly9(8) xor poly9(3) xor poly9_zero); - - poly17_zero := '0'; - if (poly17 = "00000000000000000") then poly17_zero := '1'; end if; - poly17 <= poly17(15 downto 0) & (poly17(16) xor poly17(2) xor poly17_zero); - - end if; - end process; - - p_random_mux : process(audctl, poly9, poly17) - begin - -- bit unnecessary this .... - for i in 0 to 7 loop - if (audctl(7) = '1') then -- 9 bit poly - random(i) <= poly9(8-i); - else - random(i) <= poly17(16-i); - end if; - end loop; - - if (audctl(7) = '1') then - poly_17_9 <= poly9(8); - else - poly_17_9 <= poly17(16); - end if; - end process; - - p_wdata : process - begin - wait until rising_edge(wb_clk_i); - potgo <= '0'; - - --if (reset = '1') then - -- no idea what the reset state is - --audf <= (others => (others => '0')); - --audc <= (others => (others => '0')); - --audctl <= x"00"; - --else - if (wb_we_i = '1' and wb_cyc_i='1' and wb_stb_i='1') then - case wb_adr_i(5 downto 2) is - when x"0" => audf(1) <= wb_dat_i(7 downto 0); - when x"1" => audc(1) <= wb_dat_i(7 downto 0); - when x"2" => audf(2) <= wb_dat_i(7 downto 0); - when x"3" => audc(2) <= wb_dat_i(7 downto 0); - when x"4" => audf(3) <= wb_dat_i(7 downto 0); - when x"5" => audc(3) <= wb_dat_i(7 downto 0); - when x"6" => audf(4) <= wb_dat_i(7 downto 0); - when x"7" => audc(4) <= wb_dat_i(7 downto 0); - when x"8" => audctl <= wb_dat_i(7 downto 0); - when x"9" => stimer <= wb_dat_i(7 downto 0); - when x"A" => skres <= wb_dat_i(7 downto 0); - when x"B" => potgo <= '1'; - --when x"C" => - when x"D" => serout <= wb_dat_i(7 downto 0); - when x"E" => irqen <= wb_dat_i(7 downto 0); - when x"F" => skctls <= wb_dat_i(7 downto 0); - when others => null; - end case; - end if; - --end if; - end process; - - --p_reset : process(skctls) - --begin - -- chip in reset if bits 1..0 of skctls are both zero - --reset <= '0'; - --if (skctls(1 downto 0) = "00") then - -- reset <= '1'; - --end if; - --end process; - - p_rdata : process(wb_adr_i, random) --,pin_reg_gated, pot_val, kbcode, serin, irqst, skstat) - begin - case wb_adr_i(5 downto 2) IS - when x"A" => - wb_dat_o(7 downto 0) <= random; - when others => - wb_dat_o(7 downto 0) <= (others => DontCareValue); - end case; - end process; - - -- POT ANALOGUE IN UNTESTED !! --- p_pot_cnt : process --- begin --- wait until rising_edge(wb_clk_i); --- if (potgo = '1') then --- pot_cnt <= x"00"; --- elsif ((ena_15k = '1') or (skctls(2) = '1')) and (ena = '1') then -- fast scan mode --- pot_cnt <= pot_cnt + "1"; --- end if; --- end process; --- --- p_pot_comp : process --- begin --- wait until rising_edge(wb_clk_i); --- if (reset = '1') then --- pot_fin <= '1'; --- else --- if (potgo = '1') then --- pot_fin <= '0'; --- elsif (pot_cnt = x"E4") then -- 228 --- pot_fin <= '1'; --- end if; --- end if; --- end process; --- --- p_pot_val : process --- begin --- wait until rising_edge(wb_clk_i); --- for i in 0 to 7 loop --- if (pot_fin = '0') and (pin_reg(i) = '0') then --- -- continue latching counter value until input reaches ViH threshold --- pot_val(i) <= pot_cnt; --- end if; --- end loop; --- end process; - - -- dump transistors - --PIN <= x"00" when (pot_fin = '1') else (others => 'Z'); --- p_in_gate : process(pin_reg, reset) -- dump transistor fakeup --- begin --- pin_reg_gated <= pin_reg; --- -- I think the datasheet lies about dump transistors being disabled --- -- in fast scan mode, as the self test fails .... --- if (reset = '1') or (pot_fin = '1') then --and (skctls(2) = '0')) --- pin_reg_gated <= x"00"; --- end if; --- end process; - - p_tone_cnt_ena : process(audctl, ena_64k_15k, tone_gen_div) - variable chan_ena1, chan_ena3 : std_ulogic; - begin - - if (audctl(6) = '1') then - chan_ena1 := '1'; -- 1.5 MHz, - else - chan_ena1 := ena_64k_15k; - end if; - chan_ena(1) <= chan_ena1; - - if (audctl(4) = '1') then -- chan 1/2 joined - chan_ena(2) <= chan_ena1; - else - chan_ena(2) <= ena_64k_15k; - end if; - - if (audctl(5) = '1') then - chan_ena3 := '1'; -- 1.5 MHz, - else - chan_ena3 := ena_64k_15k; -- 64 KHz - end if; - chan_ena(3) <= chan_ena3; - - if (audctl(3) = '1') then -- chan 3/4 joined - chan_ena(4) <= chan_ena3; - else - chan_ena(4) <= ena_64k_15k; -- 64 KHz - end if; - end process; - - p_tone_generator_zero : process(tone_gen_cnt, chan_ena) - begin - for i in 1 to 4 loop - if (tone_gen_cnt(i) = "00000000") and (chan_ena(i) = '1') then - tone_gen_zero(i) <= '1'; - else - tone_gen_zero(i) <= '0'; - end if; - end loop; - end process; - - p_tone_generators : process - variable chan_load : std_logic_vector(4 downto 1); - variable chan_dec : std_logic_vector(4 downto 1); - begin - -- quite tricky this .. but I think it does the correct stuff - -- bet this is not how is was done originally ! - -- - -- nasty frig to easily get exact chip behaviour in high speed mode - -- fout = fin / 2(audf + n) when n=4 or 7 in 16 bit mode - wait until rising_edge(wb_clk_i); - if (ena = '1' and clk177='1') then - tone_gen_div <= "0000"; - - if (audctl(4) = '1') then -- chan 1/2 joined - chan_load(1) := '0'; - chan_load(2) := '0'; - if (tone_gen_zero_t(1)(5) = '1') and (tone_gen_zero_t(2)(5) = '1') and (chan_done_load(1) = '0') then - chan_load(1) := '1'; - chan_load(2) := '1'; - end if; - chan_dec(1) := '1'; - chan_dec(2) := tone_gen_zero(1); - else - chan_load(1) := tone_gen_zero_t(1)(2) and not chan_done_load(1); - chan_load(2) := tone_gen_zero_t(2)(2) and not chan_done_load(2); - - chan_dec(1) := '1'; - chan_dec(2) := '1'; - end if; - - if (audctl(3) = '1') then -- chan 1/2 joined - chan_load(3) := '0'; - chan_load(4) := '0'; - if (tone_gen_zero_t(3)(5) = '1') and (tone_gen_zero_t(4)(5) = '1') and (chan_done_load(3) = '0') then - chan_load(3) := '1'; - chan_load(4) := '1'; - end if; - chan_dec(3) := '1'; - chan_dec(4) := tone_gen_zero(3); - else - chan_load(3) := tone_gen_zero_t(3)(2) and not chan_done_load(3); - chan_load(4) := tone_gen_zero_t(4)(2) and not chan_done_load(4); - - chan_dec(3) := '1'; - chan_dec(4) := '1'; - end if; - - for i in 1 to 4 loop - - if (chan_load(i) = '1') then - chan_done_load(i) <= '1'; - tone_gen_div(i) <= '1'; - tone_gen_cnt(i) <= audf(i); - elsif (chan_dec(i) = '1') and (chan_ena(i) = '1') then - chan_done_load(i) <= '0'; - tone_gen_cnt(i) <= tone_gen_cnt(i) - "1"; - end if; - - tone_gen_div(i) <= chan_load(i); - tone_gen_zero_t(i)(7 downto 0) <= tone_gen_zero_t(i)(6 downto 0) & tone_gen_zero(i); - end loop; - - end if; - end process; - - p_tone_generator_mux : process(audctl, tone_gen_div) - begin - if (audctl(4) = '1') then -- chan 1/2 joined - tone_gen_div_mux(1) <= tone_gen_div(1); -- do they both waggle - tone_gen_div_mux(2) <= tone_gen_div(2); -- or do I mute chan 1? - else - tone_gen_div_mux(1) <= tone_gen_div(1); - tone_gen_div_mux(2) <= tone_gen_div(2); - end if; - - if (audctl(3) = '1') then -- chan 3/4 joined - tone_gen_div_mux(3) <= tone_gen_div(3); -- ditto - tone_gen_div_mux(4) <= tone_gen_div(4); - else - tone_gen_div_mux(3) <= tone_gen_div(3); - tone_gen_div_mux(4) <= tone_gen_div(4); - end if; - end process; - - p_poly_gating : process(audc, poly4, poly5, poly_17_9, tone_gen_div_mux) - variable filter_a : std_logic_vector(4 downto 1); - variable filter_b : std_logic_vector(4 downto 1); - begin - for i in 1 to 4 loop - if (audc(i)(7) = '0') then - filter_a(i) := poly5(4) and tone_gen_div_mux(i);-- 5 bit poly - else - filter_a(i) := tone_gen_div_mux(i); - end if; - - if (audc(i)(6) = '0') then - filter_b(i) := poly_17_9 and filter_a(i);-- 17 bit poly - else - filter_b(i) := poly4(3) and filter_a(i);-- 4 bit poly - end if; - - if (audc(i)(5) = '0') then - poly_sel(i) <= filter_b(i); - else - poly_sel(i) <= filter_a(i); - end if; - end loop; - end process; - - p_high_pass_filters : process(audctl, poly_sel, poly_sel_hp_reg) - begin - poly_sel_hp <= poly_sel; - - if (audctl(2) = '1') then - poly_sel_hp(1) <= poly_sel(1) xor poly_sel_hp_reg(1); - end if; - - if (audctl(1) = '1') then - poly_sel_hp(2) <= poly_sel(2) xor poly_sel_hp_reg(2); - end if; - end process; - - p_audio_out : process - begin - wait until rising_edge(wb_clk_i); - if (ena = '1' and clk177='1') then - for i in 1 to 4 loop - -- filter reg - if (tone_gen_div(3) = '1') then -- tone gen 1 clocked by gen 3 - poly_sel_hp_reg(1) <= poly_sel(1); - end if; - - if (tone_gen_div(4) = '1') then -- tone gen 2 clocked by gen 4 - poly_sel_hp_reg(2) <= poly_sel(2); - end if; - - poly_sel_hp_t1 <= poly_sel_hp; - - if (poly_sel_hp(i) = '1') and (poly_sel_hp_t1(i) = '0') then -- rising edge - tone_gen_final(i) <= not tone_gen_final(i); - end if; - end loop; - end if; - end process; - - p_op_mixer : process - variable vol : array_4x4; - variable sum12 : std_logic_vector(4 downto 0); - variable sum34 : std_logic_vector(4 downto 0); - variable sum : std_logic_vector(5 downto 0); - begin - wait until rising_edge(wb_clk_i); - if (ena = '1') then - for i in 1 to 4 loop - if (audc(i)(4) = '1') then -- vol only - vol(i) := audc(i)(3 downto 0); - else - if (tone_gen_final(i) = '1') then - vol(i) := audc(i)(3 downto 0); - else - vol(i) := "0000"; - end if; - end if; - end loop; - - sum12 := ('0' & vol(1)) + ('0' & vol(2)); - sum34 := ('0' & vol(3)) + ('0' & vol(4)); - sum := ('0' & sum12) + ('0' & sum34); - - if (wb_rst_i = '1') then - o_audio <= "00000000"; - else - if (sum(5) = '0') then - o_audio <= sum(4 downto 0) & "000"; - else -- clip - o_audio <= "11111111"; - end if; - end if; - end if; - end process; - - -- keyboard / serial etc to do -end architecture RTL; diff --git a/libraries/ZPUino_Wishbone_Peripherals/i2c_master_top.vhd b/libraries/ZPUino_Wishbone_Peripherals/i2c_master_top.vhd index 0a54f69..24992c6 100644 --- a/libraries/ZPUino_Wishbone_Peripherals/i2c_master_top.vhd +++ b/libraries/ZPUino_Wishbone_Peripherals/i2c_master_top.vhd @@ -70,6 +70,7 @@ library ieee; use ieee.std_logic_1164.all; use ieee.numeric_std.all; + library work; use work.zpuinopkg.all; diff --git a/libraries/blank/circuit/PSL_Papilio_DUO_LX9.xise b/libraries/blank/circuit/PSL_Papilio_DUO_LX9.xise index 771c2f6..c72c60d 100644 --- a/libraries/blank/circuit/PSL_Papilio_DUO_LX9.xise +++ b/libraries/blank/circuit/PSL_Papilio_DUO_LX9.xise @@ -9,741 +9,32 @@ - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - + - + - + - - + + - + @@ -1100,7 +391,9 @@ - + + + @@ -1113,14 +406,6 @@ - - - - - - - - diff --git a/libraries/blank/circuit/PSL_Papilio_One_250k.xise b/libraries/blank/circuit/PSL_Papilio_One_250k.xise index c6fe03e..55685ae 100644 --- a/libraries/blank/circuit/PSL_Papilio_One_250k.xise +++ b/libraries/blank/circuit/PSL_Papilio_One_250k.xise @@ -9,745 +9,40 @@ - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - + + - + - + + - + - + + - + - - - + + + + - + - + - + @@ -1071,14 +366,6 @@ - - - - - - - - diff --git a/libraries/blank/circuit/PSL_Papilio_One_500K.xise b/libraries/blank/circuit/PSL_Papilio_One_500K.xise index 25251d6..661ece6 100644 --- a/libraries/blank/circuit/PSL_Papilio_One_500K.xise +++ b/libraries/blank/circuit/PSL_Papilio_One_500K.xise @@ -9,753 +9,50 @@ - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - + + - + - + + - + - + + - + - + + - + - + + - + - - + + + - + - + - + @@ -1079,14 +376,6 @@ - - - - - - - - diff --git a/libraries/blank/circuit/PSL_Papilio_Pro_LX9.xise b/libraries/blank/circuit/PSL_Papilio_Pro_LX9.xise index 068211c..65e2947 100644 --- a/libraries/blank/circuit/PSL_Papilio_Pro_LX9.xise +++ b/libraries/blank/circuit/PSL_Papilio_Pro_LX9.xise @@ -9,745 +9,36 @@ - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - + + + - - - + + + - - - + + + - - + + - + - + - + @@ -1112,14 +403,6 @@ - - - - - - - - diff --git a/libraries/menus/gfxframebuffer.cpp b/libraries/menus/gfxframebuffer.cpp new file mode 100644 index 0000000..da1b14b --- /dev/null +++ b/libraries/menus/gfxframebuffer.cpp @@ -0,0 +1,28 @@ +#include "gfxframebuffer.h" + +void GFXFramebuffer_class::overlayToFramebuffer(Framebuffer &fb, int dx, int dy) +{ + int x,y,z; + + for (y=0; y::clear(uint16_t color) +{ + int i; + for (i=0;i +#include +#endif + +#include "Adafruit_GFX.h" +#include "ZPUino_GFX.h" + +using namespace ZPUino; + +template + class GFXFramebuffer_class: + public Adafruit_GFX_core, + public Framebuffer +{ +public: + unsigned NUMPIXELS; + PixelType transColor; + + GFXFramebuffer_class(): Adafruit_GFX_core() + { + transColor = 0; + } + + void setTransparentColor(PixelType p) + { + transColor = p; + } + + void begin(int width, int height) + { + NUMPIXELS = width*height; + Framebuffer::allocate(NUMPIXELS,width); + Adafruit_GFX_core::begin(width,height); + } + + virtual void drawPixel(int x, int y, PixelType v) + { + if (x::width() && y::height()) + Framebuffer::getFramebuffer()[x+(y*Framebuffer::getStride())]=v; + } +#if 0 + void overlayToFramebuffer(unsigned int *dest) + { + int i,z; + for (i=0;i d = sA+dA-sA == dA + 0 => d = sA + 0.5 => d = sA + 0.5dA - 0.5sA = + */ + } + } + } +#endif + void overlayToFramebuffer(Framebuffer &fb, int dx, int dy); + void clear(PixelType color=0); + +}; + +#endif \ No newline at end of file diff --git a/libraries/menus/menus.cpp b/libraries/menus/menus.cpp new file mode 100644 index 0000000..df9e0ad --- /dev/null +++ b/libraries/menus/menus.cpp @@ -0,0 +1,286 @@ +#include "gfxframebuffer.h" +#include "menus.h" + +#ifdef __linux__ +#include "SDL.h" +#endif + +static ZPUino_GFX_class *gfx; + +GFXFramebuffer_class GFXFrameBuffer; +static abstractMenuEntry *topMenu; +static abstractMenuEntry *currentMenu; + +void menusSetRenderer(ZPUino_GFX_class*g) +{ + gfx=g; +} + +void subMenu::appendChild(abstractMenuEntry *child) +{ + abstractMenuEntry *c; + + if (m_children==NULL) { + m_children=child; + } else { + for (c=m_children;c->hasNext(); c=c->getNext()); + c->link(child); + } +} + +void subMenu::deleteChilds() +{ + while (m_children) { + abstractMenuEntry *e = m_children; + m_children = m_children->getNext(); + delete(e); + } +} + +abstractMenuEntry* subMenu::at(int index) +{ + abstractMenuEntry *c = NULL; + + for (c=m_children;c->hasNext(); c=c->getNext()) { + if (index==0) + return c; + index--; + } + return c; +} + +#define TITLEHEIGHT 11 +#define TITLEWIDTH 120 +#define TITLEXOFFSET 8 +#define TITLEYOFFSET 8 + +#define ITEMOFFSET 7 +#define ITEMWIDTH (TITLEWIDTH - ITEMOFFSET - 7) +#define ITEMHEIGHT 9 +#define ITEMSEP (ITEMHEIGHT+1) + +#define FIRSTITEMVPOS (TITLEHEIGHT+TITLEYOFFSET+1) + +//#define ITEMALPHA 0xc0 +//#define TITLEALPHA 0xf0 +#define TITLECOLOR 0xffff00 +#define TITLEBG 0x4f0000 + +#define ITEMBGCOLORSELECTED 0xff +#define ITEMBGCOLORDESELECTED 0xe0e0e0 +#define ITEMFGCOLORSELECTED 0xffff00 +#define ITEMFGCOLORDESELECTED 0x040404 + +void drawItem(subMenu *menu, abstractMenuEntry *entry, int ypos, bool selected) +{ + /* Draw base rectangle */ + //GFXFrameBuffer.setAlpha( TITLEALPHA ); + GFXFrameBuffer.fillRect( TITLEXOFFSET+ITEMOFFSET, ypos, ITEMWIDTH, ITEMHEIGHT , + selected ? ITEMBGCOLORSELECTED : ITEMBGCOLORDESELECTED); + + /* Place title */ + //GFXFrameBuffer.setAlpha(0xff); + GFXFrameBuffer.setCursor( TITLEXOFFSET+ITEMOFFSET+1,ypos+1); + GFXFrameBuffer.setTextColor(selected?ITEMFGCOLORSELECTED:ITEMFGCOLORDESELECTED); + GFXFrameBuffer.print( entry->getTitle() ); + if (entry->isSubmenu()) { + /* Draw indicator */ + GFXFrameBuffer.setCursor( (ITEMOFFSET+TITLEXOFFSET)+ITEMWIDTH-6,ypos+1); + //GFXFrameBuffer.setTextColor(0x8080ff); + GFXFrameBuffer.write('>'); + } +} + +void renderSingleSubMenu(subMenu *menu) +{ + int index=0,selection; + int ypos = FIRSTITEMVPOS; + + GFXFrameBuffer.clear( 0 ); + GFXFrameBuffer.setTransparentColor(0xfefe); + //GFXFrameBuffer.setAlpha(TITLEALPHA); + + /* Draw top rectangle */ + GFXFrameBuffer.fillRect( TITLEXOFFSET, TITLEYOFFSET, TITLEWIDTH, TITLEHEIGHT , TITLEBG); + + /* Place title */ + GFXFrameBuffer.setCursor(TITLEXOFFSET+2,TITLEYOFFSET+2); + GFXFrameBuffer.setTextColor(TITLECOLOR); + GFXFrameBuffer.print( menu->getTitle() ); + + /* Draw all children */ + selection = menu->getSelected(); + + abstractMenuEntry *ch = menu->getChild(); + while (ch) { + drawItem( menu, ch, ypos, index==selection); + ypos+=ITEMSEP; + index++; + ch=ch->getNext(); + } +} +void updateMenus() +{ + + GFXFrameBuffer.overlayToFramebuffer( *gfx, 0 ,0 );//GFXFrameBuffer.getScreen() ); +} + +void moveMenuDown() +{ + moveMenuDown((subMenu*)currentMenu); +} + +void moveMenuDown(subMenu *menu) +{ + int index = menu->getSelected(); + abstractMenuEntry *entry = menu->at( index ); + if (entry==NULL) { + return; + } + + if (entry->hasNext()) { + /* Deselect...*/ + drawItem(menu, entry, FIRSTITEMVPOS+(index*ITEMSEP), false); + index++; + menu->setSelected(index); + drawItem(menu, entry->getNext(), FIRSTITEMVPOS+(index*ITEMSEP), true); + } + updateMenus(); +} + + +void moveMenuUp() +{ + moveMenuUp((subMenu*)currentMenu); +} + +void moveMenuUp(subMenu *menu) +{ + int index = menu->getSelected(); + if (index==0) + return; + + abstractMenuEntry *entry = menu->at( index ); + if (entry==NULL) + return; + /* Deselect...*/ + drawItem(menu, entry, FIRSTITEMVPOS+(index*ITEMSEP), false); + index--; + menu->setSelected(index); + drawItem(menu, menu->at(index), FIRSTITEMVPOS+(index*ITEMSEP), true); + updateMenus(); +} + +void menuSwitchTo(subMenu *newsubmenu) +{ + currentMenu = newsubmenu; + newsubmenu->setSelected(0); + renderSingleSubMenu((subMenu*)currentMenu); + updateMenus(); +} + +void menuShowTop() +{ + currentMenu = topMenu; + ((subMenu*)currentMenu)->setSelected(0); + renderSingleSubMenu((subMenu*)currentMenu); + updateMenus(); +} + +void menuExit() +{ + currentMenu = topMenu; +} + +void menuAction() +{ + menuAction((subMenu*)currentMenu); +} + +void menuAction(subMenu *menu) +{ + int index = menu->getSelected(); + abstractMenuEntry *e = menu->at( index ); + if (e) { + if (e->isSubmenu()) { + subMenu *subm = (subMenu*)e; + subm->reset(); + menuSwitchTo(subm); + } else { + menuItem *entry = (menuItem*)e; + entry->call(); + } + } +} + +void menuSetTop(subMenu *top) +{ + topMenu=currentMenu=top; +} + +void menuReset() +{ + currentMenu=topMenu; +} + +void menuInit(unsigned w, unsigned h) +{ + GFXFrameBuffer.begin(w,h); +} + +/* Now... font is 5x7. Panel is 96x64. + +ideally we can have 7 entries. H size is max 19 chars. +*/ +#ifdef __linux__ +int main() +{ + SDL_Init(SDL_INIT_VIDEO); + SDL_EventState(SDL_KEYDOWN,SDL_ENABLE); + SDL_EventState(SDL_KEYUP,SDL_ENABLE); + RGBPanel.begin(); + GFXFrameBuffer.begin(96,64); + //createMenus(); + RGBPanel.clear(0x202020); + RGBPanel.setTextSize(2); + RGBPanel.setTextColor(0xffffff); + RGBPanel.setCursor(0,0); + RGBPanel.print("_^/////-"); + RGBPanel.apply(); + + //currentMenu = topMenu; + + //renderSingleSubMenu((subMenu*)topMenu); + //updateMenus(); + SDL_Event Event; + while(1) { + while(SDL_PollEvent(&Event) != 0) { + //OnEvent(&Event); + if(Event.type == SDL_QUIT) return 0; + if(Event.type == SDL_KEYDOWN) { + SDL_KeyboardEvent ev = Event.key; + + if (ev.repeat==0) { + switch (SDL_GetScancodeFromKey(ev.keysym.sym)) { + case SDL_SCANCODE_UP: + moveMenuUp((subMenu*)currentMenu); + break; + case SDL_SCANCODE_DOWN: + moveMenuDown((subMenu*)currentMenu); + break; + case SDL_SCANCODE_RETURN: + menuAction((subMenu*)currentMenu); + break; + default: + break; + } + } + } + } + //Loop(); + //Render(); + SDL_Delay(1); // Breath + } + //Cleanup(); +} +#endif diff --git a/libraries/menus/menus.h b/libraries/menus/menus.h new file mode 100644 index 0000000..321e637 --- /dev/null +++ b/libraries/menus/menus.h @@ -0,0 +1,87 @@ +#ifndef __MENUS_H__ +#define __MENUS_H__ + +#ifdef __linux__ +#include +#else +#include +#endif + +#include + +struct abstractMenuEntry +{ + abstractMenuEntry(const char *title): m_title(title), + m_next(0) + { + } + virtual bool isSubmenu() const = 0; + abstractMenuEntry *getNext() { return m_next; } + bool hasNext() const { return m_next!=NULL; } + void link(abstractMenuEntry*e) { m_next=e; } + const char *getTitle() const { return m_title; } +private: + const char *m_title; + abstractMenuEntry *m_next; +}; + +struct subMenu: public abstractMenuEntry +{ + subMenu(const char *title): + abstractMenuEntry(title), m_selected(0), + m_children(0), + m_parent(0) + { + } + int getSelected() const { return m_selected; } + void setSelected(int v) { m_selected=v; } + virtual bool isSubmenu() const { return true; } + abstractMenuEntry *getChild() { return m_children; } + void appendChild(abstractMenuEntry *child); + void deleteChilds(); + void setParent(abstractMenuEntry *parent) { m_parent=parent; } + abstractMenuEntry *getParent() const { return m_parent; } + abstractMenuEntry *at(int index); + void reset() { m_selected=0; } +private: + int m_selected; + abstractMenuEntry *m_children, *m_parent; + +}; + +struct menuItem: public abstractMenuEntry +{ + menuItem(const char *title, void (*func)(void*), void*param=NULL): + abstractMenuEntry(title), m_callback(func), m_param(param) + { + } + void call() { + if (m_callback) + m_callback(m_param); + } + virtual bool isSubmenu() const { return false; } +private: + void (*m_callback)(void*); + void *m_param; +}; + + +void drawItem(subMenu *menu, abstractMenuEntry *entry, int ypos, bool selected); +void renderSingleSubMenu(subMenu *menu); +void updateMenus(); +void moveMenuDown(subMenu *menu); +void moveMenuUp(subMenu *menu); +void moveMenuDown(); +void moveMenuUp(); +void menuSwitchTo(subMenu *newsubmenu); +void menuExit(); +void menuSetTop(subMenu *menu); +void menuReset(); +void menuInit(unsigned w,unsigned h); +void menuShowTop(); +void menusSetRenderer(ZPUino_GFX*); + +void menuAction(); +void menuAction(subMenu*); + +#endif diff --git a/libraries/ps2/examples/ps2_kbd/ps2_kbd.ino b/libraries/ps2/examples/ps2_kbd/ps2_kbd.ino new file mode 100644 index 0000000..2100f34 --- /dev/null +++ b/libraries/ps2/examples/ps2_kbd/ps2_kbd.ino @@ -0,0 +1,44 @@ +/* + * an arduino sketch to interface with a ps/2 keyboard. + * Also uses serial protocol to talk back to the host + * and report what it finds. Used the ps2 library. + */ + +#include + +#define circuit ZPUino_Vanilla + +PS2 kbd(5, 4); //This is for PS/2 port A on the Papilio DUO with a Computing Shield. +//PS2 kbd(39, 41); //This is for PS/2 port B on the Papilio DUO with a Computing Shield. + +void kbd_init() +{ + char ack; + + kbd.write(0xff); // send reset code + ack = kbd.read(); // byte, kbd does self test + ack = kbd.read(); // another ack when self test is done +} + +void setup() +{ + Serial.begin(9600); + kbd_init(); +} + +/* + * get a keycode from the kbd and report it back to the + * host via the serial line. + */ +void loop() +{ + unsigned char code; + + for (;;) { /* ever */ + /* read a keycode */ + code = kbd.read(); + /* send the data back up */ + Serial.println(code, HEX); + // delay(20); /* twiddle */ + } +} diff --git a/libraries/ps2/examples/ps2_mouse/ps2_mouse.ino b/libraries/ps2/examples/ps2_mouse/ps2_mouse.ino new file mode 100644 index 0000000..d59b223 --- /dev/null +++ b/libraries/ps2/examples/ps2_mouse/ps2_mouse.ino @@ -0,0 +1,60 @@ +#include + +/* + * an arduino sketch to interface with a ps/2 mouse. + * Also uses serial protocol to talk back to the host + * and report what it finds. + */ + +#define circuit ZPUino_Vanilla + +//PS2 mouse(5, 4); //This is for PS/2 port A on the Papilio DUO with a Computing Shield. +PS2 mouse(39, 41); //This is for PS/2 port B on the Papilio DUO with a Computing Shield. + +/* + * initialize the mouse. Reset it, and place it into remote + * mode, so we can get the encoder data on demand. + */ +void mouse_init() +{ + mouse.write(0xff); // reset + mouse.read(); // ack byte + mouse.read(); // blank */ + mouse.read(); // blank */ + mouse.write(0xf0); // remote mode + mouse.read(); // ack + delayMicroseconds(100); +} + +void setup() +{ + Serial.begin(9600); + mouse_init(); +} + +/* + * get a reading from the mouse and report it back to the + * host via the serial line. + */ +void loop() +{ + char mstat; + char mx; + char my; + + /* get a reading from the mouse */ + mouse.write(0xeb); // give me data! + mouse.read(); // ignore ack + mstat = mouse.read(); + mx = mouse.read(); + my = mouse.read(); + + /* send the data back up */ + Serial.print(mstat, BIN); + Serial.print("\tX="); + Serial.print(mx, DEC); + Serial.print("\tY="); + Serial.print(my, DEC); + Serial.println(); +// delay(20); /* twiddle */ +} diff --git a/libraries/ps2/ps2.cpp b/libraries/ps2/ps2.cpp new file mode 100644 index 0000000..d421714 --- /dev/null +++ b/libraries/ps2/ps2.cpp @@ -0,0 +1,151 @@ +/* + * ps2.cpp - an interface library for ps2 devices. Common devices are + * mice, keyboard, barcode scanners etc. See the examples for mouse and + * keyboard interfacing. + * limitations: + * we do not handle parity errors. + * The timing constants are hard coded from the spec. Data rate is + * not impressive. + * probably lots of room for optimization. + */ + +#include "ps2.h" + +/* + * the clock and data pins can be wired directly to the clk and data pins + * of the PS2 connector. No external parts are needed. + */ +PS2::PS2(int clk, int data) +{ + _ps2clk = clk; + _ps2data = data; + gohi(_ps2clk); + gohi(_ps2data); +} + +/* + * according to some code I saw, these functions will + * correctly set the clock and data pins for + * various conditions. It's done this way so you don't need + * pullup resistors. + */ +void +PS2::gohi(int pin) +{ + pinMode(pin, INPUT); + digitalWrite(pin, HIGH); +} + +void +PS2::golo(int pin) +{ + pinMode(pin, OUTPUT); + digitalWrite(pin, LOW); +} + +/* write a byte to the PS2 device */ +void +PS2::write(unsigned char data) +{ + unsigned char i; + unsigned char parity = 1; + + gohi(_ps2data); + gohi(_ps2clk); + delayMicroseconds(300); + golo(_ps2clk); + delayMicroseconds(300); + golo(_ps2data); + delayMicroseconds(10); + gohi(_ps2clk); // start bit + /* wait for device to take control of clock */ + while (digitalRead(_ps2clk) == HIGH) + ; // this loop intentionally left blank + // clear to send data + for (i=0; i < 8; i++) + { + if (data & 0x01) + { + gohi(_ps2data); + } else { + golo(_ps2data); + } + // wait for clock + while (digitalRead(_ps2clk) == LOW) + ; + while (digitalRead(_ps2clk) == HIGH) + ; + parity = parity ^ (data & 0x01); + data = data >> 1; + } + // parity bit + if (parity) + { + gohi(_ps2data); + } else { + golo(_ps2data); + } + // clock cycle - like ack. + while (digitalRead(_ps2clk) == LOW) + ; + while (digitalRead(_ps2clk) == HIGH) + ; + // stop bit + gohi(_ps2data); + delayMicroseconds(50); + while (digitalRead(_ps2clk) == HIGH) + ; + // mode switch + while ((digitalRead(_ps2clk) == LOW) || (digitalRead(_ps2data) == LOW)) + ; + // hold up incoming data + golo(_ps2clk); +} + + +/* + * read a byte of data from the ps2 device. Ignores parity. + */ +unsigned char +PS2::read(void) +{ + unsigned char data = 0x00; + unsigned char i; + unsigned char bit = 0x01; + + // start clock + gohi(_ps2clk); + gohi(_ps2data); + delayMicroseconds(50); + while (digitalRead(_ps2clk) == HIGH) + ; + delayMicroseconds(5); // not sure why. + while (digitalRead(_ps2clk) == LOW) + ; // eat start bit + for (i=0; i < 8; i++) + { + while (digitalRead(_ps2clk) == HIGH) + ; + if (digitalRead(_ps2data) == HIGH) + { + data = data | bit; + } + while (digitalRead(_ps2clk) == LOW) + ; + bit = bit << 1; + } + // eat parity bit, ignore it. + while (digitalRead(_ps2clk) == HIGH) + ; + while (digitalRead(_ps2clk) == LOW) + ; + // eat stop bit + while (digitalRead(_ps2clk) == HIGH) + ; + while (digitalRead(_ps2clk) == LOW) + ; + golo(_ps2clk); // hold incoming data + + return data; +} + diff --git a/libraries/ps2/ps2.h b/libraries/ps2/ps2.h new file mode 100644 index 0000000..4c6c68e --- /dev/null +++ b/libraries/ps2/ps2.h @@ -0,0 +1,27 @@ +/* + * ps2.h - a library to interface with ps2 devices. See comments in + * ps2.cpp. + * Written by Chris J. Kiick, January 2008. + * Release into public domain. + */ + +#ifndef ps2_h +#define ps2_h + +#include "Arduino.h" + +class PS2 +{ + public: + PS2(int clk, int data); + void write(unsigned char data); + unsigned char read(void); + private: + int _ps2clk; + int _ps2data; + void golo(int pin); + void gohi(int pin); +}; + +#endif /* ps2_h */ + diff --git a/libraries/ramFS/ramFS.cpp b/libraries/ramFS/ramFS.cpp new file mode 100644 index 0000000..5a89bdf --- /dev/null +++ b/libraries/ramFS/ramFS.cpp @@ -0,0 +1,154 @@ +/*! + * @file ramFS.cpp + * Project RamFS Library + * @brief Allows SD or SmallFS files to be loaded into SDRAM. + * Version 1.0 + * @author Jack Gassett + * @date 11/10/12 + * License GPL + */ + +#include "ramFS.h" +#include +#ifdef __linux__ + +#include +#include +#include +#include "zstdio.h" +#include + +#define BE32(x) be32toh(x) + +#else + +#include "WProgram.h" + +#define BE32(x) x + +#endif + +#undef RAMFSDEBUG + +File modSDfile; + +extern void*__end__; +unsigned long *mbuf = (unsigned long*)&__end__+80000; + +RamFSFile::RamFSFile(){ + +} + +void *RamFSFile::zpuinomalloc(unsigned long size) +{ + void *ret = mbuf; + mbuf+=(size); + return ret; +} + +void RamFSFile::setInit(boolean active) +{ +// initState = active; +} +void RamFSFile::init() +{ +// Serial.println("Running malloc."); +// moddata = (unsigned char *)zpuinomalloc(500000*sizeof(unsigned char)); +// memset(moddata, 0, 500000*sizeof(unsigned char)); +// initState = true; +} + +int RamFS_class::begin() +{ + return 0; +} + +void RamFS_class::seek_if_needed(unsigned long address) +{ + +} + +unsigned RamFS_class::readByte(unsigned long address) +{ + return 0; + +} + + +void RamFS_class::read(unsigned long address, void *target, unsigned long size) +{ + +} + +RamFSFile RamFS_class::open(SmallFSFile *file) +{ + //Serial.println("In RamFS.open"); + return RamFSFile(file); +} + +RamFSFile::RamFSFile(SmallFSFile *file) +{ + filesize = file->size(); + file->seek(0x0, SEEK_SET); + moddata = (unsigned char *)malloc(filesize*sizeof(unsigned char)); + memset(moddata, 0, filesize*sizeof(unsigned char)); + file->read(&moddata[0], filesize); +} + +RamFSFile RamFS_class::open(File *file) +{ + return RamFSFile(file); +} + +RamFSFile::RamFSFile(File *file) +{ + unsigned long i = 0; + filesize = file->size(); + file->seek(0x0); + moddata = (unsigned char *)malloc(filesize*sizeof(unsigned char)); + memset(moddata, 0, filesize*sizeof(unsigned char)); + //file->read(&moddata[0], filesize); //TODO: Use this more efficient form when the SD library is fixed. + while (file->available()) { + moddata[i] = file->read(); + i++; + } +} + +int RamFSFile::read(void *buf, unsigned long s) +{ + + if (seekpos==filesize) + return 0; /* EOF */ + + if (s + seekpos > filesize) { + s = filesize-seekpos; + } + memcpy(buf, moddata+seekpos, s); + + seekpos+=s; + return s; +} + + +void RamFSFile::seek(unsigned long pos, int whence) +{ + unsigned long newpos; + + if (whence==SEEK_SET) + newpos = pos; + else if (whence==SEEK_CUR) + newpos = seekpos + pos; + else + newpos = filesize + pos; + + if (newpos>filesize) + newpos=filesize; + + if (newpos<0) + newpos=0; + + seekpos=newpos; +} + +RamFS_class RamFS; + diff --git a/libraries/ramFS/ramFS.h b/libraries/ramFS/ramFS.h new file mode 100644 index 0000000..702bfbc --- /dev/null +++ b/libraries/ramFS/ramFS.h @@ -0,0 +1,127 @@ +/*! + * @file ramFS.h + * Project RamFS Library + * @brief Allows SD or SmallFS files to be loaded into SDRAM. + * Version 1.0 + * @author Jack Gassett + * @date 11/10/12 + * License GPL + */ + +#ifndef __RAMFS_H__ +#define __RAMFS_H__ + +#ifdef __linux__ + +#else +#include "zpuino.h" +#endif + +#include +#include "SmallFS.h" + +#ifndef SEEK_SET +# define SEEK_SET 0 +# define SEEK_CUR 1 +# define SEEK_END 2 +#endif + +/** + * @brief RAMFS File Class + */ +class RamFSFile +{ +public: + RamFSFile(); + RamFSFile(File *file); + RamFSFile(SmallFSFile *file); + static void setInit(boolean active); + //RamFSFile(unsigned o,unsigned size): flashoffset(o),filesize(size),seekpos(0) {} + /** + * @brief Check if file was successfuly opened. + * @return true on success, false otherwise + */ + //bool valid() { return flashoffset>=0;}//!=-1; } + + /** + * @brief Read a chunk of data from file. + * @param buf The buffer where to store data + * @param size The number of bytes to read from file. + * @return The number of bytes read, 0 for EOF. + */ + int read(void *buf, unsigned long size); + /** + * @brief Seek current file position + * @param pos The required position + * @param whence Where to perform seek. Either SEEK_SET, SEEK_CUR or SEEK_END + */ + void seek(unsigned long pos, int whence); + /** + * @brief Get the file size. + * @return The file size. + */ + inline unsigned long size() const { return filesize; } + /** + * @brief Read a chunk of data from file, using a callback function. + * The function will be called for every byte read. + * @param size The number of bytes to read from file. + * @param callback The callback function to call + * @param data The data parameter to pass to callback function. + * @return The number of bytes read, 0 for EOF. + */ + + //int readCallback(int size, void (*callback)(unsigned char, void*), void *data); + + /** + * @brief Read a single byte + */ + unsigned readByte(); + static void *zpuinomalloc(unsigned long size); + +private: + void init(); + int flashoffset; + unsigned long filesize; + unsigned long seekpos; + unsigned char *moddata; + static boolean initState; +}; + +/** + * @brief Main filesystem class + */ +class RamFS_class { + friend class RamFSFile; +public: + /** + * @brief Initialize the RamFS filesystem + * @return 0 on success, -1 otherwise + */ + int begin(); + +protected: + + +protected: + void read(unsigned long address, void *target, unsigned long size); + void seek(unsigned long address) { seek_if_needed(address); } + unsigned readByte(unsigned long address); +public: + /** + * @brief Open a file on the filesystem. + * @param name The file name + * @return A new RamFSFile object. You should call valid() to check + * if file was successfully open. + */ + RamFSFile open(File *file); + RamFSFile open(SmallFSFile *file); + +private: + void seek_if_needed(unsigned long address); + +}; + +extern RamFS_class RamFS; + +#endif +